自从我开始使用 Kafka,我注意到 Kafka 在每个消费者或组上广播消息。如何让生产者将消息仅发送给某个特定的消费者?我在谈论一个主题系统谢谢
Kafka 在消费消息方面的工作方式取决于主题和消费者组的分区数量。当消费者是同一个消费者组的一部分时,每个消费者都将收到来自一个或多个分区的消息,但不会与其他消费者收到相同的消息。因此,例如:如果您在同一个消费者组中有一个具有 4 个分区(p1、p2、p3、p4)和 3 个消费者(c1、c2 和 c3)的主题,那么在分区分配之后您可以有:c1 从 p1 和 p2 接收, c2 来自 p3, c3 来自 p4。如您所见,消费者不会收到相同的消息(即 c3 不会像 c1 一样从 p1 和 p2 接收消息)。如果您将消费者分配到不同的消费者组(因此 c1 到 g1、c2 到 g2 和 c3 到 g3)监听相同的主题(有 4 个分区),他们将获得所有相同的消息(来自 p1、p2、p3、p4 和 c2 和 c3 相同)。所以不同的消费者群体允许有一个发布/订阅机制(广播消息)。如果您希望生产者仅向特定客户发送消息,其中一种可能性是拥有一个分区数量 = 消费者数量的主题,然后不使用消费者组而是直接分配,以便消费者可以要求从特定分区获取消息(即 c1 只需要来自 p1 的消息)。在这种情况下,生产者需要向该分区发送消息,但是......默认分区程序(即循环)不会发生这种情况。您应该根据目标消费者编写自己的分区程序,以便将消息发送到正确的分区(因此,如果您知道消息“m” 应该转到 c1 你应该有一个分区逻辑,它能够从消息“m”中获取信息,处理它并将 p1 作为目标,即 c1 侦听分区)。另一种简单的解决方案可能是有一个主题——每个消费者一个分区。你可以用不同的方式来做到这一点,但总的来说,如果没有你的任何工作,Kafka 不会做到这一点。
| 归档时间: |
|
| 查看次数: |
6830 次 |
| 最近记录: |