1.1 Flink
Flink主要用于流处理和批处理,它的设计目标是提供高性能和低延迟的数据处理能力。
在Flink中,所有数据都看做流,是一种很好的抽象。当Flink集群启动后,首先会启动一个JobManager和一个或多个TaskManager.
优点:
- 支持带有事件时间(event time)的语义的流处理和窗口处理。事件时间的语义使流计算结果更准确,尤其是在事件到达无序或延迟的情况下。
- 支持高度灵活的窗口(window)操作。
- 支持轻量的容错处理,既能保持高吞吐率又能保证一致性。
- 支持高吞吐、低延迟、高性能的流处理。
缺点:
- 无法正确处理超过最大无序边界的数据。
- 结果不确定。
1.2 Storm
Storm用于用于实时数据处理,设计目标是提供高吞吐量和低延迟的数据处理能力。
流程:主节点nimbus,从节点supervisor。用户提交作业给nimbus,nimbus把任务分配给supervisor,这些提交的任务就是topology(拓扑),运行的作业分为两种spout和bolt。
优点:Storm是一个免费并开源的分布式实时计算系统。它很简单,可用于任意编程语言。适用于纯实时,不能忍受1s以上延迟的情景下使用;对数据完善精度要求极高,一条也不能多,一条也不能少。适用于不需要在中间执行SQL交互查询、复杂的transformation算子等。
缺点:无法将实时处理出来的数据立即无缝批处理。
1.3 Spark Streaming
Spark Streaming主要用于流处理和批处理,目标是提供灵活性和高性能。
Spark Streaming是一个粗粒度的框架,也就是只能对一批数据指定处理方法,核心是使用微批次(Mcro-batch)架构。根据程序配置的时间,将时间范围内所有数据打成一个RDD,发送给Spark Core处理,如果入水口大于出水口速度,势必造成水管破裂,所以内部会采用背压机制进行处理。
优势:位于Spark生态技术栈,因此Spark Streaming可以和Spark Core、Spark SQL无缝整合。意味着可以对实时处理出来的中间数据立即在程序中无缝进行延迟批处理、交互式查询等操作。
缺点:不是纯实时,是准实时。