ApacheFlink论文简读

更新时间:2023-06-20 20:40:41 阅读: 评论:0

ApacheFlink论⽂简读
转载⾃:
Flink不同于Spark的batch processing,它着眼于data streaming processing。它的输⼊可被看做⼀条⽆穷的stream,将函数应⽤到stream上,再输出。Flink底层是流式处理,延迟更⼩,但是在某些时候batch processing可能更有效,因此Flink在上层也基于流式处理构建了batch处理,它通过记录流式处理的start point,以及维护流式运⾏过程中的state来实现⼀个窗⼝的batch处理。
batch处理与流式处理的异同
1. batch看到是⼀个datat,它可认为是⼀堆⽆序的records集合,然后将算法应⽤到datat上⾯。Spark采⽤的内存型的RDD,然后将
educationusa其划分成⼀个个的⼩的batch,Schedule这些batch到不同的机器上执⾏。Spark的batch处理过程可看做⼀个有向⽆环图,在多轮iteration的过程中,会不断的schedule job,会有⼀定的处理时延。
2. 流式处理看到的是⼀条具有⽆限输⼊的记录流,与batch不同的是,它的输⼊有序,并有时间戳的概念。Flink在这个数据流上应⽤算法
处理数据,延迟很低;在有batch需求的场景下,可通过设置流处理起始点,并记录处理状态,更新状态,来实现batch处理。此外,Flink有⼀个专门设计的API来⽀持static datats,它使⽤专门的数据结构和算法,往往更⾼效。
Flink基础软件栈架构
1. 软件栈
如上⾯图1所⽰,Flink Core底层是流处理引擎,然后在上层抽象出Batch processing和Stream
Processing,再上层构建⼏种常⽤的应⽤:表格,图,机器学习,复杂事件处理等
2. 流处理模型
客户端接收程序代码,转换成data-flow graph,然后提交给Job Manager。Job Manager将job分发给Task manager并跟踪状态和执⾏结果,发⽣失败的failover等等。
上层的任何代码都最终会被编译成data-flow graph,然后交给Flink的Core层来统⼀处理。
Flink底层数据流图
第72届金球奖
数据流图是上层各种API的底层抽象,被Core层所执⾏,它主要包括两种结构实体:有状态的Operators以及Data Streams。当前层的Operator接收上⼀层的Operator的输出作为输⼊,并将运算结果以流的形式传递到下⼀层的Operator,Data Stream 是连接两个Operator的通道。
motel是什么意思
jusco基本结构
如上图所⽰,OP1这个运算符接收SRC1的输出,并将运算结果传递到下⼀层的Operator SNK1。这三个Operator由两个data stream进⾏连接,分别是IS1和IS3。这两个数据流有所不同,IS1是⼀种暂时性的中间结果,这意味着我们不需要将其序列化到⾮易失性存储实体中(内存中暂存即可),这就为Pipeline的处理提供了可能,SRC1和OP1可以并⾏运⾏,上层处理⼀个record之后,可以直接传递到下层继续处理,组成⼀个pipeline的模式;⽽IS3是需要将流序列化到⾮易失性存储的数据流,这种意
味着OP1必须⾸先将输出序列化到磁盘中,SNK1才能启动执⾏,这样两边的Operator就不能并⾏运⾏,同时还有额外的磁盘I/O的开销,这种流叫作blocking data stream。blocking data stream要求⽣产者必须⽣产⼀定量的数据之后,才能⽤于下层的消费,它会先将积累的records存储到内存中,如果内存不够,那就序列化到磁盘中。
数据交换的时延和吞吐
两个Operator通过交换buffer的⽅式来交换数据,buffer在两种情况下传递到下层的消费者:(a) buffer满了, (b) 超时了。如果超时时间⽐较短或者buffer⽐较⼩,那么延迟会很低,但是这样的话吞吐量会下降,通过调整超时时间或者buffer的⼤⼩,可以调整throughout和latency的tradeoff。
控制事件与records的融合
值得注意的是,Flink在records中间可以⾃由的插⼊Control Event,operator在收到相应的event进⾏相应的处理,这使得控制事件可以与现有的流直接融合,举例如下三种控制事件:
1. checkpoint barriers
courier这种控制事件⽤于Fault tolerance。在流中插⼊checkpoint事件,会促使流将当前的状态保存下来,当发⽣故障后,可以直接使⽤上⼀次的checkpoint来恢复。
2. watermarks
这种控制事件标识records的处理状态。我们知道records有两种时间概念:event-time和processing-time,在延迟很⼤时,这两个指标可能相差很⼤。为了控制差异,可以插⼊watermarks,并绑定⼀个时间属性t,例如如果operator如果收到了⼀个event-time为t的watermarks,意味着所有event-time⼩于t的records全都进⼊了operator中。这种机制在window records处理特别有效,例如5s⼀个windows,在5s结束之后插⼊⼀个watermark,来指⽰operator处理这个完整的windows。
3. iteration barriers
这个专门的barrier是⽤于像机器学习这种需要多轮iteration的场景。传统的Spark在iteration中,必须通过schedule a new job,这⽆疑会浪费⼤量的系统。很多场景下,迭代过程应该是⼀个⾃循环的过程:接收外部输⼊,内部多轮迭代,传递到下层输出。
下图是⼀个简单的迭代处理框架,operator内部包含了核⼼的处理逻辑。
Flink上层分析框架
有状态的流处理
difficult很多上层应⽤需要状态管理,例如ssion处理,图处理,机器学习(例如⼀颗训练好的决策树)等。Flink提供了接⼝来bind operator和相应的状态,另外⽤户还可以指定这些状态在后端存储,以⽤于故障恢复。
鹅蛋脸适合什么发型
流窗⼝
这种主要⽤于时间段内分析,很多分析操作需要对窗⼝获取⼀些统计信息。Flink使⽤windows的assigned(⽤于record分配到哪个窗⼝), trigger(⽤于指定窗⼝啥时候执⾏),retain(⽤于指定窗⼝多少内容保留到下⼀次)。下⾯是⼀个代码的例⼦,它定义了⼀个全局window,每1000次触发⼀次窗⼝执⾏,并且每次保留100个records,⽤于下次的窗⼝。
朗文少儿英语教材
stream
.ate())
.trigger(Count.of(1000))
wisconsin
.evict(Count.of(100))
giveaway
[1] Apache Flink™: Stream and Batch Processing in a Single Engine

本文发布于:2023-06-20 20:40:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/151815.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:处理   状态   需要   下层   流式   传递   例如   时间
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图