Kafka 高吞吐量怎么实现的

Kafka 高吞吐量怎么实现的

顺序读写

Producer 发送的消息顺序追加到文件中,Consumer 从 Broker 自带偏移量读取消息。这两者可以充分利用磁盘的顺序写和顺序读性能,速度远快于随机读写。

零拷贝

mmap 持久化文件

Broker 写入数据,并非真正的 flush 到磁盘上了,而是写入到 mmap 中。

sendfile 读取

Customer 从 Broker 读取数据,采用 sendfile,将磁盘文件读到 OS 内核缓冲区后,直接转到 socket buffer 进行网络发送。

分区

Kafka 将消息分成多个 partition,增加了并行处理的能力。

批量发送

Producer 发送多个消息到同一分区,通过批量发送可以减少系统性能开销。

  • batch.size:默认积压到 16K 就会批量发送
  • linger.ms:设置一定延迟来收集更多消息。默认 0ms ,即有消息就立马发送。

上述两个条件有任一条件满足,就会触发批量发送。

数据压缩

Kafka 支持三种压缩算法:

  • gzip
  • snappy
  • lz4
/*compressType有四种取值:none lz4 gzip snappy*/
props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, compressType);

参考