Spark Streaming
- 数据模型Dstream,其实是一个RDD集合,批处理。
- 运行时,根据DAG划分Stage,生成taskSet,根据资源调度task。
- 角色Master和Worker。Driver 负责调度Task,Executor负责执行 Task。
- 支持处理时间,Structrued Streaming 支持处理事件时间,有watermark,支持处理乱序时间
- 状态的保存使用checkpoint,但是会产生很多小文件。要借助外部存储时,会频繁交互。
- 手动维护offset可以实现Exectly-one
- 与kafka0.8不支持检测新增分区,与kafka0.10支持检测新增分区。
Flink
- 数据流(事件序列),事件触发计算更状态,真正的流处理
- 运行时,StreamGraph,JobGraph,ExecutionGraph,生成固定的拓扑结构图,最后交给JobManager执行。
- JobManager和TaskManager,TaskManager上的Solt数代表着TaskMnager的并行度。
- 支持 处理时间,事件时间,注入时间(数据进入flink的时间),有watermark,支持处理乱序时间
- 使用fsStateBackend (HDFS上)和 RocketsDBStateBackend(本地)保存状态。
- 与kafka 0.11 配合使用可以实现 Exectly-one
- FlinkKafkaConsumerBase 的run方法里,创建了一个线程定期检测kafka新增分区。