《基于Apache Flink的流处理》读书笔记( 三 )


十、WaterMark特殊的数据记录,必须单调递增        处理乱序事件,正确处理乱序事件,通常用WaterMark结合Windows实现        当时间戳达到窗口关闭时间,不应该立即触发窗口计算,等待一段时间,等待延迟再关闭窗口
水位线分配策略                周期性:以固定事件间隔来发出水位线并且推动事件前进 。默认间隔为200毫秒                        AssignerWithPeriodicWatermarks                定点水位线分配:根据输入事件的属性来生成水位线                        AssignerWithPunctuatedWatermarks
十一、Flink检查点算法基于Chandy-Lamport分布式快照算法来实现        该算法不会暂停整个应用,而是会把任务处理和检查点分离,这样在部分任务持久化状态过程中,其他任务还可以继续执行 。         检查点的原理步骤:         1.由JobManager向Source数据源任务生成一个新的检查点编号,Source算子接收到信息后,暂停发出记录,利用状态后端触发生成本地状态检查点,状态后端保存完检查点后通知任务,随后任务向JobManager发送确认信息,随后恢复正常工作,然后生成特殊的CheckPoint Barrier记录,以广播的形式发送到下游任务 。         2.当下游Transform算子接收到新的检查点分割符号,会暂停处理并且缓存当前流的数据,等待接收其他分区的检查点分隔符,所有分隔符到达后,通知状态后端生成检查点,保存通知JobManager后,向下游发送检查点分隔符CheckPoint Barrier后,继续处理数据 。         3.Sink算子接收到分隔符后依次等待分隔符到齐后,生成快照并且写入检查点,向JobManager确认 。         4.当JobManager确认已接受所有应用任务返回检查点确认消息后,将此次检查点标记为完成 。
十二、Flink算子12.1基本操作1.map 对每个元素应用函数返回新的结果         2.filter 给出给定的条件过滤数据         3.flatMap 转换类似map,对每个输入产生零个、一个或多个输出事件,事实可以看作filter和map的泛化
12.2KeyedStream从逻辑上将事件按照键值分配到多条独立的子流中         1.keyBy:指定的键值将一个DataStream转化为KeyedStream         2.滚动聚合:滚动聚合作用与KeyedStream上,它将生成一个包含聚合结果的DataStream,主要操作有:sum、min、max、minBy、maxBy         3.Reduce:滚动聚合的泛化,它将一个ReduceFunction应用在一个KeyedStream上,每个到来的事件都会和Reduce结果进行一次组合,从而产生一个新的DataStream
12.3多流转换将多条流联合起来处理,或将一条流分割成多条流以应用不同逻辑 。        Union:合并两条或多条类型相同的DataStream,生成一条新的类型相同的DataStream        Connect:接收一个DataStream并返回一个ConnectedStream对象        Split和Select:union转换的你操作 。将输入流分割成2条或多条类型和输入流相同的输出流 。

经验总结扩展阅读