利用多磁盘并发读写,保证每个磁盘连续读写的特性。
具体配置上,是将不同磁盘的多个目录配置到broker的log.dirs,例如
log.dirs=/disk1/kafka-logs,/disk2/kafka-logs,/disk3/kafka-logs。
JVM参数配置:
设置垃圾回收器。推荐使用最新的G1来代替CMS作为垃圾回收器。 Broker中的JVM参数设置如下:
-Xms30g -Xmx30g -XX:PermSize=48m -XX:MaxPermSize=48m
-XX:+UseG1GC -XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
Broker参数配置:
配置优化都是修改server.properties文件中的参数。
网络和io操作线程配置优化:
broker处理消息的最大线程数:
num.network.threads=xxx
# broker处理磁盘IO的线程数:
num.io.threads=xxx
log数据文件刷盘策略:
当kafka server的被写入海量数据后,会生成很多数据文件,且占有大量的磁盘空间,如果不及时处理,可能磁盘空间不够用,kafka默认保留时间是一周。
建议配置如下:
# 保留三天,也可以更短
log.retention.hours=72
段文件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快(如果文件过小,则文件数量比较多,
kafka启动时是单线程扫描目录(log.dir)下所有数据文件)
log.segment.bytes=1073741824
配置jmx服务
Kafka server中默认是不启动jmx端口的,需要自己手动配置
[lizhitao@root kafka_2.10-0.8.1]$ vim bin/kafka-run-class.sh
最前面添加一行
JMX_PORT=8060
Replica相关配置
replica.lag.time.max.ms:10000
replica.lag.max.messages:4000
num.replica.fetchers:1
在Replica上会启动若干Fetch线程把对应的数据同步到本地,而num.replica.fetchers这个参数是用来控制Fetch线程的数量。
每个Partition启动的多个Fetcher,通过共享offset既保证了同一时间内Consumer和Partition之间的一对一关系,又允许我们通过增多Fetch线程来提高效率。
default.replication.factor:1
这个参数指新创建一个topic时,默认的Replica数量
Replica过少会影响数据的可用性,太多则会白白浪费存储资源,一般建议在2~3为宜。