资料内容:
什么是 Apache Flink?
Apache Flink 是一个开源的流处理框架和分布式处理引擎,专门用于处理无边界和有边界的数据流。它
能够在各种集群环境中运行,并且以高吞吐量和低延迟的方式进行数据处理。Flink 的设计目标是提供
一个统一的流处理和批处理平台,使得用户能够用相同的 API 编写和执行流式和批量数据处理任务。
核心概念
1. 流处理与批处理:
流处理:处理无边界数据流,即数据源不断产生数据,处理过程持续进行。Flink 支持事件时
间(event time)处理和有状态流处理,确保数据处理的准确性和一致性。
批处理:处理有边界数据流,即数据源是固定的,处理过程在所有数据到达后开始。Flink 通
过优化的算法和数据结构来高效处理批量数据。
2. 有状态流处理:
Flink 支持有状态流处理,允许在处理每个事件时访问和更新状态。状态可以是简单的计数
器,也可以是复杂的机器学习模型。Flink 提供了精确一次(exactly-once)语义,确保状态
的一致性和容错性。
3. 事件时间与水位线(Watermark):
Flink 使用事件时间来处理乱序事件,通过水位线机制确定何时处理窗口内的数据,确保数据
按事件发生的实际时间进行处理。
4. 状态管理与容错机制:
Flink 通过状态快照(checkpointing)和流重放机制实现容错,确保作业在故障发生后能够
恢复到一致状态。状态可以存储在内存、文件系统或 RocksDB 中。
主要组件
1. JobManager:负责作业的调度、资源分配和故障恢复。
2. TaskManager:执行实际的任务,管理任务的状态和资源。
3. ResourceManager:管理集群中的资源,协调 JobManager 和 TaskManager。
部署模式
Flink 支持多种部署模式,包括:
1. Session Mode:一个长期运行的集群,可接受多个作业提交,资源共享。
2. Per-Job Mode:为每个作业启动独立的集群,资源隔离好,但开销较大。
3. Application Mode:为每个应用程序启动一个集群, main() 方法在集群上运行,资源利用率
高。