第 1 章 · Kafka 是什么 & 为什么这么快

三个交互演示:① 为什么 Kafka 快(顺序写 / 零拷贝 / PageCache 可视化) · ② 5 大消息中间件横向对比 · ③ Kafka 生态全景拓扑

① 顺序写 vs 随机写 —— 一个反直觉的事实

同样是磁盘 IO,Kafka 选择「只追加(append-only)」让机械盘 / SSD 都能跑出极致吞吐。点下面按钮看仿真柱状图:

📀 写入吞吐(MB/s,越大越好)

顺序写 1MB
0 MB/s
随机写 4KB
0 MB/s
内存随机写
0 MB/s

💡 注意「磁盘顺序写」与「内存随机写」吞吐量级接近 —— 这就是 Kafka 敢把消息全写磁盘的底气。

🆚 倍数差距

点 ▶ 开始测试

② 零拷贝(sendfile)—— 从 4 次拷贝到 2 次

Consumer 拉取消息时,Broker 把数据从磁盘 → 网卡。开 / 关「零拷贝」对比:

传统 read + write 模式

Disk DMA → PageCache (内核态) 拷贝 1
Kernel CPU → 用户态 buffer (JVM 堆) 拷贝 2 / 切换 1
User CPU → Socket buffer (内核态) 拷贝 3 / 切换 2
Kernel DMA → 网卡 拷贝 4
合计: 4 次拷贝 + 2 次上下文切换
关键收益: Kafka 用 sendfile(2) 系统调用,磁盘数据直接通过 PageCache → 网卡,省掉用户态 JVM 堆拷贝。 → 内存带宽节省 50%+,CPU 几乎不参与,单 Broker 可服务上万 Consumer 拉取。

③ PageCache —— 把缓存交给操作系统

Kafka 故意不在 JVM 堆里缓存消息,全部交给 OS 的 PageCache。点按钮模拟「缓存命中率随读写比变化」:

PageCache 命中率

0%

点上方按钮观察命中率变化

✅ 用 PageCache(Kafka)

  • ✓ JVM 堆只放元数据(几百 MB)→ 无 GC 压力
  • ✓ 进程重启缓存不丢(OS 级)
  • ✓ 自带智能预读 + 后写
  • ✓ 读写共用一份内存 → 利用率高
  • ✓ 配合 sendfile 实现真零拷贝

❌ 自己缓存(如 RabbitMQ)

  • ✗ JVM / Erlang 堆膨胀 → 频繁 GC / OOM
  • ✗ 进程崩溃缓存全丢
  • ✗ 没有 OS 预读优化
  • ✗ 读写双份内存 → 利用率低
  • ✗ 必然走用户态 read/write → 4 次拷贝

5 大消息中间件横向对比

点下方任一卡片,看它的存储模型 / 消费模型 / 顺序保证 / 典型场景细节:

Kafka
分布式提交日志
磁盘顺序日志 + 多副本,单机百万 QPS,大数据生态王者。
RabbitMQ
AMQP 消息队列
内存队列 + Exchange 灵活路由,业务异步 / RPC 队列首选。
RocketMQ
阿里事务消息
单 CommitLog + Tag 过滤,原生事务消息 / 延迟消息,电商场景。
Pulsar
存算分离 / 多租户
Broker 无状态 + BookKeeper 存储,云原生友好,多租户三层。
Redis Stream / NATS
轻量 / 内存
单进程内存级,亚毫秒延迟,适合微服务 / 缓存附加队列。

对比表(一图流)

维度 Kafka RabbitMQ RocketMQ Pulsar Redis Stream
存储磁盘顺序日志内存 + 持久化磁盘 CommitLogBookKeeper内存
消费Pull + OffsetPush + ACKPull / 长轮询Push / PullPull
顺序单分区有序单队列有序单队列有序单分区有序Stream 有序
路由Key HashExchange/RoutingTopic/TagSubscriptionStream Key
吞吐百万 QPS1~10 万10~50 万50~100 万10~50 万
延迟 p995~50ms<5ms<10ms<10ms<1ms
可重放✓ 按 Offset
事务/EOS幂等 + 事务简单事务消息事务
延迟消息需外部✓ TTL+DLX✓ 原生
典型场景日志总线/CDC/流处理异步任务电商交易云原生/跨地域轻量队列
面试金句: RabbitMQ 是消息队列,关注「可靠投递」;Kafka 是日志平台,关注「海量数据高吞吐持久化 + 多次重放」。它们解决的是不同问题。

Kafka 生态全景(鼠标悬停看组件介绍)

Kafka 不只是 Broker —— 它是一整套「生产 / 存储 / 流处理 / 集成 / 治理 / 监控」的生态。点击任一节点查看说明:

Kafka Cluster
3 broker · KRaft · 副本
Producer
业务服务 / SDK
Connect Source
Debezium · JDBC · S3
MirrorMaker 2
跨集群 / 跨机房同步
REST Proxy
HTTP 接入
Consumer Group
订单 / 风控 / 推荐
Connect Sink
ES / ClickHouse / S3
Kafka Streams
流-表二元性 + EOS
ksqlDB
SQL 流处理
Schema Registry
Avro · Protobuf · JSON
Kafka UI
浏览器管理台
Cruise Control
分区自动均衡
Prometheus + Grafana
JMX Exporter 监控
__cluster_metadata
KRaft Raft 日志
__consumer_offsets
消费 Offset 持久化
__transaction_state
EOS 事务状态
提示: 上图节点按颜色分类 —— 🟢 写入侧(Producer / Source)、🔵 读取侧(Consumer / Sink / Streams)、🟣 治理与监控、🟡 内部 Topic(KRaft / offsets / 事务)。