kafka: 性能优化
1. 生产者
1. compression.type
生产者设置的消息压缩格式,可配置的值有none, gzip, lz4, snappy
通过该参数可以提高生产者吞吐量
2. batch.size
当要往同一个分区发送多条数据时,将多个消息打包在一起发送,减少请求交互
该参数要根据实际情况进行合理配置;如果设置过大,则可能需要等待较长的时间才能凑够足够大的数据,导致数据的延迟较大
3. buffer.memory
生产者用来缓存等待发送到服务器的消息的内存总字节数。
如果设置的缓冲区不够,当生产消息的速度大于消息发送的速度,缓冲区被写满之后,导致用户线程阻塞;
生产者阻塞超过max.block.ms时间后,抛出异常;
根据当前业务生产消息的能力和客户端发送消息的能力,合理配置
4. linger.ms
发送消息的最大延迟时间;
设置为0表示无延迟,直接发送;
大于0时,如果消息数据小于batch.size,则继续等待,当数据超过batch.size或者等待时间超过linger.ms,则直接发送数据
2. broker
1. 消息解压缩
一般情况下,produce压缩消息,broker保存消息,consumer解压缩消息,broker只是保持消息,不会解压缩处理消息;
如果broker需要解压缩消息,会导致broker压力变大,并失去零拷贝特性;
broker解压缩消息的场景有两种:
生产者和broker配置的压缩算法不一样,broker需要解压缩后重新压缩;
集群保存了不同版本格式的消息,为了兼容老版本,将消息格式转为老版本;
2. 增量线程数
num.network.threads: 网络线程数,将接收到的请求添加到队列
num.io.threads: IO线程数,真正处理请求的线程
根据硬件资源,调整IO线程数可控制broker的处理能力
3. consumer
1. partition
增加topic的分区数,将topic的数据尽量均匀的落盘到不同的分区;避免将topic的数据都落盘到一个节点,这个节点的IO能力将会成为消费者消费的瓶颈;
2. consumer number
将消费者的数量调整到和分区数一样,一个消费消费一个分区的数据,提高消费能力