Flink编程模型是一个分层的抽象体系,支持批处理和流处理的统一计算框架,其核心设计围绕数据流处理展开。以下是关键要点:
数据处理分层
Flink提供四层API抽象:
- SQL/Table API:最高层抽象,依据声明式语法处理结构化资料,支持流批统一查询
- DataStream/DataSet API:面向开发者的核心接口,DataStream用于无界流处理,DataSet用于有界批处理
- Stateful Stream Processing:底层API,可直接操控状态、时间等原语,适用于复杂事件处理
核心编程结构
所有Flink工具包括以下基本流程:
- 创建执行环境(批处理/流处理)
- 定义数据源source(如文件、Kafka等)
- 应用转换操作transformation(map、filter、window等)
- 指定结果输出位置sink
- 触发程序执行(延迟执行机制)
流批统一特性
- 有界/无界数据集统一处理:通过时间范围将无界数据切分为有界数据块,实现批处理语义
- 统一状态管理:承受键控状态(Keyed State)和算子状态(Operator State),保证精确一次处理语义
时间与窗口机制
- 时间类型:事件时间(Event Time)、处理时间(Processing Time)、摄取时间(Ingestion Time)
- 窗口类型:滚动/滑动时间窗口、计数窗口、会话窗口,承受事件时间乱
