资源说明:Flink、Storm、Spark Streaming三种流框架的对比分析
Flink架构及特性分析
Flink是一个原生的流处理系统,提供高级的API。Flink也提供API来像Spark一样进行批处理,但两者处理的基础是完全不同的。Flink把批处理当作流处理中的一种特殊情况。在Flink中,所有的数据都看作流,是一种很好的抽象,因为这更接近于现实世界。
Flink的基本架构
Flink系统的架构与Spark类似,是一个基于Master-Slave风格的架构。当Flink集群启动后,首先会启动一个JobManager和一个或多个的TaskManager。由Client提交任务给JobManager,JobManager再调度任务到各个TaskManager去执行,然后TaskManager将心跳和统计信息汇报给JobManager。TaskManager之间以流的形式进行数据的传输。上述三者均为独立的JVM进程。
JobManager的作用
JobManager是Flink系统的协调者,它负责接收Flink Job,调度组成Job的多个Task的执行。同时,JobManager还负责收集Job的状态信息,并管理Flink集群中的从节点TaskManager。JobManager所负责的各项管理功能,它接收到并处理的事件主要包括:
* RegisterTaskManager:在Flink集群启动的时候,TaskManager会向JobManager注册,如果注册成功,则JobManager会向TaskManager回复消息AcknowledgeRegistration。
* SubmitJob:Flink程序内部通过Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息。
* CancelJob:请求取消一个Flink Job的执行,CancelJob消息中包含了Job的ID,如果成功则返回消息CancellationSuccess,失败则返回消息CancellationFailure。
* UpdateTaskExecutionState:TaskManager会向JobManager请求更新ExecutionGraph中的ExecutionVertex的状态信息,更新成功则返回true。
* RequestNextInputSplit:运行在TaskManager上的Task,请求获取下一个要处理的输入Split,成功则返回NextInputSplit。
* JobStatusChanged:ExecutionGraph向JobManager发送该消息,用来表示Flink Job的状态发生的变化,例如:RUNNING、CANCELING、FINISHED等。
TaskManager的作用
TaskManager也是一个Actor,它是实际负责执行计算的Worker,在其上执行Flink Job的一组Task。每个TaskManager负责管理其所在节点上的资源信息,如内存、CPU等。
Storm架构及特性分析
Storm是一个分布式实时计算系统,主要用于处理大规模的数据流。Storm的架构主要包括Topology、Spout、Bolt、acker等组件。Topology是Storm的计算逻辑单元,Spout是数据源,Bolt是处理单元,acker是任务执行单元。
Storm的基本架构
Storm的架构主要包括Nimbus、Supervisor、Worker三个组件。Nimbus是Storm的master节点,负责管理Topology的执行,并将Topology分配给Supervisor节点。Supervisor节点负责管理Worker节点,并将任务分配给Worker节点。Worker节点是实际执行计算的节点。
Spark Streaming架构及特性分析
Spark Streaming是一个基于Spark Core的流处理系统,主要用于处理大规模的数据流。Spark Streaming的架构主要包括Driver、Executor、Receiver三个组件。Driver是Spark Streaming的master节点,负责管理Job的执行,并将Job分配给Executor节点。Executor节点是实际执行计算的节点。Receiver是数据源,负责接收外部数据。
对比分析
Flink、Storm、Spark Streaming三种流框架都有其优缺点,以下是对比分析:
* Flink:Flink是一个原生的流处理系统,提供高级的API,支持批处理和流处理。Flink的架构基于Master-Slave风格,具有良好的可扩展性和高性能。
* Storm:Storm是一个分布式实时计算系统,主要用于处理大规模的数据流。Storm的架构主要包括Topology、Spout、Bolt、acker等组件。Storm具有良好的可扩展性和高性能,但是Storm的学习成本较高。
* Spark Streaming:Spark Streaming是一个基于Spark Core的流处理系统,主要用于处理大规模的数据流。Spark Streaming的架构主要包括Driver、Executor、Receiver三个组件。Spark Streaming具有良好的可扩展性和高性能,但是Spark Streaming的架构相对复杂。
Flink、Storm、Spark Streaming三种流框架都有其优缺点,选择哪种流框架取决于实际的业务需求和技术栈。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。
English
