kafka高吞吐

一、顺序读写

kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能

顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写

二、零拷贝(从磁盘到消费端)

传统流程是:

1、磁盘拷贝到OS缓冲区

2、再拷贝到应用程序缓存

3、应用程序拷贝到socket缓冲区

4、再拷贝到网卡发送

零拷贝流程:

1、磁盘拷贝到OS缓冲区

2、再直接拷贝到网卡发送

如果有10个消费者,传统方式下,数据复制次数为4*10=40次,而使用“零拷贝技术”只需要1+10=11次,一次为从磁盘复制到页面缓存,10次表示10个消费者各自读取一次页面缓存。

零拷贝原理:https://www.jianshu.com/p/fad3339e3448

应用程序调用mmap(),磁盘上的数据会通过DMA被拷贝的内核缓冲区,接着操作系统会把这段内核缓冲区与应用程序共享,这样就不需要把内核缓冲区的内容往用户空间拷贝。应用程序再调用write(),操作系统直接将内核缓冲区的内容拷贝到socket缓冲区中,这一切都发生在内核态,最后,socket缓冲区再把数据发到网卡去。

三、批量发送

kafka允许进行批量发送消息,producter发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka

  1. 等消息条数到固定条数
  2. 一段时间发送一次

四、分区

分多个区提高并行操作能力,但不是越多越好,选Leader和同步meta信息时分区越多越慢

五、压缩

Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩
压缩的好处就是减少传输的数据量,减轻对网络传输的压力

  • 批量发送数据压缩一起使用,单条做数据压缩的话,效果不明显

猜你喜欢

转载自blog.csdn.net/shaolong1013/article/details/89847907