我正在使用docker compose来启动kafka和zookeeper
我的docker-compose如下:
version: '3'
services:
zookeeper:
image: zookeeper:3.4
networks:
- pipeline
kafka:
image: ches/kafka
networks:
- pipeline
environment:
- ZOOKEEPER_IP=zookeeper
ports:
- "9092:9092"
links:
- zookeeper:zookeeper
depends_on:
- zookeeper
networks:
pipeline:
因此,这启动了一个运行zookeeper的容器,并启动了一个运行kafka服务器的容器,该容器成功连接到zookeeper。
此外,我可以成功创建一个kafka生产者和一个kafka消费者,通过以下命令相互通信:
制片:
docker run --rm -it --network pipeline_pipeline ches/kafka \
kafka-console-producer.sh --topic pipeline-dev \
--broker-list kafka:9092
消费者:
docker run --rm --network pipeline_pipeline ches/kafka \
kafka-console-consumer.sh --topic pipeline-dev \
--from-beginning \
--bootstrap-server kafka:9092
现在我面临的问题是,在配置中,kafka服务器上的ADVERTISED HOST设置为kafka
,这阻止我从本地连接到kafka服务器。
我正在使用kafka-python库以下列方式连接到kafka:
from kafka import KafkaConsumer
consumer = KafkaConsumer('pipeline-dev', bootstrap_servers='localhost:9092')
print 'starting to listen'
for msg in consumer:
print msg
但是在这里我得到了Brokers不可用的错误!那是因为我将引导服务器设置为localhost:9092
。即使我转发了端口,我也无法连接到kafka服务器,因为广告主机名是kafka
而不是localhost
。
将引导服务器设置为kafka:9092
不起作用,因为代码在本地而不是在docker网络中运行。
我不知道如何解决这个问题。
答案 0 :(得分:2)
在/etc/hosts
中输入主机条目,如下所示
127.0.0.1 kafka
当你想在docker主机上使用你的代码时,上面的代码将会起作用。如果你想在其他机器上使用它,那么你应该使用
<DockerHostIP> kafka
基本上,当广告名称返回kafka