在流式计算领域,常用的技术框架有
- Apache Storm
- Apache Flink
- Apache Spark Streaming
Flink、Storm、Spark Streaming 技术对比
对比项 | Flink | Storm | Spark Streaming |
---|---|---|---|
诞生时间 | 2014 年 12月 | 2014 年 9 月 17 日 | 2010 |
社区及生态 | 被阿里收购后,有了官方中文社区、很多资料也有中文版、在国内使用率最高 | 社区活跃,文档资料详细 | 社区活跃,文档资料详细 |
状态管理 | 基于操作的状态管理 | 无状态管理 | 基于 DStream的状态管理 |
消息投递保证次数 | 最多一次、至少一次、恰好一次 | 最多一次、至少一次 | 最多一次、至少一次、恰好一次 |
容错方式 | checkpoint机制:通过分布式一致性快照机制,对数据流和算子状态进行保存 | ACK 机制:对每个消息进行全链路跟踪,失败或超时进行重发 | RDD CheckPoint(基于 RDD 做 CheckPoint) |
吞吐量 | 高 | 低 | 高 |
延迟 | 低 | 低 | 中等 |
模型 | Native(数据进入立即处理) | Native(数据进入立即处理) | Micro-Batching |
API语言 | scala、java、python、sql | scala、java、sql | scala、java、python、sql、R |
运行时 | 单个jvm进程可以有多个应用多个任务 | 单个jvm进程单个应用多个任务,每个线程多任务 | 单个jvm进程单个应用多个任务,每个线程单个任务 |
Flink、Spark Streaming 都有内置的状态管理,而 Storm 没有内置的状态管理,需要手动管理维护状态,比较麻烦,如果你的场景使用状态比较多的话,建议选择 Flink 或 Spark Streaming
Flink、Spark Streaming 都支持精确一次的处理语义,Storm 目前没有支持
Flink、Spark Streaming 吞吐量都比较高,而 Flink 和 Storm 都是原生的流式处理框架,因此数据处理的延迟都比较低,Spark Streaming 的流式处理实际是微小的批处理,延迟会稍微高些
Storm、Spark Streaming 都是单个jvm进程运行单个应用,应用之间相互隔离,方便调试
但是总体上看,Flink 凭借着高吞吐量、低延迟、方便的状态管理、精确一次的消息投递、强大的容错机制,以及繁荣的中文社区,在国内有着相当大的使用率和普及率