添加额外分区时,KStreams 如何处理状态存储数据?
How does KStreams handle state store data when adding additional partitions?
我有一个数据分区,其中包含一个应用程序实例和一个本地状态存储。它已经 运行 一段时间了,并且有很多状态数据。我需要将其更新为包含 5 个应用程序实例的 5 个分区。当分区被添加并且应用程序重新上线时,一个本地状态存储会发生什么情况?我是否必须删除本地状态存储并重新开始? state store 是否会根据分区策略在其他应用程序实例 state store 之间自动洗牌?
Do I have to delete the local state store and start over?
这是推荐的处理方式。 (cf https://docs.confluent.io/platform/current/streams/developer-guide/app-reset-tool.html) 事实上,如果您更改输入主题分区的数量并重新启动您的应用程序,Kafka Stream 将失败并报错,因为状态存储只有一个分片,而 5 个分片将是预计您现在将有 5 个输入主题分区。
Will the state store be shuffled across the additional app instance state stores automatically according to the partitioning strategy?
没有。另请注意,这也适用于您输入主题中的数据。因此,如果您计划按键对输入数据进行分区(即,在上游写入输入主题时),旧记录将保留在现有分区中,因此无法正确分区。
一般情况下,建议预先对输入主题进行过度分区,以避免稍后需要更改分区数。因此,您可能还会考虑最多 10 个甚至 20 个分区,而不是仅仅 5 个。
我有一个数据分区,其中包含一个应用程序实例和一个本地状态存储。它已经 运行 一段时间了,并且有很多状态数据。我需要将其更新为包含 5 个应用程序实例的 5 个分区。当分区被添加并且应用程序重新上线时,一个本地状态存储会发生什么情况?我是否必须删除本地状态存储并重新开始? state store 是否会根据分区策略在其他应用程序实例 state store 之间自动洗牌?
Do I have to delete the local state store and start over?
这是推荐的处理方式。 (cf https://docs.confluent.io/platform/current/streams/developer-guide/app-reset-tool.html) 事实上,如果您更改输入主题分区的数量并重新启动您的应用程序,Kafka Stream 将失败并报错,因为状态存储只有一个分片,而 5 个分片将是预计您现在将有 5 个输入主题分区。
Will the state store be shuffled across the additional app instance state stores automatically according to the partitioning strategy?
没有。另请注意,这也适用于您输入主题中的数据。因此,如果您计划按键对输入数据进行分区(即,在上游写入输入主题时),旧记录将保留在现有分区中,因此无法正确分区。
一般情况下,建议预先对输入主题进行过度分区,以避免稍后需要更改分区数。因此,您可能还会考虑最多 10 个甚至 20 个分区,而不是仅仅 5 个。