温馨提示×

kafka在centos如何稳定配置

小樊
43
2025-09-17 21:47:37
栏目: 智能运维

一、环境准备:基础依赖与用户配置

  1. 安装JDK:Kafka依赖Java 8+运行,使用OpenJDK简化部署:
    sudo yum install -y java-1.8.0-openjdk-devel java -version # 验证安装(需显示1.8.0版本) 
  2. 创建专用用户:避免权限问题,创建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(对外暴露地址,供客户端连接)。
  • 数据与Zookeeper
    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节点):

  1. 下载与解压
    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 
  2. 配置zoo.cfg
    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 
  3. 启动Zookeeper
    cd /opt/zookeeper/bin ./zkServer.sh start # 启动服务 ./zkServer.sh status # 检查状态(Leader/Follower) 

四、开机自启动:systemd服务配置 通过systemd实现Kafka自动启动,避免手动操作:

  1. 创建服务文件
    sudo vi /etc/systemd/system/kafka.service 
  2. 添加以下内容
    [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 
  3. 启用并启动服务
    sudo systemctl daemon-reload sudo systemctl enable kafka sudo systemctl start kafka sudo systemctl status kafka # 检查状态(需显示active(running)) 

五、性能优化:关键调优项

  1. 操作系统优化
    • 关闭swap(避免磁盘IO拖慢性能):
      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 
  2. Kafka Broker配置
    • 调整线程池(提升并发处理能力):
      num.network.threads=8(CPU核数+1);
      num.io.threads=16(CPU核数×2)。
    • 优化日志刷新(平衡性能与可靠性):
      log.flush.interval.messages=10000(每1万条消息刷新一次);
      log.flush.interval.ms=1000(每1秒刷新一次)。
    • 使用高性能磁盘(SSD优先):将log.dirs指向SSD挂载目录,提升IO吞吐量。

六、监控与维护:保障长期稳定

  1. 常用命令监控
    • 查看集群状态: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运行日志)。
  2. 第三方监控工具
    推荐使用Prometheus+Grafana组合,采集Kafka的JMX指标(如kafka_server_BrokerTopicMetrics_MessagesInPerSeckafka_server_ReplicaManager_UnderReplicatedPartitions),实现可视化监控与告警。
  3. 日志清理
    Kafka默认保留7天日志,可通过log.retention.hours调整保留时间,或定期执行kafka-log-dirs.sh --clean清理过期日志,避免磁盘空间耗尽。

0