ubuntu

Kafka如何在Ubuntu上高效配置

小樊
52
2025-09-19 21:07:01
栏目: 智能运维

一、基础环境准备

  1. 安装Java环境
    Kafka依赖Java运行,推荐使用OpenJDK 11(兼容性更好),安装命令:

    sudo apt update && sudo apt install openjdk-11-jdk -y
    

    验证安装:java -version(需显示Java版本信息)。

  2. 下载并解压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
    sudo mv /opt/kafka_2.13-3.7.0 /opt/kafka
    
  3. 配置Zookeeper
    Kafka 2.8+版本仍需Zookeeper管理元数据(后续可升级至Kafka Raft模式),配置步骤:

    • 创建数据目录:sudo mkdir -p /opt/zookeeper/data
    • 编辑配置文件/opt/zookeeper/conf/zoo.cfg,添加:
      dataDir=/opt/zookeeper/data
      clientPort=2181
      tickTime=2000
      initLimit=10
      syncLimit=5
      server.0=localhost:2888:3888  # 单机模式无需多节点,但需保留此配置
      
    • 启动Zookeeper:/opt/zookeeper/bin/zkServer.sh start
    • 验证状态:/opt/zookeeper/bin/zkServer.sh status(需显示“Mode: standalone”)。

二、Kafka Broker核心配置(server.properties 编辑/opt/kafka/config/server.properties,调整以下关键参数:

三、性能优化关键措施

  1. 操作系统层优化

    • 挂载选项:编辑/etc/fstab,为Kafka日志目录添加noatime(禁用访问时间更新,减少写操作):
      /dev/sdb1 /opt/kafka ext4 defaults,noatime 0 2
      
    • 文件系统:推荐使用XFS(高性能、高伸缩性),格式化命令:sudo mkfs.xfs /dev/sdb1
    • Swap空间:设置swappiness=1(减少内存交换,避免因swap导致的性能下降):
      echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf
      sudo sysctl -p
      
    • 页缓存:增大页缓存(至少容纳一个日志段,如1GB):
      echo 'vm.dirty_ratio=10' | sudo tee -a /etc/sysctl.conf
      echo 'vm.dirty_background_ratio=5' | sudo tee -a /etc/sysctl.conf
      sudo sysctl -p
      
  2. JVM层优化

    • 堆内存设置:分配6~8GB堆内存(避免过大导致Full GC),编辑/opt/kafka/bin/kafka-server-start.sh,在exec前添加:
      export KAFKA_HEAP_OPTS="-Xms6G -Xmx6G"
      
    • 垃圾回收器:使用G1GC(减少停顿时间),添加:
      export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"
      
  3. Kafka Broker参数优化

    • 线程池:根据CPU核数调整(如4核CPU):
      num.network.threads=6  # 网络线程数=CPU核数+1
      num.io.threads=12      # I/O线程数=CPU核数*2
      
    • 分区与副本:增加分区数(如num.partitions=8),提高并行处理能力;副本因子设为3(default.replication.factor=3),保证数据可靠性。
    • 批处理与压缩:增大批处理大小(batch.size=131072=128KB),减少网络请求次数;启用LZ4压缩(compression.type=lz4),降低带宽占用。

四、开机自启配置

  1. 创建Systemd服务文件
    编辑/etc/systemd/system/kafka.service

    [Unit]
    Description=Apache Kafka Server
    After=network.target zookeeper.service
    Requires=zookeeper.service
    
    [Service]
    Type=simple
    Environment="KAFKA_HOME=/opt/kafka"
    Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
    ExecStart=${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties
    ExecStop=${KAFKA_HOME}/bin/kafka-server-stop.sh
    User=kafka
    Group=kafka
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  2. 创建Zookeeper Systemd服务文件
    编辑/etc/systemd/system/zookeeper.service

    [Unit]
    Description=Apache ZooKeeper Server
    After=network.target
    
    [Service]
    Type=forking
    Environment="ZOOKEEPER_HOME=/opt/zookeeper"
    ExecStart=${ZOOKEEPER_HOME}/bin/zkServer.sh start
    ExecStop=${ZOOKEEPER_HOME}/bin/zkServer.sh stop
    User=zookeeper
    Group=zookeeper
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  3. 启用并启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable zookeeper kafka
    sudo systemctl start zookeeper kafka
    

五、验证配置

  1. 创建Topic

    /opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 8 --replication-factor 1
    
  2. 测试生产与消费

    • 启动生产者:/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
    • 启动消费者:/opt/kafka/bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning
      输入消息后,消费者应能实时接收,验证Kafka正常运行。

0
看了该问题的人还看了