温馨提示×

Debian系统如何简化Kafka配置

小樊
43
2025-12-29 21:21:57
栏目: 智能运维

Debian上简化Kafka配置的可复制方案

一 单节点极简部署步骤

  • 安装依赖并准备目录
    • 安装 OpenJDK 11:sudo apt update && sudo apt install -y openjdk-11-jdk
    • 创建专用用户与目录:sudo useradd -r -m -d /opt/kafka -s /sbin/nologin kafka;sudo mkdir -p /data/kafka/logs;sudo chown -R kafka:kafka /opt/kafka /data/kafka
  • 下载并解压 Kafka(示例版本:3.6.1
    • wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
    • tar -xzf kafka_2.13-3.6.1.tgz -C /opt/ && mv /opt/kafka_2.13-3.6.1 /opt/kafka
  • 配置环境变量
    • echo ‘export KAFKA_HOME=/opt/kafka’ | sudo tee -a /etc/profile
    • echo ‘export PATH=$PATH:$KAFKA_HOME/bin’ | sudo tee -a /etc/profile
    • source /etc/profile
  • systemd服务(Kraft模式,免Zookeeper)
    • 生成集群ID:KAFKA_CLUSTER_ID=$(/opt/kafka/bin/kafka-storage.sh random-uuid)
    • 格式化存储:/opt/kafka/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c /opt/kafka/config/kraft/server.properties
    • 创建服务文件 /etc/systemd/system/kafka.service(见下文“最小配置清单”),然后:
      • sudo systemctl daemon-reload && sudo systemctl enable --now kafka
  • 快速自检
    • 查看状态:systemctl status kafka
    • 列出Topic:/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    • 创建测试Topic:/opt/kafka/bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
    • 简单生产消费验证:/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

二 最小配置清单

  • server.properties(Kraft,单节点最简可用)
    • process.roles=broker,controller
    • node.id=1
    • controller.quorum.voters=1@localhost:9093
    • listeners=PLAINTEXT://:9092,CONTROLLER://:9093
    • listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
    • inter.broker.listener.name=PLAINTEXT
    • advertised.listeners=PLAINTEXT://你的服务器IP:9092
    • log.dirs=/data/kafka/logs
    • num.partitions=1
    • default.replication.factor=1
    • min.insync.replicas=1
    • unclean.leader.election.enable=false
  • kafka.service(systemd)
    • [Unit]
      • Description=Apache Kafka Server
      • After=network.target
    • [Service]
      • Type=simple
      • User=kafka
      • Group=kafka
      • ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
      • ExecStop=/opt/kafka/bin/kafka-server-stop.sh
      • Restart=on-failure
    • [Install]
      • WantedBy=multi-user.target
  • 如需使用传统Zookeeper模式(不推荐,仅作兼容)
    • server.properties 中设置:zookeeper.connect=localhost:2181
    • systemd 服务单元 After=network.target zookeeper.service

三 常用简化命令脚本

  • 一键启动/停止/重启
    • sudo systemctl start|stop|restart kafka
  • 创建Topic(开发环境)
    • /opt/kafka/bin/kafka-topics.sh --create --topic demo --partitions 3 --replication-factor 1 --bootstrap-server localhost:9092
  • 查看与自检
    • /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    • /opt/kafka/bin/kafka-topics.sh --describe --topic demo --bootstrap-server localhost:9092
    • /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group your-group
  • 日志查看
    • journalctl -u kafka -f
    • tail -f /opt/kafka/logs/server.log

四 安全与网络简化建议

  • 仅内网使用时,保持 PLAINTEXT,将 advertised.listeners 设为内网 IP:9092,避免误用公网地址
  • 需要加密与认证时,再启用 SASL/SSL(按需逐步开启,避免一次性引入过多参数)
    • 示例(SASL/PLAIN,server.properties 片段):
      • security.protocol=SASL_PLAINTEXT
      • sasl.mechanism=PLAIN
      • sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username=“admin” password=“admin-secret”;
    • 示例(SSL,server.properties 片段):
      • security.protocol=SSL
      • ssl.keystore.location=/path/to/keystore.jks
      • ssl.truststore.location=/path/to/truststore.jks
  • 防火墙仅放行 9092(Kraft)与(若使用)2181(Zookeeper)

五 常见问题快速排查

  • 远程连不上:确认 advertised.listeners 为服务器真实 IP 而非 localhost;云主机需放通安全组 9092
  • 启动失败:检查 log.dirs 目录权限(属主 kafka:kafka)、端口是否被占用(ss -ltnp | grep 9092)
  • 分区不足导致并行度不够:开发/测试可适当提高 num.partitions(如设为 36
  • 需要更可靠:在创建Topic时将 replication-factor≥3min.insync.replicas=2,并开启 acks=all(生产环境推荐)

0