Flink 的架构
- JobManager:负责调度任务、协调检查点和故障恢复。
- TaskManager:负责实际执行任务,每个 TaskManager 包含多个 Slot(资源单元)。
- Slot:TaskManager 中的资源单元,一个 Slot 可以运行一个 Task
1. 流处理与批处理
流处理(Stream Processing)是Flink的核心,允许处理无限数据流,支持事件时间,窗口操作等。
批处理(Batch Processing)可以看作是流处理的一个特例,其中数据集是有界的。Flink可以用同一个API处理流和批任务。
2. 窗口操作(Windowing)
时间窗口:Flink支持多种窗口操作,如滑动窗口(Sliding Windows)、滚动窗口(Tumbling Windows)、会话窗口(Session Windows)。
窗口函数:窗口操作可以用reduce、aggregate、process等函数来处理窗口内的数据。
3. 状态管理和Checkpoints
状态管理:Flink允许你维护和管理操作状态,这对实现有状态计算非常重要。
ValueState、ListState、MapState等状态接口用于保存状态。
Checkpoints:用于容错,通过定期保存状态以便在故障后恢复。配置检查点在flink-conf.yaml中或在代码中动态设置。
4. 事件时间与处理时间
事件时间(Event Time)处理基于事件发生的时间,Flink支持水印(Watermarks)机制来处理乱序事件。
处理时间(Processing Time)基于操作符处理事件的时间。
5. Exactly-once语义
Flink提供精确一次处理的语义,这意味着每个事件会被处理且只处理一次,即使在故障后恢复。
6. 侧输出(Side Outputs)
允许将数据流分流到多个输出中,这对于处理异常数据或记录错误事件特别有用。
7. 广播状态(Broadcast State)
用于将状态广播到所有并行实例,这种方式在一些需要全局状态的场景中非常有用。
8. 连接器(Connectors)
Flink提供了丰富的连接器来与外部系统集成,如Kafka、Kinesis、HDFS等。你可以用这些连接器来读写数据。
9. 自定义算子(Operators)
虽然Flink提供了丰富的内置算子,但你也可以定义自己的算子来实现复杂的业务逻辑。
10. Table API & SQL
除了DataStream API,Flink还提供Table API和SQL查询接口,可以用更简洁的方式处理数据。
11. CEP(复杂事件处理)
Flink的CEP库允许你定义模式来检测事件流中的复杂事件序列。
12. Savepoints
与检查点类似,但手动触发,用于有计划的停机维护或扩展作业时。
上述内容如有雷同,纯属巧合