流框架对比
Storm :
Storm是流处理世界的强者。它是最古老的开源流框架,也是最成熟和可靠的框架之一。这是真正的流传输,适合基于简单事件的用例。
优点:
- 极低的延迟,真正的流,成熟和高吞吐量
- 非常适合简单的流媒体用例
缺点:
- 没有状态管理
- 没有高级功能,例如事件时间处理,聚合,开窗,会话,水印等
- 一次保证
Spark Streaming :
Spark已成为批处理中hadoop的真正继任者,并且是第一个完全支持Lambda架构的框架(在该框架中,实现了批处理和流传输;实现了正确性的批处理;实现了流传输的速度)。它非常受欢迎,成熟并被广泛采用。Spark Streaming是随Spark免费提供的,它使用微批处理进行流媒体处理。在2.0版本之前,Spark Streaming有一些严重的性能限制,但是在新版本2.0+中,它被称为结构化流,并具有许多良好的功能,例如自定义内存管理(类似flink),水印,事件时间处理支持等。另外,结构化流媒体更加抽象,在2.3.0版本以后,可以选择在微批量和连续流媒体模式之间进行切换。连续流模式有望带来像Storm和Flink这样的子延迟,但是它仍处于起步阶段,操作上有很多限制。
优点:
- 支持Lambda架构,Spark免费提供
- 高吞吐量,适用于不需要亚延迟的许多使用情况
- 由于微批量性质,默认情况下具有容错能力
- 简单易用的高级API
- 庞大的社区和积极的改进
- 恰好一次
缺点:
- 不是真正的流,不适合低延迟要求
- 要调整的参数太多。很难做到正确。
- 天生无国籍
- 在许多高级功能方面落后于Flink
Kafka Streams :
与其他流框架不同,Kafka Streams是一个轻量级的库。对于从Kafka流式传输数据,进行转换然后发送回kafka很有用。我们可以将其理解为类似于Java Executor服务线程池的库,但具有对Kafka的内置支持。它可以与任何应用程序很好地集成,并且可以立即使用。
由于其重量轻的特性,可用于微服务类型的体系结构。Flink在性能方面没有匹配之处,而且不需要运行单独的集群,非常方便并且易于部署和开始工作。
Kafka Streams的一个主要优点是它的处理是完全精确的端到端。可能是因为来源和目的地均为Kafka以及从2017年6月左右发布的Kafka 0.11版本开始,仅支持一次。要启用此功能,我们只需要启用一个标志即可使用。
优点:
- 重量很轻的库,适合微服务,IOT应用
- 不需要专用集群
- 继承卡夫卡的所有优良特性
- 支持流连接,内部使用rocksDb维护状态。
- 恰好一次(从Kafka 0.11开始)。
缺点
- 与kafka紧密结合,在没有kafka的情况下无法使用
- 婴儿期还很新,尚待大公司测试
- 不适用于繁重的工作,例如Spark Streaming,Flink。
Flink :
Flink也来自类似Spark这样的学术背景。Spark来自加州大学伯克利分校,而Flink来自柏林工业大学。像Spark一样,它也支持Lambda架构。但是实现与Spark完全相反。虽然Spark本质上是一个批处理,其中Spark流是微批处理,并且是Spark Batch的特例,但Flink本质上是一个真正的流引擎,将批处理视为带边界数据流的特例。尽管这两个框架中的API都是相似的,但是它们在实现上没有任何相似性。在Flink中,诸如map,filter,reduce等的每个函数都实现为长时间运行的运算符(类似于Storm中的Bolt)
Flink看起来像是Storm的真正继承者,就像Spark批量继承了hadoop一样。
优点:
- 开源流媒体领域创新的领导者
- 具有所有高级功能(例如事件时间处理,水印等)的第一个True流框架
- 低延迟,高吞吐量,可根据要求进行配置
- 自动调整,无需调整太多参数
- 恰好一次
- 被Uber,阿里巴巴等大型公司广泛接受。
缺点
- 起步较晚,最初缺乏采用
- 社区不如Spark大,但现在正在快速发展