Kafka - 冗余应用程序的拓扑更改

Kafka - Topology change on redundant apps

假设我有两个具有相同 applicationId "foo-processor" 和以下设置的应用程序:

    streamsBuilder.table(fooTopic)
                  .groupBy(...)
                  .reduce(...)

假设我现在有一些我不想处理的情况并添加这样的过滤器:

        streamsBuilder.table(fooTopic)
                      .filter(...)
                      .groupBy(...)
                      .reduce(...)

在部署期间,并非应用程序的所有实例都会同时关闭和重新启动。因此,foo-processor 的实例 #1 重新启动,实例 #2 仍在使用之前的拓扑。发生的情况是实例 #1 将出现此错误:

java.lang.IllegalArgumentException: Assigned partition foo-processor-KTABLE-REDUCE-STATE-STORE-0000000006-repartition-2 for non-subscribed topic regex pattern; subscription pattern is foo-processor-KTABLE-REDUCE-STATE-STORE-0000000007-repartition|<topic>

我认为这是预期的行为,因为由于拓扑不同,重新分区主题可能不包含相同的事件。话虽如此,我想知道我应该如何处理拓扑结构的变化。

谢谢!

如果要更改拓扑,需要使用新的 application.id -- 运行 不支持与同一个 application.id 并行。