docker安装kafka集群 - 副本
发布时间 2023-07-07 00:51:34作者: 张Blog
## 搭建docker基本环境
搭建docker环境非本处详细讲解, 了解或查阅资料即可
## 拉取镜像(zookeeper以及kafka的)
```bash
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
```
## 启动启动zookeeper容器
```text
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
```
- `docker run`: 运行一个新的容器。
- `-d`: 指定容器在后台以守护进程模式运行。
- `--name zookeeper`: 为容器指定一个名称,即 "zookeeper"。
- `-p 2181:2181`: 将容器的 2181 端口映射到宿主机的 2181 端口。格式为 `<宿主机端口>:<容器端口>`。
- `-t`: 分配一个伪终端(pseudo-TTY)。
- `wurstmeister/zookeeper`: 使用 wurstmeister/zookeeper 镜像创建容器。
## 启动启动kafka容器
> 宿主机ip需要以实际为准, 不能使用localhost的原因为: docker各个容器的网络是相互通的, 所以需要将docker内部的接口映射到宿主机上, 然后实现各个容器之间的相互访问
```bash
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=<宿主机ip>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机ip>:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
docker run -d --name kafka1 -p 9093:9093 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=<宿主机ip>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机ip>:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -t wurstmeister/kafka
docker run -d --name kafka2 -p 9094:9094 -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=<宿主机ip>:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机ip>:9094 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9094 -t wurstmeister/kafka
```
- `docker run`: 运行一个新的容器。
- `-d`: 指定容器在后台以守护进程模式运行。
- `--name kafka`: 为容器指定一个名称,即 "kafka"。
- `-p 9092:9092`: 将容器的 9092 端口映射到宿主机的 9092 端口。格式为 `<宿主机端口>:<容器端口>`。
- `-e KAFKA_BROKER_ID=0`: 设置 Kafka Broker 的唯一标识符为 0。
- `-e KAFKA_ZOOKEEPER_CONNECT=<宿主机ip>:2181`: 指定与 ZooKeeper 的连接地址,其中 `<宿主机ip>` 需要替换为实际的宿主机 IP 地址。
- `-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机ip>`: 设置 Kafka 的广告监听器地址,用于外部访问,其中 `<宿主机ip>` 需要替换为实际的宿主机 IP 地址。
- `-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092`: 设置 Kafka 的监听器地址,允许从任意地址访问 Kafka,监听 9092 端口。
- `-t`: 分配一个伪终端(pseudo-TTY)。
- `wurstmeister/kafka`: 使用 wurstmeister/kafka 镜像创建容器。
## 创建和查看 topic ,ip改为宿主机器的IP地址
> 创建Replication为2,Partition为2的topic(容器目录opt/kafka_2.11-2.0.0/中执行)
```text
bin/kafka-topics.sh --create --zookeeper <宿主机ip>:2181 --replication-factor 2 --partitions 2 --topic <主题名称>
```
> 查看topic的状态(容器目录opt/kafka_2.11-2.0.0/中执行)Isr代表存活的备份机器中存活的。
```text
bin/kafka-topics.sh --describe --zookeeper <宿主机ip>:2181 --topic <主题名称>
```
> 查看所有的 topic 名字
```text
bin/kafka-topics.sh --bootstrap-server <宿主机ip>:9092 --list
```
## 发送测试 192.168.0.89:9092宿主机ip test_topic主题
> 启动消息发送方(容器目录opt/kafka_2.11-2.0.0/中执行)
```text
./bin/kafka-console-producer.sh --broker-list 192.168.0.89:9092 --topic test_topic
```
![image-20230703231121048](https://img2023.cnblogs.com/blog/2395785/202307/2395785-20230707004813697-1340988374.png)
> 启动消息接收方(容器目录opt/kafka_2.11-2.0.0/中执行)
```text
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.0.89:9092:9092 --topic test_topic --from-beginning
```
![image-20230703231054565](https://img2023.cnblogs.com/blog/2395785/202307/2395785-20230707004814467-652182519.png)