在Ubuntu上稳定运行Kafka的关键步骤与优化措施
安装Java环境
Kafka依赖Java运行,推荐使用OpenJDK 11(兼容性更好),安装命令:
sudo apt update && sudo apt install -y openjdk-11-jdk
验证安装:java -version(需显示Java 11版本信息)。
安装并配置ZooKeeper
Kafka通过ZooKeeper管理集群元数据(如Broker注册、Topic分区信息),需先部署ZooKeeper:
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6-bin.tar.gz
tar -xzf apache-zookeeper-3.8.6-bin.tar.gz -C /opt/
mv /opt/apache-zookeeper-3.8.6-bin /opt/zookeeper
/opt/zookeeper/conf/zoo.cfg):dataDir=/var/lib/zookeeper # 数据目录(需提前创建并授权)
clientPort=2181 # 客户端连接端口
sudo mkdir -p /var/lib/zookeeper
sudo chown -R $(whoami):$(whoami) /opt/zookeeper /var/lib/zookeeper
/opt/zookeeper/bin/zkServer.sh start
验证状态:/opt/zookeeper/bin/zkServer.sh status(需显示“Mode: standalone”)。
下载并解压Kafka
从Apache官网下载最新稳定版本(如3.7.0),解压至/opt/目录:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz -C /opt/
mv /opt/kafka_2.13-3.7.0 /opt/kafka
配置Kafka Broker(编辑/opt/kafka/config/server.properties)
broker.id=0(集群中每个Broker需不同);listeners=PLAINTEXT://your_server_ip:9092(替换为服务器IP,允许远程访问);zookeeper.connect=localhost:2181(若ZooKeeper在远程服务器,替换为对应IP);log.dirs=/var/lib/kafka(需提前创建并授权:sudo mkdir -p /var/lib/kafka && sudo chown -R $(whoami):$(whoami) /opt/kafka /var/lib/kafka);default.replication.factor=2(Topic副本数≥2,防止单点故障)、min.insync.replicas=2(写入时需至少2个副本确认,保证数据可靠性)。手动启动(测试用)
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties &
验证运行状态:tail -f /opt/kafka/logs/server.log(查看日志无报错)。
设置为Systemd服务(生产环境推荐)
/etc/systemd/system/kafka.service):[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
After=network.target zookeeper.service # 依赖ZooKeeper服务
[Service]
Type=simple
User=$(whoami)
Group=$(whoami)
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure # 失败时自动重启
RestartSec=10s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
验证服务状态:sudo systemctl status kafka(需显示“active (running)”)。
num.network.threads=4(网络请求处理线程数,建议设置为CPU核心数+1);num.io.threads=8(磁盘I/O线程数,建议设置为CPU核心数×2)。log.retention.hours=72(消息保留时间,根据业务需求调整,避免磁盘爆满);log.segment.bytes=1073741824(日志段大小,设置为1GB,提升日志滚动效率);log.flush.interval.messages=100000、log.flush.interval.ms=1000(平衡数据可靠性与性能,避免频繁刷盘)。num.replica.fetchers=2(副本同步线程数,提升副本同步效率);replica.lag.time.max.ms=10000(副本同步超时时间,避免因网络延迟导致副本失效)。compression.type=lz4(启用LZ4压缩,减少网络传输与存储开销,压缩比约3-4倍);batch.size=16384(批量发送大小,设置为16KB,提升吞吐量);linger.ms=5(等待批量发送的时间,平衡延迟与吞吐量)。fetch.min.bytes=1048576(每次拉取的最小数据量,设置为1MB,减少网络交互次数);max.poll.records=500(每次poll的最大记录数,提升批量处理效率)。kafka-configs.sh调整log.retention.hours)、每月检查磁盘健康状态(使用smartctl工具)、每季度升级Kafka版本(修复已知Bug,提升性能)。server.properties配置(如log.dirs是否存在、zookeeper.connect是否可达)、查看日志文件(/opt/kafka/logs/server.log)中的报错信息;advertised.listeners配置(确保客户端能访问Broker的地址);default.replication.factor(需≥2)、min.insync.replicas(需≥2)、acks=all(生产者确认模式,确保消息写入所有副本)。通过以上步骤,可在Ubuntu上搭建一个稳定、高性能的Kafka集群,满足生产环境的需求。