2015-05-19 524 views
2

Kafka documentationApache Kafka如何将消息发送给多个消费者组?

卡夫卡不同的方式处理这个。我们的主题分为一组 完全订购的分区,每个分区在任何给定时间都由一个消费者 消费。这意味着消费者在每个 分区中的位置只是一个整数,下一个消息的偏移量将消耗到 。这使得所消耗的状态非常小,每个分区只有一个数字。这个状态可以是周期性的 检查点。这使消息确认相当于 非常便宜。

然而,以下是同一个文档中的快速入门指南,我很容易能够:

  1. 只有一个分区
  2. 启动控制台制片
  3. 推一个创建一个话题很少的消息
  4. 启动消费者消费--from-beginning
  5. 开始另一个消费者--from-beginning

并且两个消费者都成功从同一分区消费。

但是,这似乎与上述文件不符?

回答

3

当使用不同的消费群体时,消费者可以轻松使用相同的分区。您可以将群组标识视为消费卡夫卡主题的不同应用程序。多个不同的应用程序可能想要以不同的方式使用Kafka主题中的数据,因此不会与其他应用程序发生冲突。这就是为什么两个消费者可能消费一个分区(实际上是两个消费者如何消费一个分区的唯一方式)。

当你启动一个控制台消费者时,它随机生成一个组ID(link),因此这些消费者正在做我刚刚写的东西。

+0

我同意这是有用的和想要的。也许文档可以从“被分成一组完全有序的分区,每个分区在任何给定的时间被一个消费者消费” - >“被分成一组完全有序的分区,其中每个分区被消耗每个消费群体中的一个消费者*在任何给定时间“是否正确? – JKnight

+0

另外,谁负责存储偏移量索引?消费者?什么时候它是检查点? – JKnight

+1

@JKnight,是的第一个问题。偏移量存储在大多数情况下是Zookeeper的“偏移量存储”中。另一种选择是在Kafka中存储偏移量,但是最近增加了这个功能,我怀疑人们使用它。提交偏移量有一些设置,如'autocommit.enable'和'autocommit.interval.ms'。当启用自动提交时,所有分区的偏移量将在之前提到的每个间隔中进行提交。如果关闭自动提交,您将被迫定期调用'commitOffsets()'或将它们存储在远离Kafka/Zookeeper的地方。 – serejja

相关问题