我们正在使用SpringKafka来消费消息。我们已经为每个分区创建了接收消息的接收器。现在我们有了这样一个需求:我们需要多个接收者来使用来自单个分区的消息。
例如,假设我们有一个分区0。目前我们只有一个接收器(接收器1)从这个分区接收消息。现在我想为同一分区(分区0)添加另一个接收器(接收器2)。
所以,如果producer向这个分区发送100条消息,那么接收器1应该接收50条消息,其余50条消息应该在接收器2中接收。我不希望邮件被复制。两个接收器类都属于同一个组(我设置了props.put(“group.id”,“unique\u group\u id”))
请帮助我了解这种情况是否可行。
2条答案
按热度按时间8tntrjer1#
如果不能增加主题的分区数,那么可以使用一些“讨厌的”技巧。在接收器和接收器之后使用不同的消费者组id
pool()
丢弃一个接收器上偏移量为偶数的消息和第二个接收器上偏移量为奇数的消息,如下所示:这会起作用,但会产生一些后果:
它是不可伸缩的(您不能轻易地将另一个接收器添加到分区)
如果一个接收器卡住/死机,第二个接收器就不能处理它的工作
对不同消费群体的补偿管理相当困难(特别是如果生产者不在你的控制之下)
baubqpgj2#
不,你不能那样做。每个分区只能由单个使用者组中的一个使用者使用。
如果希望两个使用者使用同一分区,那么这两个使用者必须属于两个不同的使用者组。但是,在这种情况下,两个使用者都将接收该分区的所有消息。
看来你需要的是
worker queue
. 2个工作进程使用单个队列中的消息,每个消息将仅由一个工作进程使用。有很多开源软件worker queues
,例如ActiveMQ
,RabbitMQ
,等等。