4.8. 最小化重新平衡的影响

在组中的活跃消费者之间重新平衡分区是需要的时间:

  • 消费者提交其偏移量
  • 要组的新消费者组
  • 为组成员分配分区的组领导
  • 组中的消费者接收其分配并开始获取

显然,这个过程会增加服务的停机时间,特别是在在消费者组集群滚动重启过程中重复发生时。

在这种情况下,您可以使用 静态成员资格 的概念来减少重新平衡数量。重新平衡会在消费者组成员之间均匀分配主题分区。静态成员资格使用持久性,以便在会话超时后在重启后识别消费者实例。

消费者组协调器可以使用通过 group.instance.id 属性指定的唯一 ID 来识别新的消费者实例。在重启过程中,消费者被分配一个新的成员 ID,但作为静态成员,它会继续使用相同的实例 ID,并且创建相同的主题分区分配。

如果消费者应用没有调用轮询至少每个 max.poll.interval.ms 毫秒,则消费者被视为失败,从而导致重新平衡。如果应用程序无法处理一段时间内从轮询返回的所有记录,您可以使用 max.poll.interval.ms 属性指定来自消费者的新消息的轮询间隔(毫秒)。或者,您可以使用 max.poll.records 属性设置从消费者缓冲区返回的记录数的最大限制,允许应用程序处理 max.poll.interval.ms 限制中的记录数。

# ...
group.instance.id=UNIQUE-ID 1
max.poll.interval.ms=300000 2
max.poll.records=500 3
# ...
1
唯一的实例 id 可确保新消费者实例接收相同的主题分区分配。
2
将间隔设置为检查消费者正在继续处理信息。
3
设置从消费者返回的已处理记录的数量。