首页 > 解决方案 > 通过同一应用的多个 kafka 流实例读取规则集主题/分区

问题描述

我有一个 Kafka Stream 应用程序,它在主要事件主题中进行一些处理,并且我还有一个用于将规则集应用于主要事件主题的辅助主题。

到目前为止,该应用程序作为单个实例运行,并且当应用规则时,为其他处理操作员(主要主题消费者)设置了一个静态变量,以继续按预期操作评估规则。这是必要的,因为规则流将被写入单个分区,具体取决于规则键字面量,例如 <"MODE", value>,因此通过这种方式(通过静态变量)所有其他涉及的任务都会知道更改。

显然,当将应用程序部署到多个节点时,这种方法不起作用,因为只有一个消费者组(例如来自两个实例应用程序)会导致只有一个实例应用程序将其静态变量设置为正确的值,而另一个实例应用程序从不使用该规则值(还将每个实例应用程序设置为不同的组 id 会导致使用主题两次的不良副作用)

另一方面,将规则主题用作全局表​​的解决方案将导致主处理运算符在每次该运算符使用事件时查询全局表以检索最新规则。

当在该主题中引入一个值来执行一些回调代码并设置一个静态变量时,是否可以使用某种全局表侦听器?

是否有更好/替代方法来解决此问题?

标签: apache-kafka-streams

解决方案


代替 a GlobalKTable,您可以回退到addGlobalStore()允许您执行自定义代码的地方。


推荐阅读