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,解压到指定目录,无需其他操作即完成安装。

  1. tar -xzf kafka_2.11-2.0.0.tgz -C /home/tools
  2. cd kafka_2.11-2.0.

2. 配置集群参数

修改config/server.properties

基本参数如下:

  1. # broker唯一id,值为不重复正整数
  2. broker.id={n: int}
  3. # 服务监听地址
  4. listeners=PLAINTEXT://{your.host}:
  5. # 日志存放位置列表,以逗号隔开
  6. log.dirs={data.storage.list}
  7. # zookeeper地址列表,以逗号隔开
  8. zookeeper.connect={zookeeper.server.list}

优化参数配置如下:

  1. # 消息处理线程数,建议数量为cpu核数加1
  2. num.network.threads=25
  3. # 磁盘IO的线程数,建议为cpu核数2倍,最大不超过3倍
  4. num.io.threads=48
  5. # 拉取线程数,影响follower的I/O并发度,单位时间内leader持有更多请求,相应负载会增大
  6. num.replica.fetchers=2
  7. # 分区数量配置,根据业务情况修改
  8. num.partitions=16
  9. # 消息日志备份数,默认是1
  10. default.replication.factor=2
  11. # 刷盘(写入文件到磁盘)间隔消息数,建议设为10000
  12. log.flush.interval.messages=10000
  13. # 刷盘间隔毫秒数,建议1秒(1000)
  14. log.flush.interval.ms=1000
  15. # 日志保留小时数
  16. log.retention.hours=48
  17. # 段文件大小,过小会产生很多小文件降低性能,过大会影响快速回收磁盘空间以及Kafka重启后的载入
  18. 速度
  19. og.segment.bytes=1073741824
  20. # 最大字节数,默认1M,可以调到5M以上
  21. replica.fetch.max.bytes=5242880
  22. # 可接受数据大小,受限于java int类型的取值范围,超出后会报OOM异常
  23. socket.request.max.bytes=2147483600
  24. # 日志传输时候的压缩格式,可选择lz4, snappy, gzip,不压缩。建议打开压缩,可以提高传输性能
  25. compression.type=snappy
  26. # 是否允许通过管理工具删除topic,默认是false
  27. delete.topic.enable=true
  28. # 是否允许程序自动创建Topic
  29. auto.create.topics.enable=false

3. 配置日志参数

修改config/log4j.properties的jog4j参数,提高Kafka操作日志(和数据日志区分)的日志级别,以降低日志输出相关资源占用。具体可更改配置如下:

  1. # Kafka2.0默认只有controller是TRACE级别,可以改为INFO,其他INFO级别可以适当提升为WARN
  2. # zookeeper日志级别,
  3. log4j.logger.org.I0Itec.zkclient.ZkClient=INFO
  4. log4j.logger.org.apache.zookeeper=INFO
  5. # 主日志级别
  6. log4j.logger.kafka=INFO
  7. log4j.logger.org.apache.kafka=INFO
  8. # request日志级别,只有当需要调试时才有必要输出
  9. log4j.logger.kafka.request.logger=WARN, requestAppender
  10. log4j.additivity.kafka.request.logger=false
  11. # 需要调试时解除以下三行注释,并将RequestChannel$设为TRACE
  12. # log4j.logger.kafka.network.Processor=TRACE, requestAppender
  13. # log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender
  14. # log4j.additivity.kafka.server.KafkaApis=false
  15. log4j.logger.kafka.network.RequestChannel$=WARN, requestAppender
  16. log4j.additivity.kafka.network.RequestChannel$=false
  17. # controller日志级别,默认为TRACE
  18. log4j.logger.kafka.controller=INFO, controllerAppender
  19. log4j.additivity.kafka.controller=false
  20. # 日志清理的日志级别
  21. log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
  22. log4j.additivity.kafka.log.LogCleaner=false
  23. log4j.logger.state.change.logger=TRACE, stateChangeAppender
  24. log4j.additivity.state.change.logger=false
  25. # 登陆认证的日志级别
  26. log4j.logger.kafka.authorizer.logger=INFO, authorizerAppender
  27. log4j.additivity.kafka.authorizer.logger=false

4. 配置JVM参数

Warning:谨慎调试

在 bin/kafka-server-start.sh 文件中调整参数如下:

  1. # 在base_dir之后配置参数
  2. base_dir=$(dirname $0)
  3. export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPa
  4. useMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinM
  5. etaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"

ps: 虽然看起来很激进,但是以上配置参照的是LinkIn高峰时期最繁忙的集群:

  1. 60 brokers
  2. 50k partitions (replication factor 2)
  3. 800k messages/sec in
  4. 300 MB/sec inbound, 1 GB/sec+ outbound

这个配置的集群实现了90%的GC中断时间不超过21毫秒,每秒钟新生代GC次数不超过一次
ps2: 上述环境的Java版本为JDK 1.8 u5

5. 配置Linux参数

Warning:谨慎调试

  1. # 调整系统所有进程一共可以打开的最大文件数:
  2. echo 'fs.file-max = 1024000' >> /etc/sysctl.conf

以及/etc/security/limits.conf末尾增加:

  1. # 设置当前user以及由它启动的进程的资源限制
  2. {user} soft nofile 1024000
  3. {user} hard nofile 1024000

增大socket buffer size,以提高吞吐性能

  1. echo 212992 >> /proc/sys/net/core/wmem_max
  2. echo 212992 >> /proc/sys/net/core/rmem_max

Kafka2.0官方安装指南

Quick Start