使用kafka(和spring boot)的分布式系统中的graphql订阅

bqjvbblv  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(359)

我有以下情况:
我有5个相同服务的示例,都在同一个Kafka消费群中。其中一个具有到客户端的websocket连接(graphql订阅)。我使用graphqljava和springboot。
当这个连接打开时,我从5个示例中的任何一个生成事件(定义了一个消息键,使它们进入同一个分区并排序),我需要所有这些事件都被打开这个连接的同一个示例使用。不是其他4个。
即使分区分配对我有利,也可以随时进行重新分配,这样我就没有运气了
我的实现是使用React堆Kafka,但我认为这只是一个实现细节。
我看到的选项有:
每次都用一个新的组id开始侦听该主题,这样服务总是从该主题接收消息(但另一个组id中的5也会接收)
为每个websocket连接创建一个新的主题,这样只有生产者知道该主题(但是主题id应该在kafka事件中发送,以便这些事件的生产者知道在哪里发布它们)
如果我收到的消息,我不是一个与连接,不要确认它。但这会让事情变得缓慢,而且看起来很棘手
开始使用一些完全不同的东西,比如redis pubsub来接收所有使用者中的所有消息并检查连接。
我看到node有一个实现,但我不知道它是如何解决问题的。类似的问题解释了如何对订阅进行编程,但没有讨论这个分布式的问题。
我建议的最干净的方法是什么?Kafka有什么我看不到的方法吗?还是我误解了什么?

wkftcu5l

wkftcu5l1#

最后,我为每个侦听器使用了一个消费者组id,并为这些事件指定了一个主题。

相关问题