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);