最近在搞数据采集相关项目,需要把数据发到Kafka,于是就自己搭建开发环境咯。 使用 wurstmeister/kafka 镜像。期间遇到各种问题,大多数都是跨网段无法访问Kafka。
Docker version 20.10.5 docker-compose version 1.28.6
docker-compose.yml
version: '2'
services:
zookeeper:
container_name: zookeeper_0
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka0:
container_name: kafka_0
restart: unless-stopped
image: wurstmeister/kafka:2.13-2.6.0
ports:
- "9082:9082"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://192.168.10.61:9082
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9082
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper
kafka1:
container_name: kafka_1
restart: unless-stopped
image: wurstmeister/kafka:2.13-2.6.0
ports:
- "9083:9083"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://192.168.10.61:9083
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9083
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper
kafka2:
container_name: kafka_2
restart: unless-stopped
image: wurstmeister/kafka:2.13-2.6.0
ports:
- "9084:9084"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://192.168.10.61:9084
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9084
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper
需要注意的问题是: 容器起来后发送消息会出现 LEADER_NOT_AVAILABLE 选举失败,此时只要重启ZK服务即可 192.168.10.61 绑定的宿主机地址,双网卡情况下可以随意选一个网卡IP,看外网访问需求