Kafka如何实现高吞吐量和性能?

Kafka如何实现高吞吐量和性能?

Kafka是大型架构的必备中间件,之所以被大量使用,很关键的就是Kafka的性能,下面我就重点讲解Kafka高性能背后实现@mikechen

Kafka顺序写

Kafka之所以有如此高的性能和吞吐量,第一大原因:就是Kafka通过将数据顺序写入磁盘来优化磁盘操作。

Kafka如何实现高吞吐量和性能?

为什么“顺序写入比随机写入效率更高”?

因为,磁盘读写头只需移动一次,减少了磁盘的寻道时间。

传统上,磁盘的随机读写,通常伴随着频繁的寻道操作,如下图所示:

Kafka如何实现高吞吐量和性能?

磁盘上的数据按轨道存储,磁头(读写头)需要,先定位到相应的轨道,这个定位过程称为寻道。

寻道时间,取决于磁头从当前位置,移动到目标位置的距离。

一般来说,寻道时间是整个磁盘 I/O 过程中最耗时的一部分。

也就是说,磁盘读写头,必须不断移动来找到数据的位置,这个过程会造成较高的时间开销。

而在顺序写入的情况下,磁盘读写头只需移动一次即可持续写入大块数据,这显著减少了寻道时间。

 

批量处理

Kafka支持批量处理消息,在生产者发送消息时,可以设置批量大小,Kafka会将多个消息打包成一个批次后再发送到Broker。

批量发送减少了每条消息的网络开销,并减少了网络带宽的消耗,同时,消费者也可以批量拉取消息,提升消费效率。

 

Zero Copy

此外,Kafka利用零拷贝(Zero Copy)技术,直接将数据从磁盘发送到网络套接字,避免了内存中数据的拷贝过程。

Kafka如何实现高吞吐量和性能?

在传统的数据传输流程中,数据需要经过多次拷贝才能从磁盘传输到网络,典型的步骤如下:

  • 步骤1:操作系统从磁盘读取数据,将其拷贝到内核缓冲区;
  • 步骤2:数据从内核缓冲区,复制到用户态缓冲区(需要一次数据拷贝);
  • 步骤3:数据从用户态缓冲区,再次复制回内核的网络缓冲区(需要二次数据拷贝);
  • 步骤4:数据最终通过网络发送。

通过零拷贝,数据可以直接从内核缓冲区,传输到网络缓冲区,而跳过用户态缓冲区的拷贝。

这种方式大幅降低了CPU和内存的负载,提高了吞吐量。

陈睿mikechen

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

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

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

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