一、环境准备:基础依赖与用户配置
sudo yum install -y java-1.8.0-openjdk-devel
java -version  # 验证安装(需显示1.8.0版本)
kafka用户并授权:sudo useradd kafka
sudo mkdir -p /opt/kafka/{data,logs}  # 创建数据与日志目录
sudo chown -R kafka:kafka /opt/kafka  # 赋予所有权
二、Kafka核心配置:server.properties关键参数
编辑/opt/kafka/config/server.properties,设置以下核心参数以保障稳定性:
broker.id=1(集群中每个节点唯一);listeners=PLAINTEXT://your_server_ip:9092(监听所有网卡);advertised.listeners=PLAINTEXT://your_server_ip:9092(对外暴露地址,供客户端连接)。log.dirs=/opt/kafka/data(日志存储目录,建议用独立磁盘);zookeeper.connect=your_zookeeper_ip:2181(Zookeeper集群地址,多节点用逗号分隔,如ip1:2181,ip2:2181)。default.replication.factor=3(默认副本数,生产环境建议≥3);min.insync.replicas=2(最小同步副本数,确保数据写入多数副本才返回成功);unclean.leader.election.enable=false(禁止非ISR副本成为Leader,避免数据丢失)。num.partitions=3(默认分区数,根据并发需求调整,建议≥CPU核心数);log.retention.hours=168(日志保留7天,可根据业务需求调整);message.max.bytes=10485760(单条消息最大10MB,适配业务消息大小)。三、Zookeeper配置:集群高可用保障 Kafka依赖Zookeeper管理集群元数据,需先部署Zookeeper集群(建议3/5节点):
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz
tar -zxvf apache-zookeeper-3.8.1-bin.tar.gz -C /opt/
mv /opt/apache-zookeeper-3.8.1-bin /opt/zookeeper
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
echo "dataDir=/opt/zookeeper/data" >> /opt/zookeeper/conf/zoo.cfg
echo "clientPort=2181" >> /opt/zookeeper/conf/zoo.cfg
echo "server.1=zoo1_ip:2888:3888" >> /opt/zookeeper/conf/zoo.cfg  # 多节点配置
echo "server.2=zoo2_ip:2888:3888" >> /opt/zookeeper/conf/zoo.cfg
echo "server.3=zoo3_ip:2888:3888" >> /opt/zookeeper/conf/zoo.cfg
cd /opt/zookeeper/bin
./zkServer.sh start  # 启动服务
./zkServer.sh status # 检查状态(Leader/Follower)
四、开机自启动:systemd服务配置 通过systemd实现Kafka自动启动,避免手动操作:
sudo vi /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.target  # 依赖网络和Zookeeper
[Service]
Type=simple
User=kafka
Group=kafka
Environment="KAFKA_LOG_DIRS=/opt/kafka/logs"
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=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
sudo systemctl status kafka  # 检查状态(需显示active(running))
五、性能优化:关键调优项
sudo swapoff -a
sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab  # 永久关闭
echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" | sudo tee -a /etc/sysctl.conf
echo "vm.dirty_ratio=10" | sudo tee -a /etc/sysctl.conf
echo "fs.file-max=1000000" | sudo tee -a /etc/sysctl.conf
echo "net.core.somaxconn=1024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p  # 生效配置
echo "kafka hard nofile 1000000" | sudo tee -a /etc/security/limits.conf
echo "kafka soft nofile 1000000" | sudo tee -a /etc/security/limits.conf
num.network.threads=8(CPU核数+1);num.io.threads=16(CPU核数×2)。log.flush.interval.messages=10000(每1万条消息刷新一次);log.flush.interval.ms=1000(每1秒刷新一次)。log.dirs指向SSD挂载目录,提升IO吞吐量。六、监控与维护:保障长期稳定
kafka-topics.sh --describe --bootstrap-server localhost:9092(检查Leader/ISR数量);kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group your_group(查看LAG值);tail -f /opt/kafka/logs/server.log(实时查看Kafka运行日志)。kafka_server_BrokerTopicMetrics_MessagesInPerSec、kafka_server_ReplicaManager_UnderReplicatedPartitions),实现可视化监控与告警。log.retention.hours调整保留时间,或定期执行kafka-log-dirs.sh --clean清理过期日志,避免磁盘空间耗尽。