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>
我认为这是预期的行为,因为由于拓扑不同,重新分区主题可能不包含相同的事件。话虽如此,我想知道我应该如何处理拓扑结构的变化。
- 这是否意味着应用程序不同,所以 applicationId 也应该更改?如果不是,如果同一应用程序的许多实例是 运行?
,我应该如何处理拓扑更改
谢谢!
如果要更改拓扑,需要使用新的 application.id
-- 运行 不支持与同一个 application.id
并行。
假设我有两个具有相同 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 也应该更改?如果不是,如果同一应用程序的许多实例是 运行? ,我应该如何处理拓扑更改
谢谢!
如果要更改拓扑,需要使用新的 application.id
-- 运行 不支持与同一个 application.id
并行。