flink 知识点梳理

一、 状态、状态后端与checkpoint

状态

定义:状态是算子在运行期间维护的临时数据,数据存储在内存中,状态始终与算子关联;
分类:
普通算子状态:作用范围限定为算子任务
键值状态:根据输入流的键值进行状态数据隔离与维护

状态后端

1、定义:状态后端是决定如何以什么数据格式化和存储的管理状态的状态管理组件。

2、状态后端数据格式分类:

HashMapStateBackend :使用(key-value)的数据格式,以java对象存储在内存中
EmbeddedRocksDBStateBackend :
以(key-value)的数据格式序列化存储到本地磁盘(一般是hdfs等分布式文件系统);
适用场景:状态非常大、窗口非常长、key/value 状态非常大的 Job 和 所有高可用的场景。
瓶颈在状态数据读写(序列化和反序列化),会降低吞吐量,数据存储的瓶颈在本地磁盘的大小;
只要此状态后端的数据格式才能支持增量checkpoint(快照)

3、状态格式+状态存储分类:

旧版本的 MemoryStateBackend 等价于使用 HashMapStateBackend 和 JobManagerCheckpointStorage。
旧版本的 FsStateBackend 等价于使用 HashMapStateBackend 和 FileSystemCheckpointStorage。
旧版本的 RocksDBStateBackend 等价于使用 EmbeddedRocksDBStateBackend 和 FileSystemCheckpointStorage.

checkpoint

1、定义:定时把状态后端中存储的状态数据同步在远程文件系统中,支持flink任务失败恢复,保证数据的一致性和完整性的机制
2、原理:jobManager 协调者定时向source流中注入barrier ,在对齐checkpoint模式下, 每个算子的输入流的barrier都到达后会触发算子进行状态保存,
当设置定时checkpoint时间到达就会把整个作业的状态数据同步存储到状态后端(远程文件系统或内存)中,支持flink作业在出现任务故障的时候会从最新的checkpoint恢复.
3、快照分类:支持增量和全量快照
4、快照方式:

对齐快照:
	1、在对齐模式下进行checkpoint , 算子要等待所有输入流的 barrier n 到达才会继续处理新数据,否则算子会先缓存其他输入流的数据,直到所有输入流的 barrier n到达;
	2、作用:保证存在数据延迟和数据乱序的情况下,全局统一的时间戳、数据一致性和正确性。
	
非对齐快照

二、Window 、时间语义、Watermark

1. Window

  1. Window 概述

    flink Streaming 是一种流式计算,处理的数据是无限流且不断增加的数据集,Window 是一种把这种无限数据流切割成有限块进行数据局处理的手段。
    
  2. Window 类型分类

    1. CountWindow:按照指定的数据条数生成一个 Window,与时间无关。
    2. TimeWindow:按照时间生成 Window。
    3. 对于 TimeWindow,可以根据窗口实现原理的不同分成三类:
      1. 滚动窗口(Tumbling Window); 使用场景: 适合做 BI 统计等(做每个时间段的聚合计算)
      2. 滑动窗口(Sliding Window); 使用场景: 对最近一个时间段内的统计(求某接口最近 5min 的失败率来决定是否要报警)。
      3. 会话窗口(Session Window)

2. 时间语义

1. Event Time : 是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳。 
2. Processing TIme : 是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是 Processing Time。
3. Ingestion Time:是数据进入 Flink 的时间。

3. Watermark - 水印

  1. 时间延迟

三、函数

窗口函数

  1. 概述:依附于 window 窗口的函数,叫做窗口函数;如:ReduceFunction、FoldFunction、WindowFunction、ProcessWindowFunction 等
    备注:窗口函数需要自己实现。

触发器

驱逐器(Evictors)

  1. 概述:Flink的窗口模型允许指定一个除了WindowAssigner和Trigger之外的可选参数Evitor,这个可以通过调用evitor(…)方法(在这篇文档的开头展示过)来实现。这个驱逐器(evitor)可以在触发器触发之前或者之后,或者窗口函数被应用之前清理窗口中的元素。

  2. Flink有三个预实现的驱逐器

     CountEvitor:在窗口中保持一个用户指定数量的元素,并在窗口的开始处丢弃剩余的其他元素。
     DeltaEvitor: 通过一个DeltaFunction和一个阈值,计算窗口缓存中最近的一个元素和剩余的所有元素的delta值,并清除delta值大于或者等于阈值的元素。
     TimeEvitor:使用一个interval的毫秒数作为参数,对于一个给定的窗口,它会找出元素中的最大时间戳max_ts,并清除时间戳小于max_tx - interval的元素。
     # 默认情况下:所有预实现的evitor都是在window function前应用它们的逻辑
     # 注意:指定一个Evitor要防止预聚合,因为窗口中的所有元素必须得在计算之前传递到驱逐器中
     # 注意:Flink 并不保证窗口中的元素是有序的,所以驱逐器可能从窗口的开始处清除,元素到达的先后不是那么必要。
    
  3. 应用场景:数据过滤

四、flink 容错

1、checkpoint 增量/全量

增量chekpoint 目录:hdfs://prod-yingzi-cluster/flink_realtime_cal/checkpoints_0910/dwd_fpf_kfk_anc_insert_into/c42b1256e4a274ed163a2abf61aad634/chk-8/_metadata
全量checkpoint 目录:hdfs://prod-yingzi-cluster/flink_realtime_cal/checkpoints_0910/dwd_fpf_kfk_anc_event_view/33768b9882c6dd37a5aed76832e5d833/chk-173

备注:增量 ck 目录要增加 _metadata , 全量不需要
使用【flink 任务启动】:./flink-1.13.2-rocksdb/bin/flink run  -m yarn-cluster-s hdfs://prod-yingzi-cluster/flink_realtime_cal/checkpoints_0910/dwd_fpf_kfk_anc_insert_into/a2cfd4749a8c2adf9dacbcef1828cbc0/chk-40/_metadata -ynm $yarn_name"_0910" -p $p -ys $ys -yjm $yjm -ytm $ytm -yqu flink -c com.yingzi.dsc.realtime.Main ./flink.jar ./application.properties $sql_name $config

2、checkpoint 设置不同时长的意义

设置  5分钟 checkpoint 一次, 当任务经常出现 taskManeger lost 的情况, 可以减少数据回溯范围,减少数据影响程度;
设置 每小时 checkpoint 一次, 当任务每次出现异常,任务都会从最近checkpoint重启, 数据回溯范围大,且数据影响访问广。

2、savepoint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值