1. 协调节点的选择

Kafka 协调节点(coordinator)是负责管理消费者组元数据和分区分配的 Kafka Broker。选取流程如下:

  • 基于消费者组 ID 哈希分配:每个消费者组的 group.id 经过哈希计算后会映射到某个特定的 Kafka Broker,这个 Broker 就是该组的协调节点。

  • 协调器的职责:协调节点负责管理消费者组的成员信息、执行分区再平衡、管理消费者组的会话等。当消费者组内成员有变化时,协调节点会触发分区再平衡。

  • 协调器故障切换:如果当前协调节点不可用,其他 Broker 会重新选取一个新节点作为协调节点。

2. 消费者的批量消息提交策略

Kafka 提供两种主要的消息提交策略——批量提交和单条提交。

批量提交

默认情况下,Kafka 消费者通常是批量提交偏移量

  • 批量消费后提交:消费者拉取一批消息后,等所有消息处理完再提交偏移量,这样提交的偏移量表示所有拉取的消息都已成功消费。通常在 max.poll.records 条消息处理完成后触发批量提交。

  • 优点:提高性能,减少提交次数。

  • 缺点:如果在批处理过程中应用崩溃,未处理的消息会在重启后再次消费,可能会造成消息的重复消费。

单条提交

另一种策略是消费一条提交一条,即每处理完一条消息就提交其偏移量:

  • 逐条消费提交:消费者每消费一条消息就立刻提交该消息的偏移量。这种模式下,即使消费者在处理中崩溃,重启后也只会从未提交的下一条消息开始消费。

  • 优点:降低重复消费的风险,适合对消息处理精确性要求高的场景。

  • 缺点:频繁提交偏移量会增加网络和 CPU 开销,影响性能。