1.分区数(num.partition)的选择
num.partition指定新创建的主题的分区数,只能增,不能减。一般来说 分区数 大于等于 消费者数。
2.日志保留策略
kafka默认会保留消息一周,通过 log.retention.ms/hours等进行设置。
另一种方式是通过保留的消息的大小。如log.retention.bytes=1000000000表示当分区数据总量超过1GB时,消息会被删除
3.单个消息的大小(message.max.bytes)
默认为1MB。这个值对性能有显著的影响。Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好。
message.max.bytes必须小于consumer设置的fetch.message.max.bytes,否则消费者无法读取比较大的信息
4.虚拟机的网络优化
对分配给socket读写缓冲区的内存大小进行调整可以显著提升网络的传输性能。net.core.wmem.default和net.core.reme_默认值为128K,可以将其设置为2MB或者其最大值
除了设置socket,还要设置TCP socket的读写缓冲区,他们的参数为net.ipv4.tcp_wmem和net.ipv4.tcp.rmem。尽量调大呗
5.垃圾回收器设置
推荐使用G1回收器。kafka对堆内存使用率很高,容易产生垃圾对象。
可以设置InitiatingHeapOccupancyPercent为35(默认45%,表示堆内存的使用率达到45%之前,G1不会启动垃圾回收)