一、环境准备:基础依赖与用户配置
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清理过期日志,避免磁盘空间耗尽。