如何在服务的所有实例中使用 Kafka 中的消息

How can i consume a message in Kafka in all the instances of a service

提问人:Gopal Kumar 提问时间:6/7/2022 最后编辑:OneCricketeerGopal Kumar 更新时间:6/8/2022 访问量:208

问:

我有一个用例,我需要在所有服务实例中使用消息。假设我的服务在 5 个实例上运行,那么通过 Kafka 传来的消息需要在每个实例上处理。由于这些数据被用于许多其他 API,因此我们将其存储在本地内存中以提供 API。

由于这些数据使用频率很高,因此我不想将这些数据存储在 Redis 或其他一些全局缓存中,这会增加网络调用的延迟和成本。

我想创建一个管道,其中第三方服务对数据的任何更改都将更新到所有实例,并且所有实例都在 API 中提供新数据。

apache-kafka 分布式缓存

评论

0赞 OneCricketeer 6/7/2022
您可以使用 ksql 推送查询 docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/...

答:

0赞 Naor Levi 6/7/2022 #1

这在 kafka 中是不可能的。 在这种情况下,kafka 似乎不是正确的选择。

我可以提出 3 种解决方案:

  1. 您可以如上所述使用 Redis,权衡 延迟小。
  2. 如果服务在同一台计算机上运行,则可以使用分片内存来读取所有进程(然后,您与获取事件的进程无关)
  3. 你可以破解一些东西,但这是一个反模式,我不建议你这样做,因为你可能会影响消费者组的能力。这完全是对卡夫卡的滥用。

您可以做的技巧是在每个实例中使用不同的消费者组。(假设开始轮询时出现随机 UUID)。