继生产者篇之后,Kafka Simulator v1.2 版本转向读取侧,以及它最容易被误解的事件:重平衡。本篇新增 10 个场景,将课程扩展到 125 个中的 33 个。
v1.2 有什么
消费者组是一个披着简单 API 外衣的协调问题。v1.2 让这种协调变得可见:
- 分配策略 — 将
range、roundrobin、sticky和cooperative-sticky并排对比,让你看清哪些会让整个世界停摆,哪些只移动必须移动的分区。 - 静态成员资格 (KIP-345) — 为什么在
session.timeout.ms之内 重启的成员会保留其分配、不触发重平衡,以及当它停机太久时会发生什么。 - 两个超时 —
session.timeout.ms对比max.poll.interval.ms:一个关乎心跳,另一个关乎一个活着却卡在处理中的消费者。它们以不同的方式失败,而模拟器同时展示两者。 - 停顿与恢复 — 一个停止拉取、被踢出、又重新加入的消费者——以及它这样做时究竟哪些分区会移动。
重平衡很难讲清楚,因为它只有作为一个序列才有意义:撤销、分配、恢复。静态图把这个序列压缩成一根箭头。在这里你可以逐帧拖动,看着所有权一个分区一个分区地易手。
为什么重要
生产环境中大多数消费者事故其实都是重平衡事故——一次看起来像宕机的部署、一个对慢批处理来说太短的 max.poll.interval.ms、一个悄悄移动了比预期更多分区的 sticky 分配器。以你选择的速度看着重平衡运转,是建立直觉的最快方式,让这些事故在事后看来显而易见。
打开模拟器,添加并杀掉消费者,观察消费者组重新形成。