Kafka: 消费者和消费者组17 Mar 2025 | 4 分钟阅读 消费者是消费或读取Kafka集群中主题数据的实体。消费者还知道它应该从哪个代理读取数据。消费者以有序的方式在每个分区内读取数据。这意味着消费者在读取偏移量0之前,不应该读取偏移量1的数据。此外,消费者可以同时轻松地从多个代理读取数据。 例如,两个消费者,消费者1和消费者2正在读取数据。消费者1按顺序从代理1读取数据。另一方面,消费者2同时从代理2和代理3读取数据,并且按顺序进行。 ![]() 注意:消费者2并行地从代理2和代理3读取数据。因此,代理2下的偏移量2与代理3下的偏移量2中的数据没有任何关系。消费者组消费者组是一个由多个消费者组成的组,它们基本上服务于一个应用程序。组中的每个消费者直接从独占分区读取数据。如果消费者数量多于分区数量,则某些消费者将处于非活动状态。如果组内任何活跃消费者丢失,那么非活动消费者可以接管并进入活动状态以读取数据。 但是,如何决定哪个消费者应该先读取数据以及从哪个分区读取? 对于此类决策,组内的消费者会自动使用一个“GroupCoordinator”和一个“ConsumerCoordinator”,它们将消费者分配给一个分区。此功能已在Kafka中实现。因此,用户无需担心。 让我们看下面的例子。 示例 1 考虑两个消费者组,即消费者组-1和消费者组-2。组1的两个消费者一起读取数据,但从不同的分区读取。组1的两个消费者将保持活动状态,因为它们正在并行读取数据。 ![]() 另一方面,组2的消费者1也从主题T下的分区1读取数据。在这里,消费者也处于活动状态,因为它属于组2。 示例 2 考虑另一种情况,一个消费者组有三个消费者。消费者1和消费者2处于活动状态。消费者1从分区0读取数据,消费者2从分区1读取数据。由于只有两个主题分区可用,但有三个消费者。因此,消费者3将保持非活动状态,直到任何一个活动消费者离开。 ![]() 注意:在示例2中,三个消费者仅存在于一个组中。这就是为什么消费者3处于非活动状态。然而,如果消费者存在于另一个组中,它将处于活动状态并能够读取数据。消费者偏移量Apache Kafka提供了一个方便的功能来存储消费者组的偏移量值。它存储一个偏移量值以知道消费者组正在读取哪个分区的数据。一旦组中的消费者读取数据,Kafka会自动提交偏移量,或者可以对其进行编程。这些偏移量实时提交到一个名为__consumer_offsets的主题中。此功能是在发生机器故障导致消费者未能读取数据的情况下实现的。因此,由于偏移量的提交,消费者将能够从上次中断的地方继续读取。 例如: 在下图的示例中,来自消费者组的消费者正在读取数据。读取数据后,消费者已提交偏移量。这意味着下次,消费者将不会从头开始读取数据,而是从已提交的点开始读取。另外,如果消费者不幸崩溃,它将只能从已提交的状态继续。 ![]() 传递语义提交的选择取决于消费者,即消费者何时希望提交偏移量。提交偏移量就像读者在阅读书籍或小说时使用的书签。 在Kafka中,有以下三种传递语义使用:
下一个主题Kafka用例 |
我们请求您订阅我们的新闻通讯以获取最新更新。