Flink流处理
AI生成声明: 本文档由AI辅助生成,旨在提供Flink流处理的完整指南。
Flink是分布式流处理和批处理框架,理解其流处理原理对于掌握实时计算至关重要。
核心问题
Flink特点
低延迟
- 毫秒级延迟
- 真正的流处理
- 事件时间处理
高吞吐
- 高性能计算
- 背压机制
- 资源高效利用
精确一次
- 状态一致性
- 端到端精确一次
- Checkpoint机制
核心概念
DataStream
- 流数据抽象
- 无界数据流
- 事件驱动
Operator
- 数据转换操作
- 并行执行
- 状态管理
Window
- 时间窗口
- 计数窗口
- 滑动窗口
时间语义
三种时间
Event Time(事件时间)
- 事件产生的时间
- 最准确
- 需要Watermark
Ingestion Time(摄入时间)
- 进入Flink的时间
- 折中方案
- 自动生成
Processing Time(处理时间)
- 处理事件的时间
- 最简单
- 性能最好
Watermark
- 作用:处理乱序数据
- 原理:标记事件时间进度
- 生成:周期性或事件驱动
状态管理
状态类型
Keyed State
- 键控状态
- 每个key独立
- 访问需要key
Operator State
- 算子状态
- 算子级别
- 所有数据共享
状态后端
MemoryStateBackend
- 内存存储
- 适合测试
- 容量有限
FsStateBackend
- 文件系统存储
- 适合生产
- 持久化
RocksDBStateBackend
- RocksDB存储
- 大状态场景
- 异步快照
Checkpoint机制
原理
周期性触发
- 定期创建检查点
- 保存状态快照
- 保证一致性
分布式快照
- 所有算子状态
- 一致性保证
- 故障恢复
精确一次语义
- 端到端一致性
- 需要外部系统支持
- 两阶段提交
常见面试题
Flink和Spark Streaming的区别?
- Flink:真正的流处理
- Spark Streaming:微批处理
- Flink延迟更低
Watermark的作用?
- 处理乱序数据
- 标记事件时间进度
- 触发窗口计算
如何保证精确一次?
- Checkpoint机制
- 两阶段提交
- 状态一致性