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超时,解决措施包括调大托管内存大小。
➡️

继续阅读