当您使用应用程序重置工具时,Kafka状态存储会发生什么?

时间:2020-02-25 05:24:23

标签: apache-kafka apache-kafka-streams

当您运行Kafka Streams应用程序重置工具将应用程序重置为特定时间戳(例如T-n)时,状态存储会发生什么?

文档内容如下: “内部主题:删除内部主题(这将自动删除所有已提交的偏移量)” (内部主题由Kafka Streams应用程序在内部执行,例如执行状态存储的changelog主题)

这是否意味着我丢失了状态存储/ RocksDB的状态,就像在T-n时一样?

例如,假设我当时在状态存储上正在处理“会话窗口”。看起来在应用程序重置期间,我将丢失该窗口中的所有现有数据。

重置应用程序时,是否可以保留会话窗口的状态? 换句话说,是否有一种方法可以在应用程序重置期间保留我的状态存储或RocksDB的状态(在T-n时)?

1 个答案:

答案 0 :(得分:1)

rest工具本身不会接触本地状态存储,但是,它将删除相应的变更日志主题。所以,是的,您可以有效地放松状态。

因此,要使您的本地状态与变更日志保持同步,您实际上也应该删除本地状态,并以空状态开始:https://docs.confluent.io/current/streams/developer-guide/app-reset-tool.html#step-2-reset-the-local-environments-of-your-application-instances

当前还无法将状态重置为atm的特定点。

唯一的“解决方法”可能是不使用rest工具,而是使用bin/kafka-consumer-groups.sh仅修改输入主题的偏移量。这样,您可以保留变更日志主题和本地状态存储。但是,当您重新启动应用程序时,该状态当然会处于其最后状态。不确定这是否可以接受。