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


十一、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条或多条类型和输入流相同的输出流 。
12.4分发转换在使用DataStream API构建应用时,系统会根据操作语义和配置的并行度自动选择数据分区策略并且数据转发到正确的目标,返回的是DataStream 。        shuffle:随机数据交换策略:均匀的分布随机将记录发往后继算子的并行任务        rebalence:轮流 , 将输入流中的事件以轮流的方式均匀地分配给后继任务        rescale:重调 , 轮流对事件进行分发,单局限于部分后继任务(一个Stream会指定1个或多个Stream均匀分发,而不是对所有Stream均匀分发),当接收端任务远大于发送端任务有效        broadcast:广播 , 将输入流的事件复制并发往下游算子        grobal:将输入流中的所有事件发往下游算子的第一个并行任务
十三、KeyedProcessFunction作用于KeyedStream上,使用非常灵活,该函数会针对流中每条记录调用一次,实现了RichFunction接口 , 支持了open、close、getRuntimeContext,等方法,它还会提供以下2个方法         processElement:会针对流中每条记录都调用一次         onTimer:回调函数,注册的计时器触发时被调用
十四、触发器决定了什么时候窗口准备就绪,触发计算 , 每个窗口都会分配默认的Trigger 。比如EventTime的EventTimerTrigger , ProcessingTime的ProcessingTimeTrigger 。        需要继承Trigger抽象类                onElement:在窗口中没进入一条数据时调用                onProcessingTime:根据ProcessingTime判断是否满足定时器的条件调用                onEventTime:根据窗口最新的EventTime判断是否满足定时器的条件                clear:在窗口清除时调用        前3个方法都会返回TriggerResult , 其中包含了4个枚举值                CONTINUE:表示窗口不执行任何操作 。即不触发窗口计算,也不删除元素                FIRE:触发窗口的计算,单保留窗口元素                PURGE:不触发窗口计算 , 丢弃窗口,并且删除窗口元素                FIRE_AND_PURGE:触发窗口计算 , 输入结果 , 并且清楚窗口数据

推荐阅读