1、拉取zookeeper和kafka镜像
docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper
2、启动服务
先启动zookeeper再启动kafka
#启动zookeeper
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
#启动kafka 注:此处的ip更换成自己的ip
docker run --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.187.101:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.187.101:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-d wurstmeister/kafka
3、使用kafka
#进入kafka容器内部
docker exec -it kafka /bin/sh
cd /opt/kafka_2.13-2.8.1/bin
#运行kafka生产者发送消息
./kafka-console-producer.sh --broker-list localhost:9092 --topic sun
#新开窗口,运行kafka接收消息
/opt/kafka_2.13-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic sun --from-beginning
#查看topic
./kafka-topics.sh --zookeeper 192.168.187.101:2181 --list
#删除topic
./kafka-topics.sh --delete --zookeeper 192.168.187.101:2181 --topic sun
ctrl+c退出生产者消费者模式,exit退出容器
4、docker-compose部署kafka
新建docker-compose文件
version: '3.1'
services:
zookepper:
image: zookeeper # 原镜像`zookeeper`
hostname: "zookeeper.local"
container_name: zookeeper # 容器名为'zookeeper'
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
ports: # 映射端口
- "2181:2181"
networks: # 设置网络别名
local:
aliases:
- "zookeeper.local"
kafka:
image: wurstmeister/kafka # 原镜像`wurstmeister/kafka`
hostname: "kafka.local"
container_name: kafka # 容器名为'kafka'
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
environment: # 设置环境变量,相当于docker run命令中的-e
KAFKA_ADVERTISED_HOST_NAME: kafka.local # 本机IP
KAFKA_ADVERTISED_PORT: 9092 # 端口
KAFKA_BROKER_ID: 0 # 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://todo:9092 # TODO 将kafka的地址端口注册给zookeeper
KAFKA_LISTENERS: PLAINTEXT://:9092 # 配置kafka的监听端口
KAFKA_ZOOKEEPER_CONNECT: todo:2181 # TODO zookeeper地址
KAFKA_CREATE_TOPICS: "hello_world"
ports: # 映射端口
- "9092:9092"
networks: # 设置网络别名
local:
aliases:
- "kafka.local"
depends_on: # 解决容器依赖启动先后问题
- zookepper
# 设置网络,名为local
networks:
local:
driver: bridge
在当前yml文件下运行 docker-compose up -d 即可