Flink 和 Spark 的主要区别
Flink 和 Spark 的主要区别
设计理念不同
Flink 是面向流的处理框架,基于事件驱动,属于流式计算,其通过流来模拟批进行计算实现批处理。Spark 是基于 Micro-batch,采用微批模拟流的计算,其以时间为单位,将数据流切分为一个个批次,并通过分布式数据集 RDD 进行批量处理。
架构不同
Flink 在运行时,主要包含有 Jobmanager、Taskmanager 和 Slot。而 Spark 在运行时,主要角色包括 Master、Worker、Driver 和 Executor。
时间机制不同
Flink 支持事件时间、注入时间、处理时间这三种时间机制,并且支持 watermark 机制以处理迟到的数据,所以在处理乱序大实时数据时更具优势。Spark 只支持处理时间,如果使用 processing time 模拟 event time 则容易产生误差,尤其在产生数据堆积的时候,误差会更明显。
吞吐量与延迟不同
Flink 由于其轻量级容错机制,且是基于事件,逐条处理消息,因此能达到毫秒级延迟,同时实现低延迟与高吞吐量兼顾。Spark 由于基于微批,且具备很好的流水线优化,所以其吞入量更大,但是只能达到秒级延迟。
设计理念不同
Flink 是面向流的处理框架,基于事件驱动,属于流式计算,其通过流来模拟批进行计算实现批处理。Spark 是基于 Micro-batch,采用微批模拟流的计算,其以时间为单位,将数据流切分为一个个批次,并通过分布式数据集 RDD 进行批量处理。
架构不同
Flink 在运行时,主要包含有 Jobmanager、Taskmanager 和 Slot。而 Spark 在运行时,主要角色包括 Master、Worker、Driver 和 Executor。
时间机制不同
Flink 支持事件时间、注入时间、处理时间这三种时间机制,并且支持 watermark 机制以处理迟到的数据,所以在处理乱序大实时数据时更具优势。Spark 只支持处理时间,如果使用 processing time 模拟 event time 则容易产生误差,尤其在产生数据堆积的时候,误差会更明显。
吞吐量与延迟不同
Flink 由于其轻量级容错机制,且是基于事件,逐条处理消息,因此能达到毫秒级延迟,同时实现低延迟与高吞吐量兼顾。Spark 由于基于微批,且具备很好的流水线优化,所以其吞入量更大,但是只能达到秒级延迟。
Flink 主要应用场景
Flink 主要应用场景
Flink 主要应用场景如下:
- 数据分析场景:由于相对传统基于批的计算平台,流式计算平台具备实时性这一优点,所以常用于一些对实时性要求较高的应用场景里;
- 事件驱动场景:由于 Flink 可基于 Flink Sql 或者其他 API,来完成一些复杂的计算或者过滤操作;
- ETL 场景:因为 Flink 相较于传统 ETL 工具更为灵活,所以 Flink 可适用于 ETL 场景里。
Flink 架构
Flink 架构
Flink 运行架构包括作业管理器(JobManger)和任务管理器(TaskManager)两大组件。其中,作业管理器是一个 Flink 集群中任务管理和调度的核心,主要负责管理调度,是控制应用执行的主进程,因此通常情况下,每个应用都应该被唯一的作业管理器所控制执行。而任务管理器是 Flink 中的工作进程,负责执行任务处理数据,因此能够有一个或者多个任务管理器存在。