CentOS中Kafka配置技巧与最佳实践
sudo yum install java-1.8.0-openjdk-devel -y命令安装,安装后用java -version验证版本。dataDir(数据目录)、clientPort(客户端端口,如2181)等参数。firewall-cmd --zone=public --add-port=9092/tcp --permanent和firewall-cmd --reload命令生效,避免网络访问受阻。每个Kafka broker需设置唯一标识(broker.id),同一集群中不可重复(如broker.id=0、broker.id=1),用于区分不同节点。
listeners:指定broker监听的协议及本地地址(如listeners=SASL_PLAINTEXT://your_server_ip:9092),用于broker内部通信;advertised.listeners:指定客户端连接的地址(如advertised.listeners=SASL_PLAINTEXT://your_public_ip:9092),确保客户端能正确访问broker。设置Kafka日志存储目录(如log.dirs=/var/lib/kafka/logs),建议使用独立磁盘分区(而非系统盘),并配置多目录(如/disk1/kafka_logs,/disk2/kafka_logs)提升磁盘IO吞吐。
指定Zookeeper集群地址(如zookeeper.connect=zk1:2181,zk2:2181,zk3:2181),建议配置多个节点以保证高可用,避免单点故障。
ulimit -n 65536命令增大文件描述符限制,避免打开文件过多导致错误;vm.max_map_count=262144,避免Kafka日志段映射失败;replication.factor=3),提升并行处理能力和数据可靠性;num.io.threads为磁盘数量的2~3倍(如8~16),充分利用多磁盘IO能力;socket.send.buffer.bytes(如128KB)和socket.receive.buffer.bytes(如128KB),提升网络传输效率;log.segment.bytes为2~5GB,减少日志切换频率,降低IO开销。batch.size(如64KB~1MB)和linger.ms(如50ms~100ms),合并更多消息成批次发送,提升吞吐量;compression.type=lz4或snappy压缩算法,减少网络传输数据量(压缩率可达30%~50%);acks=all(所有副本确认,高可靠)或acks=1(Leader确认,平衡吞吐与可靠性),并设置retries=10(重试次数)和retry.backoff.ms=500(重试间隔)。fetch.min.bytes(如1MB)和max.poll.records(如500~1000),减少网络请求频率,提升消费效率;enable.auto.commit=false(手动提交偏移量),避免因消费者重启导致消息重复消费。security.inter.broker.protocol=SASL_PLAINTEXT、sasl.enabled.mechanisms=PLAIN),并创建kafka_server_jaas.conf文件配置用户名密码,通过export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"指定配置文件。ssl.keystore.location、ssl.truststore.location),启用listeners=SSL://your_server_ip:9093,提升数据传输安全性。使用systemd创建Kafka和Zookeeper服务单元文件(如/etc/systemd/system/kafka.service),内容如下:
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后执行systemctl daemon-reload、systemctl enable kafka、systemctl start kafka命令,实现开机自启。
kafka-topics.sh(创建/删除Topic)、kafka-console-producer.sh(生产者测试)、kafka-console-consumer.sh(消费者测试)等命令验证配置。log.retention.hours=168(保留7天日志)和log.cleanup.policy=delete(删除过期日志),避免磁盘空间耗尽。