【问题标题】:Publish a message from container to kafka running outside container将消息从容器发布到在容器外运行的 kafka
【发布时间】:2019-05-11 00:39:58
【问题描述】:

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

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

[root@lm--mro-cloudnative--central docker_producer]# docker run 测试生产者 %3|1544419029.623|失败|rdkafka#producer-1| [thrd:lm--mro-cloudnative--central.novalocal:9092/0]: lm--mro-cloudnative--central.novalocal:9092/0: 无法解决 'lm-cloudnative--central.novalocal:9092':名称或服务不是 已知(在状态 INIT 342076146 毫秒后)

%3|1544419029.623|错误|rdkafka#producer-1| [thrd:lm--mro-cloudnative--central.novalocal:9092/0]: lm--cloudnative--central.novalocal:9092/0: 无法解决 'lm-cloudnative--central.novalocal:9092':名称或服务不是 已知(在状态 INIT 342076146 毫秒后)

我的producer 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

有什么我错过的吗?

【问题讨论】:

  • 建议:在Python代码中使用os.environ在运行时动态改变Kafka位置

标签: python docker apache-kafka confluent-platform


【解决方案1】:

如果主机为“localhost:9092”,它将无法工作,因为它指向同一个 docker 容器而不是节点/机器。

解决方案: 而不是 localhost 使用节点/机器的 IP 地址,那么它应该可以工作。

【讨论】:

  • 谢谢。它现在可以工作了。单独使用 IP 地址并不能解决问题。在 kafka server.properties 中,必须启用以下属性并重新启动 kafka。 advertised.listeners=PLAINTEXT://<IP>:9092
猜你喜欢
  • 2017-05-14
  • 2018-06-11
  • 2016-12-25
  • 2021-04-25
  • 2016-09-14
  • 1970-01-01
  • 2020-12-27
  • 2018-10-27
  • 1970-01-01
相关资源
最近更新 更多