Docker 下创建Kafka

本文介绍如何使用Docker快速部署Kafka和ZooKeeper。通过下载镜像并设置必要的环境变量,实现两者的顺利启动。适用于希望快速搭建消息传递系统的开发者。

1、下载镜像

这里使用了wurstmeister/kafkawurstmeister/zookeeper这两个版本的镜像

[html]  view plain  copy
  1. docker pull wurstmeister/zookeeper  
[html]  view plain  copy
  1. docker pull wurstmeister/kafka  
在命令中运行docker images验证两个镜像已经安装完毕


2、启动

1、启动zookeeper

[html]  view plain  copy
  1. docker run -d --name zookeeper -p 2181 -t wurstmeister/zookeeper  
2、启动kafka

[html]  view plain  copy
  1. docker run --name kafka -e HOST_IP=localhost -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_BROKER_ID=1 -e ZK=zk -p 9092 --link zookeeper:zk -t wurstmeister/kafka  

可以通过docker ps查看启动状态

如果这里新版本的kafka启动报错,可以运行一下两个命令之一:

1 docker run 

--name kafka 

-e HOST_IP=【kafkaIP】 

-e KAFKA_ADVERTISED_PORT=9092 

-e KAFKA_BROKER_ID=1 

-e ZK=zk 

-e KAFKA_ZOOKEEPER_CONNECT=【zookeeper IP:PORT】 

-e KAFKA_LISTENERS=PLAINTEXT://【kafka IP:PORT】 

-p 9092 

--link zookeeper:zk 

-t wurstmeister/kafka 

或者

2 docker run 

-d 

--name kafka 

--publish 9092:9092 

--link zookeeper 

--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 

--env KAFKA_ADVERTISED_HOST_NAME=【kafkaIP】

--env KAFKA_ADVERTISED_PORT=9092 

--volume /etc/localtime:/etc/localtime 

wurstmeister/kafka

<think>我们使用Docker Compose来创建Kafka集群,包括Zookeeper和多个Kafka节点(这里以3个节点为例)。 步骤: 1. 创建一个docker-compose.yml文件 2. 配置Zookeeper服务(Kafka依赖Zookeeper进行集群协调) 3. 配置多个Kafka服务(每个Kafka服务对应一个broker),并设置它们连接到同一个Zookeeper 4. 设置必要的环境变量,如Kafka的broker id、监听地址、Zookeeper连接地址等 以下是一个示例的docker-compose.yml文件内容:</think>### 使用 Docker 创建 Kafka 集群的完整指南 以下是基于 Docker 搭建 Kafka 集群的详细步骤和配置,支持多节点高可用部署(以 3 节点集群为例): --- #### 1. **创建 Docker Compose 文件** 创建 `docker-compose.yml` 文件,配置 Zookeeper + Kafka 集群: ```yaml version: '3.8' services: zookeeper: image: bitnami/zookeeper:3.9 container_name: zookeeper ports: - "2181:2181" environment: ALLOW_ANONYMOUS_LOGIN: "yes" # 允许匿名访问 volumes: - zookeeper_data:/bitnami/zookeeper kafka1: image: bitnami/kafka:3.7 container_name: kafka-1 ports: - "9092:9092" environment: KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181 # 连接Zookeeper KAFKA_CFG_LISTENERS: PLAINTEXT://:9092 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092 KAFKA_CFG_BROKER_ID: 1 # Broker唯一ID ALLOW_PLAINTEXT_LISTENER: "yes" # 允许明文通信 volumes: - kafka1_data:/bitnami/kafka depends_on: - zookeeper kafka2: image: bitnami/kafka:3.7 container_name: kafka-2 ports: - "9093:9093" environment: KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CFG_LISTENERS: PLAINTEXT://:9093 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093 KAFKA_CFG_BROKER_ID: 2 ALLOW_PLAINTEXT_LISTENER: "yes" volumes: - kafka2_data:/bitnami/kafka depends_on: - zookeeper kafka3: image: bitnami/kafka:3.7 container_name: kafka-3 ports: - "9094:9094" environment: KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CFG_LISTENERS: PLAINTEXT://:9094 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094 KAFKA_CFG_BROKER_ID: 3 ALLOW_PLAINTEXT_LISTENER: "yes" volumes: - kafka3_data:/bitnami/kafka depends_on: - zookeeper volumes: zookeeper_data: kafka1_data: kafka2_data: kafka3_data: ``` --- #### 2. **启动集群** 在包含 `docker-compose.yml` 的目录中执行: ```bash # 启动集群 docker-compose up -d # 验证容器状态 docker ps -a | grep -E "zookeeper|kafka-" ``` 输出应显示 4 个运行中的容器(1 Zookeeper + 3 Kafka)[^1][^2]。 --- #### 3. **验证集群状态** 进入 Kafka 容器执行管理命令: ```bash # 进入任意 Kafka 容器 docker exec -it kafka-1 bash # 查看 Broker 列表 bin/kafka-broker-api-versions.sh --bootstrap-server kafka1:9092 # 创建测试主题(3分区+2副本) bin/kafka-topics.sh --create \ --bootstrap-server kafka1:9092 \ --topic test-topic \ --partitions 3 \ --replication-factor 2 # 查看主题详情 bin/kafka-topics.sh --describe \ --bootstrap-server kafka1:9092 \ --topic test-topic ``` 成功输出应显示分区均匀分布在多个 Broker 上[^3]。 --- #### 4. **集群管理脚本** 创建启停脚本提高效率: - **启动集群** (`start_cluster.sh`): ```bash #!/bin/bash docker-compose up -d echo "Kafka cluster started" ``` - **停止集群** (`stop_cluster.sh`): ```bash #!/bin/bash docker-compose down echo "Kafka cluster stopped" ``` 赋予执行权限:`chmod +x *.sh` --- ### 关键配置说明 1. **网络配置** - 每个 Kafka 节点需配置唯一端口(9092/9093/9094) - `advertised.listeners` 必须与外部访问地址一致 2. **数据持久化** 通过 `volumes` 声明数据卷,避免容器重启丢失数据 3. **高可用保障** - 副本数(replication-factor)建议设为 $\geq 2$ - 分区数(partitions)根据业务需求设置 > **安全增强建议**:生产环境需添加: > - SASL 认证:设置 `KAFKA_CFG_SASL_ENABLED_MECHANISMS` > - SSL 加密:配置 `KAFKA_CFG_SSL_*` 参数 > - ACL 权限控制:通过 `kafka-acls.sh` 管理 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值