【问题标题】:How does KStreams handle state store data when adding additional partitions?添加额外分区时,KStreams 如何处理状态存储数据?
【发布时间】:2020-12-18 07:37:43
【问题描述】:

我有一个数据分区,其中包含一个应用实例和一个本地状态存储。它已经运行了一段时间并且有很多有状态的数据。我需要将其更新为具有 5 个应用程序实例的 5 个分区。当添加分区并且应用程序重新联机时,一个本地状态存储会发生什么情况?我是否必须删除本地状态存储并重新开始?状态存储是否会根据分区策略自动在其他应用实例状态存储之间进行洗牌?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    我是否必须删除本地状态存储并重新开始?

    这是推荐的处理方式。 (cf https://docs.confluent.io/platform/current/streams/developer-guide/app-reset-tool.html) 事实上,如果你改变输入主题分区的数量并重启你的应用程序,Kafka Stream 会失败并报错,因为状态存储只有一个分片,而给定 5 个分片您现在将有 5 个输入主题分区。

    状态存储是否会根据分区策略自动在其他应用实例状态存储中进行洗牌?

    没有。另请注意,这也适用于您输入主题中的数据。因此,如果您计划按 key 对输入数据进行分区(即,在上游写入输入主题时),旧记录将保留在现有分区中,因此无法正确分区。

    一般来说,建议您预先对输入主题进行过度分区,以避免您以后需要更改分区数。因此,您也可以考虑增加 10 个,甚至 20 个分区,而不仅仅是 5 个。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 2020-12-10
      • 2014-01-11
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2013-04-19
      • 2018-01-31
      • 2020-07-03
      相关资源
      最近更新 更多