Kafka~高吞吐量设计

Kafka 之所以能够实现高性能和高速度,主要归因于以下几个关键因素:

  1. 分布式架构:Kafka 采用分布式架构,可以水平扩展,通过增加服务器节点来处理更多的流量和数据存储。
  2. 顺序写入磁盘:Kafka 将消息顺序地写入磁盘,这种顺序写入相比随机写入磁盘的性能要高得多。磁盘顺序读写的速度接近于内存的读写速度。
  3. 分区机制(稀疏索引):数据被分割到多个分区,不同分区可以并行处理,从而提高了并发处理能力,并按照数据量级间隔建立索引。
  4. 批量处理:Kafka 会对消息进行批量处理,而不是逐个处理消息,减少了网络开销和磁盘 I/O 次数。
  5. 零拷贝技术:在数据传输过程中,使用零拷贝技术避免了不必要的数据复制,提高了数据传输效率。
  6. 内存映射:通过内存映射文件(Memory Mapped Files),将磁盘文件映射到内存,加快了数据的访问速度。
  7. 高效的存储格式:Kafka 采用紧凑的二进制存储格式,减少了存储空间的占用,并且有利于数据的快速读取和处理。
  8. 预读和后写优化:利用磁盘的预读和后写特性,提前读取后续可能需要的数据,以及延迟写入以合并更多的操作。

我挑几个比较重要的讲一讲。

发送批量处理

  1. 批量发送:Kafka通过将多个消息打包成一个批次,减少了网络传输和磁盘写入的次数,从而提高了消息的吞吐量和传输效率。详细可以看我之前的文档-消息写入过程
  2. 异步发送:生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效率。
  3. 消息压缩:支持对消息进行压缩,减少网络传输的数据量。
  4. 并行发送:通过将数据分布在不同的分区(Partitions)中,生产者可以并行发送消息,从而提高了吞吐量。

数据高效存储

  1. 零拷贝技术:Kafka使用零拷贝技术来避免了数据的拷贝操作,降低了内存和CPU的使用率,提高了系统的性能。

如果不考虑用户态的内存拷贝和物理设备到驱动的数据拷贝,一次数据读取IO会涉及4次数据拷贝。同时也会涉及到4次进程上下文的切换。所谓的零拷贝,作用就是通过各种方式,在特殊情况下,减少数据拷贝的次数/减少CPU参与数据拷贝的次数

常见的零拷贝方式有mmap、sendfile、dma、directl/O等。

  1. 磁盘顺序写入:Kafka把消息存储在磁盘上,且以顺序的方式写入数据。顺序写入比随机写入速度快很多,因为它减少了磁头寻道时间。避免了随机读写带来的性能损耗,提高了了磁盘的使用效率。
  2. 页缓存:Kafka将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,因为MQ大多是顺序读操作,从而实现快速的数据访问。
  3. 稀疏索引 :Kafka存储消息是通过分段的日志文件,每个个分段都有自己的索引文件。这些索引文件中的条目不是对分段中的每条消息都建立索引,而是每隔一定数量的消息建立一个索引点 ,这就构成了稀疏索引。稀疏索引减少了索引大小,使得加载到内存中的索引更小,提高了查找特定消息的效率
  4. 分区和副本:Kafka采用分区和副本的机制,可以将数据分散到1多个节点上进行处理,从而实现了分布式的高可用性和负载均衡。

并行消费

  1. 并行消费:不同的消费者可以独立地消费不同的分区,实现消费的并行处理。
  2. 批量拉取:Kafka支持批量拉取消息,可以一次性拉取多个消息进行消费。减少网络消耗,提升性能。
相关推荐
万联WANFLOW7 小时前
SD-WAN 控制平面高可用怎么做?SDWAN 控制器挂了,全网会发生什么
运维·网络·分布式·架构
月落归舟16 小时前
从单机到分布式:互联网系统架构演进全流程
分布式·系统架构
搬砖柯18 小时前
系列12-接口压测怎么做成平台能力?自研 httpx 引擎、分布式 Worker 与 Locust 选型对照
分布式·测试工具·性能优化·开源·自动化·httpx
折哥的程序人生 · 物流技术专研18 小时前
Java面试通关⑭:分布式理论与架构全集
分布式·微服务·校招·分布式事务·cap·java面试·最终一致性
Kyrie_Li1 天前
Spring Boot Kafka 生产级配置全解析:从入门到精通
spring boot·后端·kafka
格子软件1 天前
2026年GEO贴牌代理:分布式多级分账状态机源码深度解构
java·vue.js·分布式·vue·geo
Evand J2 天前
【论文复现】MATLAB例程,存在测距误差的WSN无锚点分布式自定位,《WSN中存在测距误差的无锚点分布式自定位方法》
开发语言·分布式·matlab·定位·导航·wsn
格子软件2 天前
2026年分布式GEO代理流量调度:源码级状态机防重挂实战
java·vue.js·人工智能·spring boot·分布式·vue
2301_801184752 天前
kafka-zookeeper
分布式·zookeeper·kafka
Devin~Y2 天前
抖音级短视频推荐与直播带货平台面试实战:从 Java 微服务到 RAG 智能客服全链路解析
java·spring boot·redis·spring cloud·kafka·agent·rag