我有3个消费者订阅了一个Kafka主题。生产者向主题发布一条消息。如何确保消息在kafka内部复制,然后由所有3个消费者使用?一种方法是不提交消息,但是消息会不断堆积在主题中。
x0fgdtte1#
你唯一要做的就是给每个消费者分配不同的组ID
3mpgtkmj2#
您应该为3个使用者设置3个不同的使用者组(具有不同的id)。使用者用使用者组名称标记自己,发布到主题的每条记录都会传递到每个订阅使用者组中的一个使用者示例。使用者示例可以在不同的进程中,也可以在不同的机器上。如果所有使用者示例都具有相同的使用者组,则记录将有效地在使用者示例上进行负载平衡。如果所有使用者示例都有不同的使用者组,则每个记录都将广播给所有使用者进程。从https://kafka.apache.org/documentation/
mwecs4sa3#
Kafka从不复制这些信息。消息总是只路由到主题/分区一次。但Kafka正利用消费者群体的概念来区分不同的消费者群体,并决定他们应该如何接收信息。在您的例子中,您必须为每个消费者分配不同的消费者组id。一旦你这么做了,他们就会开始并行地接收信息。而且,Kafka中的信息在消费者消费后永远不会被删除。它们将存储在主题/分区中,直到达到保留限制,保留限制可以基于时间(例如,将邮件保留一周)或主题大小(将邮件保留到100gb)。
3条答案
按热度按时间x0fgdtte1#
你唯一要做的就是给每个消费者分配不同的组ID
3mpgtkmj2#
您应该为3个使用者设置3个不同的使用者组(具有不同的id)。
使用者用使用者组名称标记自己,发布到主题的每条记录都会传递到每个订阅使用者组中的一个使用者示例。使用者示例可以在不同的进程中,也可以在不同的机器上。
如果所有使用者示例都具有相同的使用者组,则记录将有效地在使用者示例上进行负载平衡。
如果所有使用者示例都有不同的使用者组,则每个记录都将广播给所有使用者进程。
从https://kafka.apache.org/documentation/
mwecs4sa3#
Kafka从不复制这些信息。消息总是只路由到主题/分区一次。
但Kafka正利用消费者群体的概念来区分不同的消费者群体,并决定他们应该如何接收信息。在您的例子中,您必须为每个消费者分配不同的消费者组id。一旦你这么做了,他们就会开始并行地接收信息。
而且,Kafka中的信息在消费者消费后永远不会被删除。它们将存储在主题/分区中,直到达到保留限制,保留限制可以基于时间(例如,将邮件保留一周)或主题大小(将邮件保留到100gb)。