Kafka流中的状态存储和changelog主题的用途?

时间:2020-05-01 21:52:48

标签: apache-kafka apache-kafka-streams

我有一个kafka流应用程序,其中正在使用stateStore(由RocksDB支持)。

所有流线程正在做的是从kafka主题获取数据并将数据放入状态存储。 (还有其他线程从状态存储读取数据并进行业务逻辑处理。)

由于stateStore,我观察到它创建了一个新的kafka主题“ changelog”。

但是我没有明白“ changelog” kafka主题的作用是什么?

  • 为什么需要(变更日志)?
  • 状态存储与“ changelog” kafka主题之间的关系是什么?
  • 谁将数据放入该主题? (“更改日志”)

1 个答案:

答案 0 :(得分:3)

这个问题的简短答案是实现容错。

详细信息

changelog使Kafka Streams应用程序中的状态存储具有容错能力。当您的应用程序将更多数据吸收到状态存储中时,它会被推送到changelog主题,因此,如果正在运行该应用程序的节点发生故障,那么changelog主题将用于加载状态以最新状态存储。

每个应用程序线程或实例都有其自己的changelog主题分区,以便每个实例在失败后重新启动应用程序后都可以重新创建其状态。

当状态存储进行更新时,Kafka Streams会将数据自动推送到主题。

我建议您仔细阅读《 Kafka权威指南》的第11章,其中包含有关Kafka Streams体系结构和流处理模式的很好的解释。

希望这会有所帮助。