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


12.4分发转换在使用DataStream API构建应用时,系统会根据操作语义和配置的并行度自动选择数据分区策略并且数据转发到正确的目标,返回的是DataStream 。        shuffle:随机数据交换策略:均匀的分布随机将记录发往后继算子的并行任务        rebalence:轮流,将输入流中的事件以轮流的方式均匀地分配给后继任务        rescale:重调,轮流对事件进行分发,单局限于部分后继任务(一个Stream会指定1个或多个Stream均匀分发,而不是对所有Stream均匀分发),当接收端任务远大于发送端任务有效        broadcast:广播,将输入流的事件复制并发往下游算子        grobal:将输入流中的所有事件发往下游算子的第一个并行任务
十三、KeyedProcessFunction【《基于Apache Flink的流处理》读书笔记】作用于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:触发窗口计算,输入结果,并且清楚窗口数据
十五、基于时间的双流Join15.1基于间隔的Join基于时间的Join会对两条流中拥有相同键值以及彼此之间时间戳不超过某一指定间隔的的事件进行Join        也就是它只支持事件语义以及INNER JOIN        基于间隔的Join需要同时对双流的记录进行缓冲,缓冲的依据是配置的between时间戳,有2个变量,一个是下界,为负值,一个是上界,为正值 。对于第一条流来说,时间戳大于当前水位线减去间隔上界的数据都会被缓存起来,对于第二条流而言,所有时间戳大于当前水位线加上间隔下界的数据都会被缓存起来 。
15.2基于窗口的Join基于窗口的Join原理是:将两条流输入流中的元素分配到公共窗口中并且在窗口完成时进行Join 。具体的做法是:通过窗口分配器将2条流中的事件分配到公共的窗口内 。当公共的窗口触发计算时,算子会遍历2个输入中元素的每个组合去调用JoinFunction 。

经验总结扩展阅读