Flink State 状态原理解析
💡
原文中文,约3500字,阅读约需9分钟。
📝
内容提要
Flink中的状态用于记录中间计算结果,分为Operator State和Keyed State。状态存储通过StateBackend实现,支持内存、HDFS和RocksDB。通过checkpoint机制定期保存状态,以实现应用重启后的数据恢复,状态持久化使用Chandy-Lamport算法确保数据精确传递。
🎯
关键要点
- Flink中的状态用于记录中间计算结果,分为Operator State和Keyed State。
- 状态存储通过StateBackend实现,支持内存、HDFS和RocksDB。
- 通过checkpoint机制定期保存状态,以实现应用重启后的数据恢复。
- 状态持久化使用Chandy-Lamport算法确保数据精确传递。
- StateBackend分为HeapStateBackend、FsStateBackend和RocksDBStateBackend。
- Operator State常见于Source和Sink,Keyed State与每个key对应的状态相关。
- Keyed State支持有效期(TTL),每个状态类型都支持单元素的TTL。
- Kafka Source使用OperatorState存储offset,Map算子使用ValueState/MapState/ListState等。
- KeyedStream中的数据通过KeyGroup组织,并分散到各个subtask中。
- Checkpoint定期将State持久化到外部存储系统,用户可通过实现CheckpointedFunction接口使用operator state。
- State状态过大或数据倾斜可能导致Checkpoint超时,解决措施包括调大托管内存大小。
🏷️
标签
➡️