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

时间:2016-11-30 18:52:44

标签: apache-kafka

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

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

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

2 个答案:

答案 0 :(得分:23)

事实上,每个消费者都属于consumer group。当Kafka集群将数据发送到使用者组时,分区的所有记录都将发送给该​​组中的单个使用者。

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

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

  

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

NO。同一个消费者群体中的某些消费者将使用来自多个分区的数据。

  

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

卡夫卡会照顾它。如果新消费者加入该组织,或者老消费者死亡,卡夫卡将会做出反抗。

  

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

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

答案 1 :(得分:0)

1)不,这意味着您将有一个消费者处理多个消费者。 2)Kafka从不为多个消费者分配相同的分区,因为这会违反分区内的订单保证。 3)您可以在客户端代码中实现ConsumerRebalanceListener,只要从使用者分配或撤消分区,就会调用它。

您可能希望特别看一下本文“为消费者分配分区”部分。在那里我有一个示例,您在其中创建具有3个分区的主题,然后使用ConsumerRebalanceListener创建消费者,告诉您哪个消费者正在处理哪个分区。现在你可以通过启动一个或多个消费者来看看它会发生什么。示例代码在github中

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