将消息从容器发布到在容器外部运行的kafka

时间:2018-12-10 05:49:36

标签: python docker apache-kafka confluent-kafka

我有一个docker容器映像,它生成一些有关kafka主题的消息,该消息在同一节点/机器中的容器外部运行。

当我运行docker容器向kafka主题发布一些消息时,出现以下错误。

  

[root @ lm--mro-cloudnative--central docker_producer]#docker run   测试生产者%3 | 1544419029.623 | FAIL | rdkafka#producer-1 |   [thrd:lm--mro-cloudnative--central.novalocal:9092/0]:   lm--mro-cloudnative--central.novalocal:9092/0:无法解析   'lm-cloudnative--central.novalocal:9092':名称或服务名称不正确   已知(状态为342076146ms之后)

     

%3 | 1544419029.623 | ERROR | rdkafka#producer-1 |   [thrd:lm--mro-cloudnative--central.novalocal:9092/0]:   lm--cloudnative--central.novalocal:9092/0:无法解析   'lm-cloudnative--central.novalocal:9092':名称或服务名称不正确   已知(状态为342076146ms之后)

我的生产者python代码如下,( producer.py

from confluent_kafka import Producer
import json

data = {"name":"LTE", "parameters":{"Period":1},"targets":[88054]}

conf = {'bootstrap.servers': 'localhost:9092',
        'default.topic.config': {'produce.offset.report': True, 'request.required.acks' : -1}}
p = Producer(**conf)

json_data = json.dumps(data)
p.produce('mro_topic', key='MRO', value=json_data, callback=None)
p.flush(30)

Dockerfile

FROM registry-access-redhat-com.repo.lab.pl.**-**.com/rhel7.4

# CONFIGURE YUM
RUN rm -f /etc/yum.repos.d/*
ADD resources/yum.repos.d/* /etc/yum.repos.d/
RUN echo "sslverify=false" >> /etc/yum.conf


RUN yum install -y python-pip
RUN pip install --index-url https://repo.lab.pl.**.com/api/pypi/python/simple/ pip
RUN pip install --index-url https://repo.lab.pl.**.com/api/pypi/python/simple/ requests
RUN pip --version
RUN pip install --index-url https://repo.lab.pl.**.com/api/pypi/python/simple/ setuptools

RUN pip install --index-url https://repo.lab.pl.**.com/api/pypi/python/simple/ confluent-kafka
RUN pip install --index-url https://repo.lab.pl.**.com/api/pypi/python/simple/ avro
ADD producer.py /
CMD [ "python", "producer.py" ]

docker build -t test-producer。

docker run test-producer

有什么想念的吗?

1 个答案:

答案 0 :(得分:1)

将主机设置为“ localhost:9092”将无法正常工作,因为它指向的是同一个Docker容器,而不是节点/机器。

解决方案:

而不是localhost使用节点/机器的IP地址。

相关问题