前言:
最近有个项目,需要用到队列,就选了kafka,生产环境不用操心,但需要自己搭个测试环境
安装
我装的是wurstmeister/kafka,这是官方的 安装教程。我用的是推荐的方式,docker-compose,这是我的配置文件
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
# KAFKA_ADVERTISED_HOST_NAME: 172.18.66.56
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# KAFKA_ADVERTISED_PORT: 9092
KAFKA_BROKER_ID: 0
KAFKA_CREATE_TOPICS: "cms:1:1,api:1:1"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://47.74.211.71:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
volumes:
- /var/run/docker.sock:/var/run/docker.sock
里面的47.74.211.71是我的谷歌云上的一台云服务器的公网地址,上面还部署了一些测试用的容器,因为想用外网访问么,所以这里用的是公网ip。安装完之后,进入容器测试发送消息,怎么了也发送不了。网上找了找原因,可能是ip的问题,我把外网ip换成了内网ip。可能是云服务器上没有外网网卡(猜的)
内网ip的问题
上面说到我把外网ip换成了内网的
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.18.66.56:9092
kafka是起来了,docker容器里也能发送消息。也能接受消息,但我本地的java客户端程序只能发送(没测,感觉是成功了,)但是消费者连接不成功啊,消费不了,还需要它干嘛。
内网外网访问的方法
找了下资料,可以加多个listeners;比如
但是配置ssl太麻烦了。我只是想测试啊,
终极大招
我本地装了docker,mac版的docker自带compose,soga!!!
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
# KAFKA_ADVERTISED_HOST_NAME: 172.18.66.56
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# KAFKA_ADVERTISED_PORT: 9092
KAFKA_BROKER_ID: 0
KAFKA_CREATE_TOPICS: "cms:1:1,api:1:1"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.147:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
volumes:
- /var/run/docker.sock:/var/run/docker.sock
本地测试了下,没啥问题