找回密码
 立即注册
首页 业界区 业界 docker-compose 部署单节点 kafka 4.0 测试环境 ...

docker-compose 部署单节点 kafka 4.0 测试环境

左优扬 4 天前
高版本kafka已经不再需要ZooKeeper当保姆才能启动了,现在部署一个单机单节点测试环境比原来方便不少。
不过最常用的bitnami/kafka不再提供免费镜像,导致我们只能用apache/kafka,新镜像的配置会稍微麻烦一些,所以记录一下。
部署内容:

  • 单节点kafka服务,版本4.0+
  • kafka UI,方便管理,版本用最新的
  • 开启简单的用户名密码验证
docker-compose文件:
  1. version: '3'
  2. networks:
  3.   kafka-net:
  4. services:
  5.   kafka:
  6.     image: apache/kafka:latest
  7.     container_name: kafka
  8.     networks:
  9.       - kafka-net
  10.     ports:
  11.       - "9092:9092"
  12.     volumes:
  13.       - ./kafka_data:/var/lib/kafka/data
  14.       - ./kafka_server_jaas.conf:/etc/kafka/kafka_server_jaas.conf # 配置用户名密码
  15.     environment:
  16.       KAFKA_NODE_ID: 1
  17.       KAFKA_PROCESS_ROLES: 'broker,controller'
  18.       KAFKA_CONTROLLER_QUORUM_VOTERS: '1@localhost:9093'
  19.       KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
  20.       
  21.       # 定义监听器:EXTERNAL(9092) 走 SASL 认证,PLAINTEXT(29092) 给容器内用(这里也改为 SASL 确保安全)
  22.       KAFKA_LISTENERS: 'SASL_PLAINTEXT://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093'
  23.       KAFKA_ADVERTISED_LISTENERS: 'SASL_PLAINTEXT://kafka:29092,EXTERNAL://localhost:9092'
  24.       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT'
  25.       KAFKA_INTER_BROKER_LISTENER_NAME: 'SASL_PLAINTEXT'
  26.       
  27.       # SASL/PLAIN 认证配置
  28.       KAFKA_SASL_ENABLED_MECHANISMS: 'PLAIN'
  29.       KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: 'PLAIN'
  30.       # 告诉 Kafka 读取我们的 JAAS 文件
  31.       KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
  32.       # 数据持久化
  33.       KAFKA_LOG_DIRS: '/var/lib/kafka/data'
  34.   kafka-ui:
  35.     image: provectuslabs/kafka-ui:latest
  36.     container_name: kafka-ui
  37.     depends_on:
  38.       - kafka
  39.     networks:
  40.       - kafka-net
  41.     ports:
  42.       # 映射到8090,因为8080一般还得挂其他的服务做测试
  43.       - "8090:8080"
  44.     environment:
  45.       KAFKA_CLUSTERS_0_NAME: local
  46.       KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
  47.       # 配置 UI 使用用户名和密码连接 Kafka
  48.       KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL: SASL_PLAINTEXT
  49.       KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAIN
  50.       KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="你配置的用户名" password="你配置的密码";'
复制代码
配置文件里输入用户和密码:
  1. KafkaServer {
  2.     org.apache.kafka.common.security.plain.PlainLoginModule required
  3.     username="节点在集群内通信时的用户名"
  4.     password="节点在集群内通信时的密码"
  5.     # 下面这些才是用户配置
  6.     # 格式user_<用户名>="密码"
  7.     user_apot="你配置的密码";
  8. };
复制代码
创建好文件和目录之后用docker-compose up -d就能启动服务了。访问localhost:8090可以看到kafka的web控制面板:
1.png

安装好之后可以用下面的命令查看版本:
  1. $ docker exec -it kafka /opt/kafka/bin/kafka-server-start.sh --version
  2. [2025-12-29 11:08:34,595] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
  3. 4.0.0
复制代码
可以看到已经配置好了kafka 4.0环境。
apache/kafka的镜像里内置了各种操作kafka的脚本,不过这些脚本没被添加进$PATH,执行的时候需要指定路径:
[code]# 先配置登录验证信息docker exec -it kafka bash -c "cat

相关推荐

您需要登录后才可以回帖 登录 | 立即注册