如何在springkafka中同时使用多个服务器

weylhg0b  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(284)

我必须使用kafka作为队列,但要使用多个服务器进行并发处理,并且不应接收重复的。例如,
p1和p2将数据发送到消息分区p。c1、c2和c3正在监听分区p,这样就可以维持秩序。
在这种情况下,只有一个节点处于活动状态,这是一项耗时的工作,因此会出现瓶颈。因为我们希望维护顺序,所以不希望使用多个分区。
我目前的选择是将长时间运行的作业转换为异步,这样它就可以完成最基本的任务,而将其余的任务留给异步。这在我们的用例中很难实现。
另一种选择是使用多个分区并手动处理排序,这也是不太可取的。
最后一个选择是将其作为主题并手动处理重复性。
没有一个选项是完美的,我想要的是使用spring jms可共享主题连接,它注册所有订阅者,但在循环中只将消息发送给其中一个订阅者。这并不能保证严格的顺序,但是我的测试仍然发现顺序比多分区的kafka好得多。
你有什么建议吗?

tktrz96b

tktrz96b1#

嗯,Kafka就是这样工作的。
所有的消费者 consumer group 订阅了主题,但只有其中一个可以使用。如果以某种方式失败,则在代理上发生重新平衡,组中的其他某个使用者将从分区中选择事件流。
这样我们才能从Kafka的表演中获得最佳的消费。如果你的逻辑是缓慢的下游,这已经不是Kafka的责任。
因此,循环消费是不可能与生Kafka的性质。
您可以通过将数据转移到其他消息代理来实现这一点。相同的jms或rabbitmq。
与Spring的融合及其执着 QueueChannel 支持你也可以实施轮抢。
但恐怕在Apache·Kafka的作品中没有这样的东西。是的,斯普林Kafka不会违反合同,在这件事上介绍一些东西。只是因为这样的方法会导致持续的再平衡。

相关问题