首页 > 解决方案 > 重新部署后,kafka 流抱怨内部主题的分区无效。为什么会这样?

问题描述

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

我唯一改变的是流线程的数量(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.

从以前的答案看来,解决这个问题的方法是重置整个应用程序的流(从一开始就导致重新处理)。这并不理想。我可能会尝试删除与此应用程序相关的所有主题并重新开始。

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

标签: apache-kafkaapache-kafka-streams

解决方案


我也没有在任何内部主题上设置分区大小

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

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

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


推荐阅读