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

Partition Reassignment:分区迁移如何进行

用kafka-reassign-partitions.sh把卡着死亡broker的分区真实迁移到健康broker上,--execute和--verify两步真实完成ISR从残缺恢复到健康。

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

Preferred Replica Election:为什么要把 Leader 放回首选副本

验证broker故障恢复后leader不会自动切回preferred副本,用kafka-leader-election.sh一条命令真实修正了集群里累积的8个分区不均衡。

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

Replica Fetcher:Follower 如何拉取 Leader 数据

持续写入30万条消息制造压力,用kafka-log-dirs.sh验证leader和两个follower磁盘字节数真实完全同步,offsetLag始终为0。

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

Kafka 网络线程:一个请求如何被处理

对运行中的broker做jcmd线程转储,真实数出每个监听端口3个网络线程(对应num.network.threads=3)和共享的8线程请求处理池(对应num.io.threads=8)。

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

Kafka 为什么使用 NIO 和零拷贝

真实验证os.sendfile()要求目标必须是socket,用500MB数据对比sendfile和read+send两种方式,真实测得sendfile快1.29倍。

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

Producer 吞吐量为什么上不去

用producer-perf-test真实测batch.size=1到默认值带来51倍吞吐提升,而acks=1相对acks=all在同样批量下只快5%,揭示批量大小才是主要瓶颈。

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

Producer 批量发送:batch.size 和 linger.ms

用同样稀疏的消息到达节奏对比linger.ms=0和20,网络请求数真实从1973降到246,总耗时几乎不变,验证linger.ms近乎免费的批量收益。

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

gzip、snappy、lz4、zstd:Kafka 压缩怎么选

用同一份重复性日志真实对比5种压缩方式的磁盘占用和吞吐量,gzip压缩率最高但较慢,zstd在压缩率和速度之间取得最好平衡。

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

Kafka Transaction:多 Partition 原子写入

Kafka 事务能让一个 Producer 对多个 Topic/Partition 的写入要么全部提交、要么全部不可见。这次真实用一个事务型 Producer 往两个 Topic 各写一条消息,分别验证提交和中止之后 read_committed/read_uncommitted 两种隔离级别看到的内容有什么不同;中途还真实撞见一个容易漏掉的细节:中止事务时如果消息还没真正发到 Broker,客户端会直接把它悄悄丢弃,不会留下任何痕迹。

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

Topic、Partition、Replica 到底是什么关系

Topic 是业务上的一个消息分类,Partition 是它的分片,Replica 是每个 Partition 的副本。这三层关系容易背下来,但"副本会不会一起挂、一起切换"这种问题只有真实杀一个 Broker 才能看清楚。这次在真实的 3 节点集群上建了一个 6 分区、3 副本

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

Producer 一条消息是怎么找到目标 Partition 的

一条消息发出去,最终落在哪个分区,取决于三种情况:有 key(按 key 哈希)、显式指定分区号(跳过一切计算)、都没有(交给分区器决定)。这次用真实的 Java 客户端、真实控制批次大小,把"没有 key 时到底怎么选分区"这件事测清楚。

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

Kafka RecordBatch:消息为什么不是一条一条写入

如果 Producer 每条消息都单独发一次网络请求,吞吐量会被请求数量本身卡死。Kafka 客户端会把发往同一个分区的消息攒成一个 RecordBatch 再一起发送。这次真实对比了"几乎不攒批"和"正常攒批"两种配置,用真实耗时把差距量化出来。

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