消费者抵消管理和容错

KafkaConsumers 通过调用 poll() 向 Kafka 经纪人请求消息,并通过抵消跟踪他们的进度 ** 。每个主题的每个分区内的每条消息都有一个所谓的偏移分配 - 它在分区内的逻辑序列号。KafkaConsumer 跟踪分配给它的每个分区的当前偏移量。请注意,卡夫卡经纪人并不了解消费者目前的抵消情况。因此,在 poll() 上,消费者需要将其当前的偏移发送给代理,使得代理可以返回相应的消息,即,。连续偏移量较大的消息。例如,假设我们有一个分区主题和一个具有当前偏移量 5 的消费者。在 poll() 上,消费者向代理发送偏移量,并且代理返回消息 6,7,8,…

由于消费者自己跟踪他们的抵消,如果消费者失败,这些信息可能会丢失。因此,必须可靠地存储偏移,使得在重新启动时,消费者可以在其离开的地方拾取其旧的偏移和消费者。在 Kafka 中,通过偏移提交有内置的支持 ** 。新的 KafkaConsumer 可以将其当前的偏移量提交给 Kafka,Kafka 将这些偏移量存储在名为 __consumer_offsets 的特殊主题中。在 Kafka 主题中存储偏移不仅仅是容错的,而且允许在重新平衡期间将分区重新分配给其他使用者。由于消费者组的所有消费者都可以访问所有分区的所有已提交的偏移量,因此在重新平衡时,获取新分区的消费者只会从 __consumer_offsets 主题读取此分区的已提交偏移量,并恢复旧消费者离开的位置。