赞
踩
Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。
flink架构图:
Flink包含三大核心组件:
在执行引擎这一层,流处理系统与批处理系统最大的不同在于节点之间的数据传输方式。
对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理,这就是典型的一条一条处理.
对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,
并不会立刻通过网络传输到下一个节点,当缓存写满的时候,就持久化到本地硬盘上,当所有数据都被处
理完成后,才开始将处理后的数据通过网络传输到下一个节点
这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求
Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型
Flink以固定的缓存块为单位进行网络数据传输,用户可以通过缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似前面所说的流处理系统的标准模型,此时系统可以获得最低的处理延迟
如果缓存块的超时值为无限大,则Flink的数据传输方式类似前面所说的批处理系统的标准模型,此时系统可以获得最高的吞吐量。 这样就比较灵活了,其实底层还是流式计算模型,批处理只是一个极限特例而已。
接下来我们来对比一下目前大数据领域中的三种实时计算引擎
产品 Storm SparkStreaming Flink
模型 Native Mirco-Batching Native
API 组合式 声明式 声明式
语义 At-least-once Exectly-once Exectly-once
容错机制 Ack Checkpoint Checkpoint
状态管理 无 基于DStream 基于操作
延时 Low Medium Low
吞吐量 Low High High
1:需要关注流数据是否需要进行状态管理
2:消息语义是否有特殊要求At-least-once或者Exectly-once
3:小型独立的项目,需要低延迟的场景,建议使用Storm
4:如果项目中已经使用了Spark,并且秒级别的实时处理可以满足需求,建议使用SparkStreaming
5:要求消息语义为Exectly-once,数据量较大,要求高吞吐低延迟,需要进行状态管理,建议选择Flink
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。