kafka python producer在docker容器中运行时无法发送

8e2ybdfx  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(510)

我正在使用 kafka-python ( pip install kafka-python )在flask应用程序中,向kafka集群发送消息(运行版本0.11)。应用程序部署到 AWS elastic beanstalk 通过 docker . 但是,我没有看到到达kafka的消息(通过控制台使用者验证)。
除了如何连接到正在运行的容器外,我对docker知之甚少。所以我就是这么做的。我登录到beanstalk示例,然后连接到docker容器。在那里,我在python3中运行了以下命令。

>> from kafka import KafkaProducer
>> p = KafkaProducer(bootstrap_servers='my_kafka_servers:9092', compression_type='gzip')
>> r = p.send(topic = 'my_kafka_topic', value = 'message from docker', key = 'docker1')
>> r.succeeded()
>> False
>> p.flush()
>> r.succeeded()
>> False
>> p.close()
>> r.succeeded()
>> False

在这段时间里,我有一个控制台消费者在听这个主题,但我没有看到任何消息。
我在docker容器的“外部”做了同样的练习(即,在beanstalk示例中)。我第一次安装 kafka-python 使用pip。然后在python3中运行以下命令。

>> from kafka import KafkaProducer
>> p = KafkaProducer(bootstrap_servers='my_kafka_servers:9092', compression_type='gzip')
>> r = p.send(topic = 'my_kafka_topic', value = 'message outside the docker', key = 'instance1')
>> r.succeeded()
>> False

# waited a second or two

>> r.succeeded()
>> True

这一次,我确实看到了来自控制台使用者的消息。
所以,我的问题是:
为什么docker要阻止Kafka制作人的发送?
我怎样才能解决这个问题?
这是我需要发布docker配置的东西吗?我没有设置它,所以没有这个信息。
我在项目中发现了一些docker配置的特定信息。

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "<AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<NAME>:<VERSION>",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "80"
    }
  ],
  "Logging": "/var/eb_log"
}
wz1wpwve

wz1wpwve1#

您必须将docker容器绑定到本地计算机。这可以通过使用docker运行方式完成: docker run --rm -p 127.0.0.1:2181:2181 -p 127.0.0.1:9092:9092 -p 127.0.0.1:8081:8081 .... 或者,您可以将docker run与绑定ip一起使用: docker run --rm -p 0.0.0.0:2181:2181 -p 0.0.0.0:9092:9092 -p 0.0.0.0:8081:8081 ..... 如果要使docker容器在网络上可路由,可以使用: docker run --rm -p <private-IP>:2181:2181 -p <private-IP>:9092:9092 -p <private-IP>:8081:8081 .... 或者最后,您可以使用以下方法不将网络接口封装: docker run --rm -p 2181:2181 -p 9092:9092 -p 8081:8081 --net host ....

ffdz8vbo

ffdz8vbo2#

如果你想在ElasticBeanstalk和docker上绑定端口,你需要使用版本2,它只适用于多容器环境。我有同样的问题,上述和好奇,如果上述修复工程。

相关问题