流式计算技术选型

1,364 阅读2分钟

在流式计算领域,常用的技术框架有

  • Apache Storm
  • Apache Flink
  • Apache Spark Streaming

Flink、Storm、Spark Streaming 技术对比

对比项FlinkStormSpark Streaming
诞生时间2014 年 12月2014 年 9 月 17 日2010
社区及生态被阿里收购后,有了官方中文社区、很多资料也有中文版、在国内使用率最高社区活跃,文档资料详细社区活跃,文档资料详细
状态管理基于操作的状态管理无状态管理基于 DStream的状态管理
消息投递保证次数最多一次、至少一次、恰好一次最多一次、至少一次最多一次、至少一次、恰好一次
容错方式checkpoint机制:通过分布式一致性快照机制,对数据流和算子状态进行保存ACK 机制:对每个消息进行全链路跟踪,失败或超时进行重发RDD CheckPoint(基于 RDD 做 CheckPoint)
吞吐量
延迟中等
模型Native(数据进入立即处理)Native(数据进入立即处理)Micro-Batching
API语言scala、java、python、sqlscala、java、sqlscala、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 凭借着高吞吐量、低延迟、方便的状态管理、精确一次的消息投递、强大的容错机制,以及繁荣的中文社区,在国内有着相当大的使用率和普及率