Kafka如何做到百万级吞吐(4大核心技术)

Kafka是大型架构核心,下面我详解Kafka高吞吐技术@mikechen

顺序写入与零拷贝机制

Kafka 的消息写入是顺序写入磁盘,而非随机写。

磁盘顺序写的速度远超随机写,即使机械硬盘也能接近内存级性能。

Kafka如何做到百万级吞吐(4大核心技术)

Segment 文件顺序写入:每个 Partition 对应一组顺序的日志文件。

OS Page Cache 利用:Kafka 不自己管理缓存,而依赖操作系统的页缓存(Page Cache)进行文件读写缓冲。

零拷贝 (Zero Copy):通过 sendfile() 系统调用直接在内核中完成数据传输,无需反复拷贝到用户态。

减少 I/O 开销、降低 CPU 消耗、提升写入与读取速度。

 

分区化与并行处理

Kafka 的核心结构是 Topic → Partition → Replica。

Kafka如何做到百万级吞吐(4大核心技术)

分区机制带来的好处:

每个 Partition 可以独立存储、独立消费。

多个 Partition 可分布在不同 Broker 上,实现并行读写。

Consumer Group 内的多个消费者可并行消费不同分区。

示例:

一个 Topic 拆分为 10 个 Partition,10 个消费者同时消费,理论上吞吐可提升 10 倍。

支持水平扩展。

充分利用多核与多机器并发能力。

 

批量传输与压缩

Kafka 在网络层采用 批量发送 和 压缩机制 来显著提升吞吐。

Kafka如何做到百万级吞吐(4大核心技术)

主要手段:

Producer 端批量发送:通过 batch.size 和 linger.ms 参数,将多条消息合并成一批发送。

Broker 端批量存储:消息按批次写入日志文件,减少磁盘 I/O。

压缩算法支持:支持 gzip、snappy、lz4、zstd 等压缩方式,大幅降低网络带宽占用。

网络传输减少 70% 以上带宽占用。

每批次写入日志一次,显著提升写入吞吐。

 

异步复制与可配置的持久化策略

Kafka 基于 NIO(非阻塞 I/O) 实现异步通信,减少线程上下文切换。

Kafka如何做到百万级吞吐(4大核心技术)

优化点包括:

基于 Selector 的 Reactor 模型:单线程可处理成千连接。

零拷贝 sendfile():数据在磁盘与网卡之间直接传输,无需用户态参与。

批量响应机制:Broker 可同时返回多批确认信息,减少网络往返。

高并发下 CPU 利用率低。

延迟降低,整体吞吐显著提升。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧