Kafka在Ubuntu上的优化设置指南
openjdk-11-jdk),确保java -version显示版本正确。server.0=localhost:2888:3888等配置),并设置dataDir(如/var/lib/zookeeper)和clientPort(默认2181)。/opt/kafka(避免权限问题),并设置log.dirs(如/opt/kafka/logs)和zookeeper.connect(如localhost:2181)。JVM堆内存是Kafka性能的关键,需根据服务器内存合理分配(建议不超过物理内存的50%-70%):
kafka-server-start.sh,添加export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"(初始堆内存4GB,最大堆内存4GB)。-XX:+UseG1GC),并设置-XX:MaxGCPauseMillis=20(目标最大GC停顿时间20ms)。num.network.threads(处理网络请求的线程数),建议设置为CPU核心数的1-2倍(如4核服务器设为4-8)。num.io.threads(处理磁盘I/O的线程数),建议设置为CPU核心数的2-4倍(如4核服务器设为8-16)。log.segment.bytes(单个日志段大小),建议设置为1GB(默认1GB),减少索引文件数量;log.retention.hours(日志保留时间),建议设置为168小时(7天),避免磁盘空间浪费。log.dirs挂载在SSD上(避免HDD的随机写入瓶颈)。socket.send.buffer.bytes(发送缓冲区,建议1MB)、socket.receive.buffer.bytes(接收缓冲区,建议1MB),提升网络传输效率。socket.request.max.bytes(单个请求最大大小),建议设置为100MB(默认100MB),避免大请求阻塞。num.partitions(Topic分区数),建议设置为Broker数量的整数倍(如3节点集群设为3或6),提升并行处理能力。default.replication.factor(默认副本因子),建议设置为3(保障高可用),避免副本过多导致同步延迟。/etc/security/limits.conf,添加* soft nofile 100000和* hard nofile 100000(用户最大文件描述符数)。/etc/sysctl.conf,添加以下参数以提升网络性能:
net.core.somaxconn=8192(监听队列最大长度)net.ipv4.tcp_max_syn_backlog=8096(SYN队列最大长度)net.ipv4.tcp_fin_timeout=30(关闭连接超时时间,单位秒)vm.swappiness=1(减少内存交换,提升磁盘I/O性能)。batch.size(批量大小,建议1MB)、linger.ms(发送延迟,建议100ms),提升吞吐量。compression.type(压缩类型,建议snappy或lz4),减少网络传输开销。fetch.min.bytes(每次拉取最小字节数,建议1MB)、fetch.max.wait.ms(拉取等待时间,建议1000ms),平衡延迟与吞吐量。max.poll.records(每次poll的最大记录数,建议500-1000),提升消费效率。UnderReplicatedPartitions未同步分区数、RequestQueueTimeMs请求队列时间),或使用Kafka Exporter采集JMX指标。logrotate),避免日志文件过大占用磁盘空间。log.retention.hours参数),升级Kafka版本(修复bug并提升性能)。通过systemd创建Kafka和Zookeeper服务,实现开机自启:
/etc/systemd/system/zookeeper.service):[Unit]
Description=Zookeeper Service
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/kafka.service):[Unit]
Description=Apache Kafka Server
After=zookeeper.service
[Service]
Type=forking
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable zookeeper kafka
sudo systemctl start zookeeper kafka