docker单机部署kafka
docker单机部署kafka
官方镜像地址:apache/kafka - Docker 镜像 |Docker 中心
官方给的命令,部署之后,用工具访问不了:
services:
broker:
image: apache/kafka:latest
container_name: broker
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_NUM_PARTITIONS: 3
docker-compose文件,host模式:
services:
kafka:
image: apache/kafka:3.9.0 # 使用官方最新版 Kafka 镜像
container_name: kafka # 容器命名为 kafka
restart: always
ulimits:
nofile:
soft: 65536
hard: 65536
environment:
TZ: Asia/Shanghai
# 核心身份配置
KAFKA_NODE_ID: 1 # 节点唯一标识符(集群中不可重复)
KAFKA_PROCESS_ROLES: broker,controller # 同时扮演 Broker 和 Controller 角色
# 网络监听配置
KAFKA_LISTENERS: PLAINTEXT://192.168.0.238:9092,CONTROLLER://192.168.0.238:9093
# - PLAINTEXT 监听器用于客户端通信(生产者/消费者)
# - CONTROLLER 监听器用于集群内部通信
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.238:9092 # 对外暴露的地址
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER # 指定控制器监听器名称
# 安全协议映射(这里未启用加密)
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 集群仲裁配置(单节点模式)
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.0.238:9093
# 格式为 nodeId@host:port,这里只有自己一个投票节点
# 主题配置(单节点优化)
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # __consumer_offsets 副本数
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 # 事务日志副本数
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 # 最小同步副本数
# 消费者组优化
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 # 快速启动消费者组
KAFKA_NUM_PARTITIONS: 3 # 自动创建主题的默认分区数
volumes:
- ./data/kafka:/var/lib/kafka/data
- /etc/localtime:/etc/localtime:ro
network_mode: host # 使用宿主机网络模式,避免端口映射问题
docker-compose文件,桥接模式,桥接模式填写容器名称即可获取对应IP地址
services:
kafka:
image: apache/kafka:3.9.0 # 使用官方最新版 Kafka 镜像
container_name: kafka # 容器命名为 kafka
restart: always
ulimits:
nofile:
soft: 65536
hard: 65536
ports:
- "9092:9092"
- "9093:9093"
environment:
TZ: Asia/Shanghai
# 核心身份配置
KAFKA_NODE_ID: 1 # 节点唯一标识符(集群中不可重复)
KAFKA_PROCESS_ROLES: broker,controller # 同时扮演 Broker 和 Controller 角色
# 网络监听配置
KAFKA_LISTENERS: PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093
# - PLAINTEXT 监听器用于客户端通信(生产者/消费者)
# - CONTROLLER 监听器用于集群内部通信
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.238:9092 # 对外暴露的地址
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER # 指定控制器监听器名称
# 安全协议映射(这里未启用加密)
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 集群仲裁配置(单节点模式)
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.0.238:9093
# 格式为 nodeId@host:port,这里只有自己一个投票节点
# 主题配置(单节点优化)
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 # __consumer_offsets 副本数
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 # 事务日志副本数
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 # 最小同步副本数
# 消费者组优化
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 # 快速启动消费者组
KAFKA_NUM_PARTITIONS: 3 # 自动创建主题的默认分区数
volumes:
- /etc/localtime:/etc/localtime:ro
docker-compose文件,host模式配置账号密码:
services:
kafka:
image: apache/kafka:3.9.0
container_name: kafka
environment:
# Kafka 基本配置
KAFKA_NODE_ID: 1 # Kafka 节点 ID(单节点模式)
KAFKA_PROCESS_ROLES: broker,controller # 该节点既是 Broker 也是 Controller
# 监听器配置
KAFKA_LISTENERS: PLAINTEXT://192.168.0.238:9092,SASL_PLAINTEXT://192.168.0.238:9094,CONTROLLER://192.168.0.238:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.238:9092,SASL_PLAINTEXT://192.168.0.238:9094
# 监听器与安全协议映射
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER # 指定 Controller 监听器
# **关键修复:添加控制器仲裁配置**
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.0.238:9093
# 或者使用:
# KAFKA_CONTROLLER_QUORUM_BOOTSTRAP_SERVERS: 192.168.0.238:9093
# 启用 SASL 账号密码认证(使用 PLAIN 方式)
KAFKA_SASL_ENABLED_MECHANISMS: PLAIN
KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
# 指定 Kafka 服务器的 JAAS 认证文件
KAFKA_OPTS: "-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
volumes:
- ./kafka_server_jaas.conf:/opt/kafka/config/kafka_server_jaas.conf # 挂载认证配置文件
- ./data/kafka:/var/lib/kafka/data # 持久化 Kafka 数据,避免重启丢失
network_mode: host # 使用宿主机网络模式,避免端口映射问题
认证配置文件 kafka_server_jaas.conf
内容:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="youeran"
password="youeran-kafka-password"
user_admin="guest"
user_guest="guest-password";
};