温馨提示×

Ubuntu Kafka如何高效部署

小樊
34
2025-12-30 23:42:26
栏目: 智能运维

Ubuntu 上高效部署 Kafka 的实操指南

一 环境准备与安装

  • 安装 Java 11(推荐):sudo apt update && sudo apt install -y openjdk-11-jdk;验证:java -version。
  • 创建专用用户与目录:sudo adduser --system --no-create-home --disabled-password --disabled-login kafka;sudo mkdir -p /data/kafka /data/kafka-logs;sudo chown -R kafka:nogroup /data/kafka*。
  • 下载并解压 Kafka(示例为稳定版本):
    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
    sudo chown -R kafka:nogroup /opt/kafka。
  • 开放防火墙端口(Ubuntu):sudo ufw allow 9092/tcp;如启用外部访问,也放行 2181/tcp(Zookeeper)。

二 快速单机部署与验证

  • 启动 Zookeeper(前台调试):/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties;后台:/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties。
  • 配置 server.properties(单机示例):
    broker.id=0
    listeners=PLAINTEXT://:9092
    advertised.listeners=PLAINTEXT://localhost:9092(仅本机测试;远程请改为服务器可达 IP)
    log.dirs=/data/kafka-logs
    zookeeper.connect=localhost:2181
  • 启动 Kafka Broker(前台调试):/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties;后台:/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties。
  • 基本验证:
    创建 Topic:/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
    生产消息:/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
    消费消息:/opt/kafka/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092

三 集群部署与高可用

  • 规划与目录:准备 3 台Ubuntu 主机(示例 IP:192.168.1.11/12/13),每台创建目录 /data/kafka /data/kafka-logs 并赋权给 kafka
  • 配置 server.properties(各节点唯一):
    broker.id=0/1/2(每台不同)
    listeners=PLAINTEXT://:9092
    advertised.listeners=PLAINTEXT://<本机IP>:9092
    log.dirs=/data/kafka-logs
    zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
  • 启动顺序:先启动所有 Zookeeper 节点,再在各节点启动 Kafka
  • 验证集群:
    创建 Topic(副本因子不超过 Broker 数):/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server 192.168.1.11:9092 --partitions 3 --replication-factor 3
    生产/消费:
    /opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092
    /opt/kafka/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092
  • 防火墙:各节点放行 9092/tcp(Kafka)与 2181/tcp(Zookeeper)。

四 性能与稳定性优化

  • 系统层:优先使用 SSD;为 Kafka 数据盘设置 noop/ deadline I/O 调度;内核参数优化(如 vm.swappiness、文件句柄与网络参数)。
  • JVM 与内存:在 kafka-server-start.sh 中设置合适的堆大小,例如:export KAFKA_HEAP_OPTS=“-Xmx4G -Xms4G”(依据内存与负载调整)。
  • Broker 关键参数(server.properties):
    num.network.threads(网络 I/O 线程)与 num.io.threads(磁盘 I/O 线程)按 CPU 核数合理上调;
    log.flush.interval.messages / log.flush.interval.ms(权衡持久化与吞吐);
    批处理与拉取:batch.size、buffer.memory、linger.ms、fetch.min.bytes、fetch.max.wait.ms;
    日志保留:log.retention.hours / log.retention.bytes、log.segment.bytes;
    副本与容错:default.replication.factor、min.insync.replicas(建议 ≥ 2)、unclean.leader.election.enable=false。
  • 监控与告警:开启 JMX(如 export JMX_PORT=12345),结合 Prometheus + Grafana 监控吞吐、请求耗时、请求错误率、UnderReplicatedPartitions、Consumer Lag 等核心指标。

五 运维与自动化

  • systemd 服务示例(/etc/systemd/system/kafka.service):
    [Unit]
    Description=Apache Kafka server
    After=network.target zookeeper.service
    [Service]
    Type=simple
    User=kafka
    Group=nogroup
    Environment=“KAFKA_HOME=/opt/kafka”
    ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
    ExecStop=/opt/kafka/bin/kafka-server-stop.sh
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    启用:sudo systemctl daemon-reload && sudo systemctl enable --now kafka。
  • 日志与磁盘:配置 logrotate 或清理策略,避免日志无限增长;监控磁盘使用率并设置告警。
  • 安全加固(按需):启用 SSL/TLS 加密与 SASL 认证;限制外网访问,仅开放必要端口;为管理界面与 API 设置访问控制。
  • 升级与变更:遵循滚动升级策略,先扩容不裁撤,变更前备份配置与元数据,灰度验证后再全量发布。

0