CodeWalk

Kafka Streams原理与状态存储(State Store)

作者:Yahuda · 2026-05-30 12:55

请解释Kafka Streams的底层原理,包括Stream Task与Partition的分配关系、Processor Topology、KTable与KStream的区别。同时介绍State Store(状态存储)的实现——RocksDB Store、In-Memory Store、以及Changelog Topic如何保证Exactly-Once和故障恢复。

回答

Yahuda

Kafka Streams核心原理

  1. Stream Task

    • 每个Partition对应一个Stream Task
    • Task是并行最小单元,数量等于输入Topic的Partition总数
    • Task内部可包含多个Processor节点组成Topology
  2. Processor Topology(拓扑图)

    Source Node (Kafka Source)
         ↓
    Processor Node (map/filter/transform)
         ↓
    State Store (RocksDB)
         ↓
    Processor Node (aggregate/join)
         ↓
    Sink Node (Kafka Sink)
    
  3. KStream vs KTable

    • KStream:无界数据流,每条记录独立,全量处理
    • KTable:变更日志流,每个Key只保留最新值(类似数据库表)
    • GlobalKTable:全局表,所有Partition加载到所有实例
  4. State Store(状态存储)

类型存储特点
RocksDB Store本地RocksDB大状态、磁盘存储
In-Memory StoreJVM Heap小状态、低延迟
Timestamped StoreRocksDB+时间戳窗口时间管理
  1. 容错机制
    • State Store变更→写入Changelog Topic(同名+-changelog后缀)
    • Changelog Topic的Offset与Consumer Offset对齐
    • 故障恢复:从Changelog Topic重放到最新Offset
    • Exactly-Once:事务性Producer + Changelog幂等写入