在我重新启动Kafka群集后,我的Kafka流应用程序没有收到来自输入主题的消息,我得到了exception
"can׳t create internal topic"
。经过一些研究,我确实使用Kafka工具(输入主题和应用程序)重置了工具Kafka-streams-application-reset.sh
。
不幸的是,它没有解决问题,我也再次获得了exception
答案 0 :(得分:3)
从错误消息中,您可以推断出主题已存在,因此无法创建。失败的原因是,现有主题没有预期的分区数(它有1而不是150) - 如果分区数量匹配,Kafka Streams将只使用现有主题。
如果您在代理处启用了主题自动创建(并且主题是使用错误的分区数创建的),或者输入主题的分区数已更改,则可能会发生这种情况。 Kafka Streams不会自动更改重新分区主题的分区数,因为这可能会导致数据损坏,从而导致错误的结果。
解决此问题的一种方法是手动删除此主题:请注意,这可能会导致数据丢失,如果您知道它是您想要的,则应该只执行此操作。
另一种(更好的方法)是,使用bin/kafka-streams-application-reste.sh
与KafkaStreams#cleanup()
完全重置应用程序。
因为您需要清理应用程序并且用户应该意识到这一含义,所以Kafka Streams无法让用户意识到这个问题,而不是" auto magically"从用户的角度采取一些可能不受欢迎的行动。
查看文档了解更多详情。还有一篇博文文章详细解释了应用程序重置: