Kafka 安装配置说明
环境说明
当前版本 | 发布日期 | 下载地址 |
---|---|---|
2.0 | 2018-07-30 | 官方2.0.0镜像 |
安装步骤
注意: 文中以{}
包裹起来的内容需要自己替换,并非直接使用
0. 环境准备
基础环境 | 说明 |
---|---|
Java | Java版本应该在8(jdk1.8)或以上,以更好的支持G1回收 |
硬件参数 | CPU: 英特尔至强E5-2650 v4 2 (共计 24 核) Mem: DDR4内存-32GB 8 Sto: 2000GB * 8 raid 0 |
文件路径 | /home/tools/kafka_2.11-2.0.0/ |
数据存放位置 | /home/sdb/kafka-logs,/home/sdc/kafka-logs, /home/sdd/kafka-logs,/home/sde/kafka-logs, /home/sdf/kafka-logs,/home/sdg/kafka-logs, /home/sdh/kafka-logs,/home/sdi/kafka-logs |
zookeeper集群位置 | 10.10.20.83:2181,10.10.20.84:2181,10.10.20.85:2181 |
1. 下载安装
下载最新版本Kafka,解压到指定目录,无需其他操作即完成安装。
tar -xzf kafka_2.11-2.0.0.tgz -C /home/tools
cd kafka_2.11-2.0.
2. 配置集群参数
修改config/server.properties
基本参数如下:
# broker唯一id,值为不重复正整数
broker.id={n: int}
# 服务监听地址
listeners=PLAINTEXT://{your.host}:
# 日志存放位置列表,以逗号隔开
log.dirs={data.storage.list}
# zookeeper地址列表,以逗号隔开
zookeeper.connect={zookeeper.server.list}
优化参数配置如下:
# 消息处理线程数,建议数量为cpu核数加1
num.network.threads=25
# 磁盘IO的线程数,建议为cpu核数2倍,最大不超过3倍
num.io.threads=48
# 拉取线程数,影响follower的I/O并发度,单位时间内leader持有更多请求,相应负载会增大
num.replica.fetchers=2
# 分区数量配置,根据业务情况修改
num.partitions=16
# 消息日志备份数,默认是1
default.replication.factor=2
# 刷盘(写入文件到磁盘)间隔消息数,建议设为10000
log.flush.interval.messages=10000
# 刷盘间隔毫秒数,建议1秒(1000)
log.flush.interval.ms=1000
# 日志保留小时数
log.retention.hours=48
# 段文件大小,过小会产生很多小文件降低性能,过大会影响快速回收磁盘空间以及Kafka重启后的载入
速度
og.segment.bytes=1073741824
# 最大字节数,默认1M,可以调到5M以上
replica.fetch.max.bytes=5242880
# 可接受数据大小,受限于java int类型的取值范围,超出后会报OOM异常
socket.request.max.bytes=2147483600
# 日志传输时候的压缩格式,可选择lz4, snappy, gzip,不压缩。建议打开压缩,可以提高传输性能
compression.type=snappy
# 是否允许通过管理工具删除topic,默认是false
delete.topic.enable=true
# 是否允许程序自动创建Topic
auto.create.topics.enable=false
3. 配置日志参数
修改config/log4j.properties
的jog4j参数,提高Kafka操作日志(和数据日志区分)的日志级别,以降低日志输出相关资源占用。具体可更改配置如下:
# Kafka2.0默认只有controller是TRACE级别,可以改为INFO,其他INFO级别可以适当提升为WARN
# zookeeper日志级别,
log4j.logger.org.I0Itec.zkclient.ZkClient=INFO
log4j.logger.org.apache.zookeeper=INFO
# 主日志级别
log4j.logger.kafka=INFO
log4j.logger.org.apache.kafka=INFO
# request日志级别,只有当需要调试时才有必要输出
log4j.logger.kafka.request.logger=WARN, requestAppender
log4j.additivity.kafka.request.logger=false
# 需要调试时解除以下三行注释,并将RequestChannel$设为TRACE
# log4j.logger.kafka.network.Processor=TRACE, requestAppender
# log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender
# log4j.additivity.kafka.server.KafkaApis=false
log4j.logger.kafka.network.RequestChannel$=WARN, requestAppender
log4j.additivity.kafka.network.RequestChannel$=false
# controller日志级别,默认为TRACE
log4j.logger.kafka.controller=INFO, controllerAppender
log4j.additivity.kafka.controller=false
# 日志清理的日志级别
log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.LogCleaner=false
log4j.logger.state.change.logger=TRACE, stateChangeAppender
log4j.additivity.state.change.logger=false
# 登陆认证的日志级别
log4j.logger.kafka.authorizer.logger=INFO, authorizerAppender
log4j.additivity.kafka.authorizer.logger=false
4. 配置JVM参数
Warning:谨慎调试
在 bin/kafka-server-start.sh 文件中调整参数如下:
# 在base_dir之后配置参数
base_dir=$(dirname $0)
export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPa
useMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinM
etaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
ps: 虽然看起来很激进,但是以上配置参照的是LinkIn高峰时期最繁忙的集群:
60 brokers
50k partitions (replication factor 2)
800k messages/sec in
300 MB/sec inbound, 1 GB/sec+ outbound
这个配置的集群实现了90%的GC中断时间不超过21毫秒,每秒钟新生代GC次数不超过一次
ps2: 上述环境的Java版本为JDK 1.8 u5
5. 配置Linux参数
Warning:谨慎调试
# 调整系统所有进程一共可以打开的最大文件数:
echo 'fs.file-max = 1024000' >> /etc/sysctl.conf
以及/etc/security/limits.conf
末尾增加:
# 设置当前user以及由它启动的进程的资源限制
{user} soft nofile 1024000
{user} hard nofile 1024000
增大socket buffer size,以提高吞吐性能
echo 212992 >> /proc/sys/net/core/wmem_max
echo 212992 >> /proc/sys/net/core/rmem_max