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

时间:2018-08-08 15:45:37

标签: apache-kafka apache-kafka-streams

假设我有两个应用程序,它们具有相同的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>

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

  • 这是否意味着应用程序不同,所以applicationId也应更改?如果没有,如果同一应用程序的许多实例正在运行,我应该如何处理拓扑更改?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

相关问题