什么是Apache Kafka消费者组ID?
#编程 #database #todayilearned #apachekafka

该帖子最初发表在Confluent blog上。

消费者组ID是ApacheKafka®中消费者配置的重要组成部分。设置消费者组ID确定一个消费者属于哪个组,这会带来一些重大后果。在三个区域中,组ID特别相关:

  • 检测新数据

  • 工作共享

  • 容错

让我们潜水。

什么是卡夫卡消费者?

Kafka消费者从Kafka生产商那里阅读/消费数据,从事阅读事件流的工作。他们从名为主题的日志中读取事件或消息。主题进一步分为分区,这些分区是存储消息的仅附加日志。这使每个主题都能在许多经纪人中托管和复制。

Consumer, represented by a pink rectangle, consuming partitions, represented by purple rectangles.

您可以在图中看到,消费者组中的给定消费者可以从多个分区中阅读,包括同一主题中包含的多个分区。

使用消费者组ID检测新数据

组ID通过经纪人与称为偏移的信息相关联,该信息指定了分区中给定事件的位置,因此,代表通过主题的进度。消费者组中的偏移量与书签或粘性标签在书籍中的功能相同。您可以在我们的常见问题解答中了解更多有关偏移的信息。

检查新数据

您可以使用特定的组ID偏移来检查是否有新数据写给分区。如果有更大偏移的事件,则意味着要读取新数据。如果您想知道如何读取偏移量,则使用Kafka-Consumer-groups实用程序的命令,该实用程序将读取您的偏移:

kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group group1 --offsets

请注意,如果您重新尝试此命令,则需要为 - 组提供有效的组ID。输出将类似于以下内容:

`GROUP   TOPIC  PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG     OWNER
Groupname topicname     0        2               2         1       ownername

或,如果您想了解有关在Confluent Cloud中托管的主题的汇合CLI如何进行此操作的更多信息,则可以查看有关从特定偏移和分区阅读的本教程。

我们文档中的kafka-consumer-groups实用程序还有更多内容,您始终可以运行kafka-consumer-groups—help以获取所有选项的完整列表。

消费者组ID在工作共享中

组ID确定哪个消费者属于哪个组。创建消费者客户端时,您可以通过配置分配组ID。如果有四个将相同组ID分配给同一主题的消费者,他们将分享从同一主题中阅读的工作。

如果有八个分区,那么这四个消费者中的每一个都将分配两个分区。如果有九个分区怎么办?这意味着将剩余的分区分配给该组的第一个消费者,以便一个消费者从三个分区中读取,其余的消费者从两个分区中读取。经纪人的工作是不断确保分区均匀分布在连接的消费者中。

Consumers, represented by a pink rectanglea, consuming partitions, represented by purple rectangles. 4 consumers consume 8 partitions by taking 2 each, 4 consumers consume 9 partitions by taking 2, 2, 2, and 3. The top diagram represents an anomaly and is described in a note.

注意:在顶部,您会看到,尽管有四个消费者,但三个是空闲的。那是因为同一组中只有一个消费者可以从一个分区中阅读。

整个过程是基于组ID的存在来统一消费者的。重要的是要在设置消费者时记住这一点。

如果您连接微服务,则要确保每个服务都有自己的消费者组(因此以及其自己的组ID)。这是为什么?让我们走过一个例子。

让我们说的是一个话题 - 订单微服务和退款微服务都需要从该主题中阅读。您不希望他们共享相同的偏移平均潜在的丢失订单或退款。

但是,如果您有一群消费者通过从付款主题中的分区阅读来处理订单,那么该集团中每个消费者的当前偏移量(存储在经纪人中)是如果小组中的消费者崩溃,则至关重要的是确保持续进展。同时,如果像退款一样来自另一个单独的群体的消费者正在从付款主题中阅读,那么即使订单中的消费者也可以继续他们的进度不受影响小组正在重新平衡。

消费者组ID在容错中的作用

正如最后一个示例所揭示的那样,组ID在容错中也起着至关重要的作用。

消费者崩溃时会发生什么?

每个消费者集团的经纪人都以设定的间隔向消费者发送了“心跳请求”。如果消费者没有及时响应,则会触发重新平衡。

组ID如何播放重新平衡?

好吧,无论哪种情况,经纪人的相关偏移记录都决定了消费者在重新加入后开始阅读的地方。只要组ID保持不变,它就可以准确地拾取其关闭的位置,而不会出现任何数据丢失的风险。

如果您有兴趣了解有关重新平衡的更多信息,我们建议您在Apache Kafka中的博客文章增量合作重新平衡:为什么您可以改变世界?您也可以咨询我们的常见问题解答。

从这往哪儿走

总而言之,当您在创建消费者客户端的过程中设置消费者组ID时,该组ID将消费者分配给其组,该组对工作共享,检测新数据和数据恢复的影响有很大的影响。

要了解有关此和其他主题的更多信息,请查看这些推荐资源:

  • Confluent开发人员:通过Confluent Developer教程,文档,课程,博客文章和示例学习Apache Kafka。

  • Confluent社区:如果您对Apache Kafka有疑问,或者您想与其他Kafka开发人员见面,请前往Confluent Community,并在我们的社区懈怠或论坛上介绍自己。

  • 流媒体播客:收听Streaming Audio Podcast,以听取与Confluent用户有关Apache Kafka的来龙去脉的热烈对话。这一集优化了Kafka的内部内容涵盖了消费者组内部。