docker-kafka安装
安装 zookeeper
docker search zookeeper
# 默认安装最新版本
docker pull wurstmeister/zookeeper
安装 kafka cluster
docker search kafka
docker pull wurstmeister/kafka
启动 zookeeper
docker run -d --name zookeeper -p 2181:2181 -e TZ="Asia/Shanghai" -t wurstmeister/zookeeper
查询zookeeper ip地址
(base) ~ $ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether f8:4d:89:85:fd:fb
inet6 fe80::45b:8c1f:95b2:4976%en0 prefixlen 64 secured scopeid 0xe
inet 172.16.0.235 netmask 0xfffffc00 broadcast 172.16.3.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
查询本机 ip 地址,让容器间可以相互通信。
启动 broker
# kafka0
docker run -d --name kafka0 -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.235:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.235:9092 -e KAFKA_LISTENERS=PLAINTEXT://:9092 -e TZ="Asia/Shanghai" -t wurstmeister/kafka
# kafka1
docker run -d --name kafka1 -p 9093:9093 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.235:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.235:9093 -e KAFKA_LISTENERS=PLAINTEXT://:9093 -e TZ="Asia/Shanghai" -t wurstmeister/kafka
# kafka2
docker run -d --name kafka2 -p 9094:9094 -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.235:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.235:9094 -e KAFKA_LISTENERS=PLAINTEXT://:9094 -e TZ="Asia/Shanghai" -t wurstmeister/kafka
参数:
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机IP地址>:9092
KAFKA_ZOOKEEPER_CONNECT=<zookeeperIP地址>:2181
–network 指定的网络
-p:设置映射端口(默认2181)
-d:后台启动
KAFKA_BROKER_ID=0 kafka的broker的ID号,在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
KAFKA_ZOOKEEPER_CONNECT 配置zookeeper管理kafka的路径
KAFKA_ADVERTISED_LISTENERS 把kafka的地址端口注册给zookeeper,一般是本身 ip 地址
KAFKA_LISTENERS 配置kafka的监听端口,一般为本身 ip 地址
查看
(base) ~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc8d7dfb97ce wurstmeister/kafka "start-kafka.sh" 39 minutes ago Up 39 minutes 0.0.0.0:9094->9094/tcp kafka2
be8bf68caf63 wurstmeister/kafka "start-kafka.sh" 39 minutes ago Up 39 minutes 0.0.0.0:9093->9093/tcp kafka1
82b508bb8775 wurstmeister/kafka "start-kafka.sh" 42 minutes ago Up 42 minutes 0.0.0.0:9092->9092/tcp kafka0
325bfe235efc wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 43 minutes ago Up 43 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp zookeeper
使用脚本创建
version: "3"
services:
zookeeper:
image: zookeeper
build:
context: ./
container_name: zookeeper
ports:
- 2181:2181
volumes:
- ./data/zookeeper/data:/data
- ./data/zookeeper/datalog:/datalog
- ./data/zookeeper/logs:/logs
restart: always
kafka_node_0:
depends_on:
- zookeeper
build:
context: ./
container_name: kafka-node-0
image: wurstmeister/kafka
environment:
KAFKA_BROKER_ID: 0
KAFKA_ZOOKEEPER_CONNECT: 172.16.0.235:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.235:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
ports:
- 9092:9092
volumes:
- ./data/kafka/node_0:/kafka
restart: unless-stopped
kafka_node_1:
depends_on:
- kafka_node_0
build:
context: ./
container_name: kafka-node-1
image: wurstmeister/kafka
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 172.16.0.235:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.235:9093
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
ports:
- 9093:9093
volumes:
- ./data/kafka/node_1:/kafka
restart: unless-stopped
kafka_node_2:
depends_on:
- kafka_node_1
build:
context: ./
container_name: kafka-node-2
image: wurstmeister/kafka
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: 172.16.0.235:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.0.235:9094
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
ports:
- 9094:9094
volumes:
- ./data/kafka/node_2:/kafka
restart: unless-stopped
目录:
- docker-compose.yaml
- data
- zookeeper
- kafka
- node_1
- node_2
- node_3
在最外层目录使用
docker-compose up -d
即可