【问题标题】:How to update internal changelog topic partitions when a source topic partition count is updated?更新源主题分区计数时如何更新内部更改日志主题分区?
【发布时间】:2018-09-28 01:58:50
【问题描述】:

我有一个使用 Kstream-Kstream 连接和 Ktream-Ktable 连接的应用程序。 我已将输入源主题分区计数从 4 更新为 16,并且应用程序停止并出现以下错误。

Could not create internal topics: Existing internal topic application-test-processor-KSTREAM-JOINTHIS-0000000009-store-changelog has invalid partitions. Expected: 16 Actual: 4. Use 'kafka.tools.StreamsResetter' tool to clean up invalid topics before processing. Retry #3

如何在更新源主题分区计数时更新内部更改日志主题分区计数?

注意:我们使用的是kafka版本:0.10.2.1

我从这个链接查看了应用程序重置工具:https://docs.confluent.io/current/streams/developer-guide/app-reset-tool.html 但它没有说明如何更新 changelog 分区。

提前致谢。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams


    【解决方案1】:

    其实还是推荐使用重置工具的。

    应用程序的状态根据输入分区的数量进行分片。这最初是 4。因此,将其更改为 16 会破坏应用程序。如果您手动将分区添加到更改日志主题(可能会解决异常,但不能真正解决问题),状态将不会重新分配,因此会损坏。

    如果您使用重置工具,则会删除所有状态并让您的应用程序从头开始重新处理所有输入数据。这允许 Kafka Streams 正确地重新创建状态(现在有 16 个分片)。

    【讨论】:

    • 谢谢马特。我不想重新处理这些消息。是否可以使用应用程序重置工具仅删除内部主题,然后重新启动应用程序以便重新创建内部主题?
    • 这是可能的——你还需要通过KafkaStreams#cleanup()或手动删除本地状态——否则,你不会从一个空状态开始。
    • 嗨@MatthiasJ.Sax,如果您的变更日志的保留策略比原始主题更高,您应该如何重建您的状态?您将不得不重播有关原始主题的事件,不是吗?
    • 更新日志主题没有保留时间,但使用日志压缩。 -- 是的,您只能重新处理输入主题中仍然可用的内容。这意味着,如果您的状态包含由于缺少输入数据而无法重新计算的数据,您将丢失部分状态。
    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2018-08-05
    相关资源
    最近更新 更多