在我重新启动kafka集群之后,我的kafka流应用程序没有收到来自输入主题的消息,我得到了一个 exception
的 "can׳t create internal topic"
. 经过一些研究,我用kafka工具(输入主题和应用程序)重置了工具 Kafka-streams-application-reset.sh
.
不幸的是,它没有解决问题,我也得到了答案 exception
再一次
在我重新启动kafka集群之后,我的kafka流应用程序没有收到来自输入主题的消息,我得到了一个 exception
的 "can׳t create internal topic"
. 经过一些研究,我用kafka工具(输入主题和应用程序)重置了工具 Kafka-streams-application-reset.sh
.
不幸的是,它没有解决问题,我也得到了答案 exception
再一次
1条答案
按热度按时间dfddblmv1#
从错误消息中,可以推断主题已经存在,因此无法创建。失败的原因是,现有主题没有预期的分区数(它有1个而不是150个分区)--如果分区数匹配,kafka streams将只使用现有主题。
如果在代理中启用了主题自动创建(并且主题是使用错误的分区数创建的),或者输入主题的分区数发生了更改,则可能会发生这种情况。kafka streams不会自动更改重分区主题的分区数,因为这可能会导致数据损坏,从而导致不正确的结果。
解决此问题的一种方法是手动删除此主题:请注意,这可能会导致数据丢失,如果您知道这是您想要的,则应该这样做。
另一个更好的方法是,使用
bin/kafka-streams-application-reste.sh
结合KafkaStreams#cleanup()
.因为您需要清理应用程序,而且用户应该意识到其中的含义,所以kafka streams无法让用户意识到问题,而不是“自动神奇地”采取一些从用户Angular 来看可能不需要的操作。
查看文档了解更多详细信息。还有一篇博客文章详细解释了应用程序重置:
https://kafka.apache.org/11/documentation/streams/developer-guide/app-reset-tool.html
https://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-streams-application/