八股系列 Flink
Flink 和 SparkStreaming的区别
设计理念方面
SparkStreaming:使用微批次来模拟流计算,数据已时间为单位分为一个个批次,通过RDD进行分布式计算
Flink:基于事件驱动,是面向流的处理框架,是真正的流式计算
架构方面
SparkStreaming:角色包括 Master、Worker、Driver、Executor
Flink:角色包括 Jonmanager、Taskmanager和slot
窗口计算方面
SparkStreaming:只支持基于处理时间的窗口操作
Flink:可以支持时间窗口,也支持基于事件的窗口如滑动、滚动、会话窗口等
时间机制方面
SparkStreaming:只支持处理时间,产生数据堆积时候,处理时间和事件时间误差明显
Flink:支持事件时间、注入时间、处理时间,同事支持watermark机制处理迟到的数据,在处理大乱序的实时数据更有优势
容错机制方面
SparkStreaming:基于RDD或对宽依赖添加CheckPoint,利用 SparkStreaming的 direct方式与kafka保证 exactly once
Flink:基于状态添加CheckPoint,通过俩阶段提交协议来保证 exactly once
吞吐量与延迟方面
SparkStreaming:基于微批次的处理使得吞吐量是最大的,但付出了延迟的代价,只能做到秒级处理
Flink:数据是逐条处理,容错机制很轻量级,兼顾了吞吐量的同时又有很低的延迟,支持毫秒级处理