重新部署后,kafka 流抱怨内部主题具有无效分区。为什么会这样?

After a redeploy, kafka streams complains that an Internal topic has invalid partitions. Why did this happen?

我有一个简单的拓扑结构,可以对某个主题进行一些窗口化处理。我没有对拓扑进行任何更改,也没有在任何内部主题上设置分区大小。

我唯一改变的是流线程数 (NUM_STREAM_THREADS_CONFIG) 从 10 到 50。将其设置回 10 并没有解决这个问题。

 2021-10-07 22:48:24.452 ERROR : o.a.k.s.p.i.InternalTopicManager: stream-thread [main] 
Existing internal topic my-app-KTABLE-SUPPRESS-STATE-STORE-0000000015-changelog 
has invalid partitions: expected: 10 ; actual: 1. 

Use 'kafka.tools.StreamsResetter' tool to clean up invalid topics before processing.

From previous answers it appears 解决这个问题的方法是重置整个应用程序的流(从头开始重新处理)。这并不理想。我可能会尝试删除与此应用相关的所有主题并重新开始。

我的问题 - 我想了解为什么会这样。这似乎是一个非常严重的错误,没有任何明显的原因。

nor do I set the partition size on any internal topic

这就是您收到错误的原因。增加线程需要更高的分区数,因为您的 consumer threads * instances 不能超过总分区数。默认只有一个分区。

您也不能减少主题分区数,除非删除主题并重新创建它,这就是重置命令所做的;它不会删除其中仍有数据的“用户主题”,只会重置组 ID 并删除内部主题

您无需重置应用程序,因为您可以使用 kafka-topicskafka-reassign-partitions CLI 工具手动添加分区