【问题标题】:After a redeploy, kafka streams complains that an Internal topic has invalid partitions. Why did this happen?重新部署后,kafka 流抱怨内部主题的分区无效。为什么会这样?
【发布时间】:2021-10-07 23:03:48
【问题描述】:

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

我所做的唯一更改是将流线程 (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 解决此问题的方法是重置整个应用程序的流(从一开始就导致重新处理)。这并不理想。我可以尝试删除与此应用相关的所有主题并重新开始。

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

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    我也不设置任何内部主题的分区大小

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

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

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

    【讨论】:

    • 所以将线程数增加到 50 会导致这种情况?
    • 为了使用更多不空闲的线程,需要添加更多分区,是的
    • 好的,谢谢。可以增加外部主题分区的大小,而无需删除主题。我猜内部主题有一些限制可以防止这种情况发生?
    • 根据输入主题 IIRC 分配内部主题分区计数。如果您在事后尝试更改它,您将失去订单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多