在将记录聚合到Ktable中时,我遇到了一个奇怪的问题。我的系统中有以下场景。
-
有两个kafka流应用程序在不同的节点上运行(具有相同的应用程序id,但具有不同的应用程序服务器配置(。
-
这两个流都侦听相同的主题模式,其中记录由键(字符串值(分区。
-
每当两个应用程序都在运行时,一些分区由app-1消耗,一些分区则由app-2消耗,这是正常的。然后,他们建立了自己的本地州立商店。
-
我有一个grapql查询系统,它允许您查询键,并在本地表或另一个远程实例中获取其值。
-
问题是,当我查询一个键的元数据时,它给了我错误的hostInfo(即使该键由实例一处理,它也显示它具有实例二的hostInfo(。但是,当我在实例一的本地状态存储中查询该键的值时,我可以看到该键确实存在。(只是密钥的元数据是错误的(
-
这种行为对于两种情况下的密钥来说都是随机的(有些密钥指向正确的元数据,而有些则不指向(
-
我已经登录了
state listener
,它告诉我是否正在进行再平衡。但是,当记录流式传输或我查询时,我必须确保不会发生再平衡。 -
我面临的问题与此类似。Kafka Streams中的metadataForKey方法为连接到同一组的多个应用程序实例提供了错误的信息
-
此外,当我查询本地状态存储中的所有键时,我可以看到该键存在。
有人知道是什么原因导致了这个问题吗?请
你好,这里的问题是我通过自己的自定义逻辑发送Kafka主题,用于记录分区,而没有使用Kafka提供的默认实现。在流方面,它使用默认的分区逻辑计算密钥的元数据,这导致了错误的元数据。所以,我所要做的就是用我在kafka端使用的相同逻辑来实现我自己的自定义分区器,并使用该逻辑来计算元数据。