知其然,知其所以然
Kafka 内部原理 2026-09-24

Log Compaction:同一个 Key 为什么只保留最新值

`cleanup.policy=compact` 的 topic 不按时间或大小删数据,而是保证"每个 Key 至少保留最新的一条"。这次给 10 个 Key 各写 5 轮更新,中途给其中一个 Key 写一条墓碑(value 为 null),跨三个 Segment,然后读出清理前

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

磁盘满了以后 Kafka 会发生什么

磁盘写满是运维里最怕的 Kafka 故障之一。这次没有靠推测,而是在一个独立的小容量磁盘镜像上单独起了一个 Kafka 4.3.1 broker(不影响主集群,也不碰系统盘),一路写到磁盘满,记录 broker 的日志、进程状态、客户端看到的现象,以及扩容之后的恢复过程。

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Broker 崩溃后,副本如何接管 Leader

Leader 所在的 Broker 崩溃后,剩下的副本会接管,这一点前面的文章已经验证过。这篇关心的是客户端的真实体验:正在持续写入的 Producer 会中断多久、会不会报错、丢不丢消息,以及日志里留下了什么痕迹。这次让 Producer 用 `acks=all` 加幂等(`e

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Unclean Leader Election:为什么可能丢消息

默认情况下,只有 ISR 里的副本才能成为新 Leader。`unclean.leader.election.enable=true` 允许一个不在 ISR 里、数据落后的副本上位。这次在真实集群里把这个场景完整走一遍:先让 Follower 掉出 ISR,Leader 独自写入

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Consumer 为什么必须调用 poll()

Kafka Consumer 的 `poll()` 不只是"拿数据",它还是消费者向组协调器证明"我还活着并且在处理"的方式:`max.poll.interval.ms` 规定两次 `poll()` 之间最长能隔多久。这次用一个真实的 Java Consumer,在 poll 之

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Consumer Group:多个消费者如何分摊 Partition

同一个 `group.id` 下的多个消费者会瓜分一个 topic 的 Partition,成员一变,分配就重新洗牌(rebalance)。这次给一个 6 分区的 topic 依次加入 3 个消费者、再依次让其中两个离开,用真实的 `ConsumerRebalanceListen

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

一个 Consumer 能不能消费多个 Partition

可以,而且这是分区数多于消费者数时的常态:一个消费者会同时持有多个分区。真正的问题是它读到的顺序是什么样的。这次往一个 6 分区的 topic 里按序号 0 到 599 依次发送 600 条消息(37 个不同的 key),再用同一个消费组里的单个 Java Consumer 读回

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Partition 数量和 Consumer 数量怎么匹配

同一个消费组里,一个分区同一时刻只会分给一个消费者,所以消费者数量超过分区数没有意义,分区数不能被整除时会有人多干活。这次用真实数据量化这两点:一个 6 分区的 topic,每个分区 1000 条、共 6000 条消息,每条消息处理时模拟 `Thread.sleep(1)`,分别

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Consumer Rebalance:为什么加一个实例会暂停消费

常见说法是"消费组里加一个实例会触发 rebalance,所有人暂停消费"。这次用真实数据检验这句话:一个 6 分区的 topic,Producer 以约每 5 毫秒一条的速度持续写入;消费者 A 先独占全部分区,9 秒后再启动消费者 B;对每个分区统计"消息从产生到被消费"的最

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Range、RoundRobin、Sticky 和 Cooperative 分配策略

`partition.assignment.strategy` 决定分区怎么分给消费组成员。这次用同一个场景把四种内置策略各跑一遍:三个 topic(分别有 3、2、4 个分区,共 9 个分区)被同一个消费组订阅,消费者按 C1、C2、C3 的顺序依次加入,然后 C2 离开。每个

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Group Coordinator:Kafka 如何管理消费组

每个消费组都由集群里的某一个 Broker 担任 Group Coordinator,负责成员管理、rebalance 和 offset 存储。这个"某一个"是怎么选出来的、offset 到底存在哪、这个 Broker 挂了会怎样,都能用真实数据回答。这次做了三件事:把 6 个组

Kafka 真实验证 动画演示
Kafka 内部原理 2026-09-24

Offset 提交:自动提交和手动提交有什么区别

Offset 提交决定了消费者重启后从哪里继续读。自动提交、`commitSync()`、`commitAsync()` 三种方式的区别不只是"写起来方不方便"。这次量了它们的开销,验证了 `commitSync()` 不带参数时提交的到底是哪个位置,并看了异步提交失败时代码是怎

Kafka 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号