运行 两个实例时,即使密钥存在于 kafka 流中的本地 Ktable 中,密钥的元数据也是错误的

Metadata for key is wrong even if the key is present in local Ktable in kafka streams when running two instances

我在将记录聚合到 Ktable 时遇到了一个奇怪的问题。我的系统中有以下场景。

  1. 不同节点上有两个kafka streams应用程序运行(具有相同的应用程序id但具有不同的应用程序服务器配置)。

  2. 这两个流都收听相同的主题模式,其中记录按键(字符串值)分区。

  3. 只要两个应用程序都是 运行 ,一些分区被 app-1 使用,一些被 app-2 使用,这是正常的。然后他们建立自己的本地状态商店。

  4. 我有一个 grapql 查询系统,如果它在本地 table 或另一个远程实例中,它可以让你查询键并获取它的值。

  5. 问题是,当我查询一个键的元数据时,它给了我错误的主机信息(即使键是由实例一处理的,它显示它具有实例二的主机信息)但是如果我在实例 1 的本地状态存储中查询密钥的值,我可以看到该密钥确实存在。 (只是密钥的元数据是错误的)

  6. 并且在这两个实例中,此行为对于密钥都是随机的(一些密钥指向正确的元数据,而另一些则没有)

  7. 我已经登录 state listener,它告诉我是否正在发生再平衡。但是当记录正在流式传输或当我正在查询时,我确保没有再平衡发生。

  8. 我遇到的问题与此类似。

  9. 此外,当我查询本地状态存储中的所有密钥时,我可以看到密钥存在。

有人知道是什么导致了这个问题吗?请

你好所以这里的问题是我通过我自己的自定义记录分区逻辑发送 Kafka 主题并且没有使用 kafka 提供的默认实现。 在流方面,它正在使用其默认分区逻辑计算密钥的元数据,这导致了错误的元数据。所以,我所要做的就是使用我在 kafka 端使用的相同逻辑实现我自己的自定义分区程序,并使用该逻辑来计算元数据。