如果您的消费者少于分区,会发生什么?

coo*_*eze 18 apache-kafka

如果您的消费者少于分区,这是否意味着您不会消耗给定主题的所有消息?

在云环境中,您认为如何跟踪有多少消费者正在运行以及有多少消费者指向给定的主题#cage?

如果您在给定主题#cage上有多个消费者,该怎么办?我想消费者必须以某种方式跟踪它在重复的情况下已处理的消息?

for*_*ack 28

实际上,每个消费者都属于一个消费者群体.当Kafka集群将数据发送到使用者组时,分区的所有记录都将发送到该组中的单个使用者.

如果组中的分区数多于消费者,则某些消费者将使用来自多个分区的数据.如果组中的消费者多于分区,则一些消费者将无法获得数据.如果向组中添加新的使用者实例,它们将从旧成员中接管一些分区.如果从组中删除使用者(或者使用者死亡),则会将其分区重新分配给其他成员.

现在让我们来看看你的问题:

如果您的消费者少于分区,这是否意味着您不会消耗给定主题的所有消息?

没有.同一个使用者组中的某些使用者将使用来自多个分区的数据.

在云环境中,您认为如何跟踪有多少消费者正在运行以及有多少消费者指向给定的主题#cage?

卡夫卡会照顾它.如果新消费者加入该集团,或者老消费者死亡,卡夫卡将会做出反应.

如果您在给定主题#cage上有多个消费者,该怎么办?

您不能让多个消费者(在消费者群体中)消费来自单个分区的数据.但是,如果存在多个使用者组,则每个使用者组中的一个(且仅一个)使用者可以使用相同的分区.


小智 1

1)不,这意味着您将由一名消费者处理多个消费者。2)Kafka永远不会将同一个分区分配给多个消费者,因为这会违反分区内的顺序保证。3) 您可以在客户端代码中实现 ConsumerRebalanceListener,每当从消费者分配或撤销分区时都会调用该监听器。

您可能想专门看一下这篇文章的“为消费者分配分区”部分。在其中我有一个示例,您可以在其中创建具有 3 个分区的主题,然后使用 ConsumerRebalanceListener 告诉您哪个消费者正在处理哪个分区。现在您可以通过启动 1 个或多个消费者来尝试一下,看看会发生什么。示例代码在github中

http://www.javaworld.com/article/3066873/big-data/big-data-messaging-with-kafka-part-2.html