温馨提示×

Kafka在Ubuntu上如何高效运行

小樊
34
2025-12-29 00:31:23
栏目: 智能运维

在 Ubuntu 上高效运行 Kafka 的实操清单

一 基础环境部署与快速验证

  • 安装 OpenJDK 11:sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
  • 部署元数据服务:可选择独立 Zookeeper(推荐 3 节点集群)或 KRaft 模式(Kafka 3.x 起内置,生产更简洁)。
  • 下载并解压 Kafka(示例版本 3.7.x)至 /opt/kafka;创建数据目录:sudo mkdir -p /var/lib/kafka/logs
  • 配置 server.properties:
    • broker.id(集群内唯一,如 0
    • listeners=PLAINTEXT://服务器IP:9092
    • advertised.listeners=PLAINTEXT://服务器IP:9092(对外可达地址)
    • log.dirs=/var/lib/kafka/logs
    • 若用 Zookeeper:zookeeper.connect=host1:2181,host2:2181,host3:2181
  • 快速验证:
    • 创建测试 Topic:/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
    • 生产消息:/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
    • 消费消息:/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

二 Broker 关键配置与并行度设计

  • 线程与网络:
    • num.network.threads:建议 CPU 逻辑核数×1~2(如 8 核→8~16
    • num.io.threads:建议 磁盘数×8CPU 核数×2(顺序 I/O 密集)
  • 批处理与压缩(Broker/主题级生效):
    • compression.type=lz4/snappy(低延迟/高吞吐)
  • 可靠性与可用性:
    • default.replication.factor=3(跨可用区更稳)
    • min.insync.replicas=2(写入需至少 2 个副本确认)
  • 磁盘与段管理:
    • log.dirs 指向 SSD/NVMe;log.segment.bytes=10737418241GB,减少索引开销)
    • 保留策略按业务设置:log.retention.hours=168(7 天)或更长;必要时配合 log.retention.bytes
  • 网络与请求:
    • socket.send.buffer.bytes / socket.receive.buffer.bytes=10485761MB
    • socket.request.max.bytes=104857600100MB,避免大消息阻塞)
  • 分区与并行度:
    • num.partitions(或主题级 partitions)≈ 消费者线程数×1.5~2,且为 Broker 数的整数倍,以均衡负载与扩展

三 生产者与消费者高效配置

  • 生产者(吞吐优先):
    • batch.size=10485761MB
    • linger.ms=100(合并小消息)
    • compression.type=lz4
    • acks=all(强可靠);若追求极致吞吐可设为 1(需权衡丢消息风险)
    • buffer.memory=3355443232MB
  • 消费者(稳定与效率):
    • fetch.min.bytes=10485761MB
    • fetch.max.wait.ms=1000(平衡延迟与吞吐)
    • max.poll.records=200~500(避免单次处理过慢触发 rebalance)
    • group.initial.rebalance.delay.ms=3000(减少启动/再均衡抖动)

四 Ubuntu 系统层面优化

  • 资源与内核:
    • 文件描述符:在 /etc/security/limits.conf 增加
        • soft nofile 100000;* hard nofile 100000;执行 ulimit -n 100000 即时生效
    • 虚拟内存与网络:
      • vm.swappiness=1;vm.max_map_count=262144
      • net.core.rmem_max / wmem_max=16777216;net.core.somaxconn=8192;net.ipv4.tcp_tw_reuse=1
  • 存储与挂载:
    • 日志目录使用 SSD/NVMe,挂载选项建议 noatime 减少元数据写入
  • JVM 建议(Kafka 启动脚本内设置):
    • KAFKA_HEAP_OPTS=“-Xms4G -Xmx4G”;-XX:+UseG1GC;-XX:MaxGCPauseMillis=20(按内存与负载调整)

五 服务化与监控维护

  • systemd 服务(示例):
    • Kafka:/etc/systemd/system/kafka.service(ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties;User=kafka;Restart=always
    • 若用独立 Zookeeper:/etc/systemd/system/zookeeper.service(Type=forking;ExecStart=/opt/zookeeper/bin/zkServer.sh start)
    • 启用:sudo systemctl daemon-reload && sudo systemctl enable --now zookeeper kafka
  • 监控与告警:
    • 关键指标:UnderReplicatedPartitionsRequestQueueTimeMsBytesIn/OutPerSec、生产/消费延迟与堆积
    • 方案:JMX 采集 + Prometheus + Grafana 看板,或 Kafka Exporter
  • 运维要点:
    • 合理设置保留策略与磁盘阈值告警,避免 磁盘打满
    • 定期巡检 未同步分区请求耗时网络/磁盘利用率
    • 版本升级遵循滚动升级策略,先在测试环境验证

0