kafka性能调优
1、将一个topic拆分为多个partition可以提高吞吐量。
不同partition需 要位于不同的磁盘(可以在同一个机器)。如果多个partition位于同一个磁盘,那么意味着有多个进程同时对一个磁盘的多个文 件进行读写,使得操作系统会对磁盘读写进行频繁调度,也就是破坏了磁盘读写的连续性。
同一个ConsumerGroup内的Consumer和Partition在同一时间内必须保证是一对一的消费关系
2、推荐使用最新的G1来代替CMS作为垃圾回收器。
CMS只能使用在Old区,在清理Young时一般是配合使用ParNew,而G1可以统一两类分区的回收算法。
3、broker处理消息的最大线程数 配置线程数量为cpu核数加1.
num.network.threads=xxx
4、broker处理磁盘IO的线程数 配置线程数量为cpu核数2倍,最大不超过3倍
num.io.threads=xxx
5、log.flush.interval.ms
log数据文件刷盘策略
每当producer写入10000条消息时,刷数据到磁盘 log.flush.interval.messages=10000
每间隔1秒钟时间,刷数据到磁盘
log.flush.interval.ms=1000
6、log.retention.hours
日志保留策略配置
保留三天,也可以更短
log.retention.hours=72
7、log.segment.bytes
段文件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快(如果文件过小,则文件数量比较多,
kafka启动时是单线程扫描目录(log.dir)下所有数据文件)
log.segment.bytes=1073741824
replica.lag.time.max.ms:10000
replica.lag.max.messages:4000
8、num.replica.fetchers:1
在Replica上会启动若干Fetch线程把对应的数据同步到本地,而num.replica.fetchers这个参数是用来控制Fetch线程的数量。
每个Partition启动的多个Fetcher,通过共享offset既保证了同一时间内Consumer和Partition之间的一对一关系,又允许我们通过增多Fetch线程来提高效率。
9、default.replication.factor:1
这个参数指新创建一个topic时,默认的Replica数量
Replica过少会影响数据的可用性,太多则会白白浪费存储资源,一般建议在2~3为宜。
buffer.memory:33554432 (32m)
10、block.on.buffer.full
在Producer端用来存放尚未发送出去的Message的缓冲区大小。缓冲区满了之后可以选择阻塞发送或抛出异常,由block.on.buffer.full的配置来决定。
11、compression.type:none
默认发送不进行压缩,推荐配置一种适合的压缩算法,可以大幅度的减缓网络压力和Broker的存储压力。
12、batch.size:16384
Producer会尝试去把发往同一个Partition的多个Requests进行合并,batch.size指明了一次Batch合并后Requests总大小的上限。如果这个值设置的太小,可能会导致所有的Request都不进行Batch。
13、acks:1
这个配置可以设定发送消息后是否需要Broker端返回确认