Apache kafka 卡夫卡:制作人怎么能只发送给某个消费者/群组ID

Apache kafka 卡夫卡:制作人怎么能只发送给某个消费者/群组ID,apache-kafka,Apache Kafka,自从我开始使用卡夫卡以来,我注意到卡夫卡正在向每个消费者或群体广播信息。 我如何让制作人只向某个消费者发送信息? 我说的是一个主题系统 谢谢卡夫卡在消费消息方面的工作方式取决于主题和消费群体的分区数量。 当消费者是收听同一主题的同一消费者组的一部分时,每个消费者将接收来自一个或多个分区的消息,但与其他消费者接收的消息不同。例如:如果一个主题在同一消费者组中有4个分区(p1、p2、p3、p4)和3个消费者(c1、c2和c3),那么在分区分配之后,您可以有:c1从p1和p2接收,c2从p3接收,c3

自从我开始使用卡夫卡以来,我注意到卡夫卡正在向每个消费者或群体广播信息。 我如何让制作人只向某个消费者发送信息? 我说的是一个主题系统
谢谢

卡夫卡在消费消息方面的工作方式取决于主题和消费群体的分区数量。 当消费者是收听同一主题的同一消费者组的一部分时,每个消费者将接收来自一个或多个分区的消息,但与其他消费者接收的消息不同。例如:如果一个主题在同一消费者组中有4个分区(p1、p2、p3、p4)和3个消费者(c1、c2和c3),那么在分区分配之后,您可以有:c1从p1和p2接收,c2从p3接收,c3从p4接收。正如您所看到的,消费者没有收到与c1相同的消息(即c3没有收到来自p1和p2的消息)。 如果您将消费者分配到不同的消费者组(因此c1到g1、c2到g2和c3到g3)听相同的主题(有4个分区),他们将得到所有相同的消息(c1来自p1、p2、p3、p4,c2和c3也是如此)。因此,不同的消费者群体允许发布/订阅消息(广播消息)。
如果您希望制作人只向特定客户发送消息,其中一种可能性是让主题的分区数=消费者数,然后不使用消费者组,而是直接分配,以便消费者可以要求从特定分区获取消息(即c1只希望从p1获取消息)。在这种情况下,生产者需要向该分区发送消息,但。。。默认的分区器(即循环)不会发生这种情况。您应该基于目标消费者编写自己的分区器,以便将消息发送到正确的分区(因此,如果您知道消息“m”应该转到c1,那么您应该有一个分区器逻辑,它能够从消息“m”获取信息,处理它并将p1作为目标,即c1侦听分区)。另一个简单的解决方案可能是有一个主题——每个消费者有一个分区。你可以用不同的方式来实现这一点,但是卡夫卡,通常来说,如果你不做任何工作,就不能做到这一点。

卡夫卡在消费消息方面的工作方式取决于主题和消费群体的分区数。 当消费者是收听同一主题的同一消费者组的一部分时,每个消费者将接收来自一个或多个分区的消息,但与其他消费者接收的消息不同。例如:如果一个主题在同一消费者组中有4个分区(p1、p2、p3、p4)和3个消费者(c1、c2和c3),那么在分区分配之后,您可以有:c1从p1和p2接收,c2从p3接收,c3从p4接收。正如您所看到的,消费者没有收到与c1相同的消息(即c3没有收到来自p1和p2的消息)。 如果您将消费者分配到不同的消费者组(因此c1到g1、c2到g2和c3到g3)听相同的主题(有4个分区),他们将得到所有相同的消息(c1来自p1、p2、p3、p4,c2和c3也是如此)。因此,不同的消费者群体允许发布/订阅消息(广播消息)。
如果您希望制作人只向特定客户发送消息,其中一种可能性是让主题的分区数=消费者数,然后不使用消费者组,而是直接分配,以便消费者可以要求从特定分区获取消息(即c1只希望从p1获取消息)。在这种情况下,生产者需要向该分区发送消息,但。。。默认的分区器(即循环)不会发生这种情况。您应该基于目标消费者编写自己的分区器,以便将消息发送到正确的分区(因此,如果您知道消息“m”应该转到c1,那么您应该有一个分区器逻辑,它能够从消息“m”获取信息,处理它并将p1作为目标,即c1侦听分区)。另一个简单的解决方案可能是有一个主题——每个消费者有一个分区。你可以用不同的方式来做,但是卡夫卡,一般来说,如果你不做任何工作,就不能做到这一点。

每个消费者都选择从给定的主题中提取消息。如果您不希望消费者接收来自给定主题的消息,那么只需将其配置为不从该主题提取消息即可


如果要筛选主题以生成仅包含特定消息的主题,以便仅使用这些消息,则可以使用或来执行此操作

每个消费者选择从给定主题中提取消息。如果您不希望消费者接收来自给定主题的消息,那么只需将其配置为不从该主题提取消息即可

如果要筛选主题以生成仅包含特定消息的主题,以便仅使用这些消息,则可以使用或来执行此操作

  • 卡夫卡制作人不会向卡夫卡消费者发送任何信息
  • 卡夫卡制作人将消息发布到特定主题中
  • 每个Kafka使用者进程都属于特定的groupid,并在特定主题中注册
然后使用者可以开始使用来自该特定主题的数据,这样,如果您希望使用者进程仅从一个主题获取数据,则只需将其注册到一个主题

在以下两个主题中查看消费者如何注册:

consumer.subscribe(Arrays.asList("fast-messages", "summary-markers"));
请记住,如果有两个单独的使用者进程使用相同的主题,并且它们属于不同的组(groupId),那么它们将带来相同的数据,因为它们根本不会共享偏移量

  • 卡夫卡制作人不会向卡夫卡消费者发送任何信息
  • 卡夫卡制作人将消息发布到特定主题中
  • 每个Kafka使用者进程都属于特定的groupid,并在特定主题中注册
然后,消费者可以开始使用该特定主题的数据