【发布时间】:2021-09-05 03:04:25
【问题描述】:
我正在尝试使用 Docker 建立与 Kafka 的连接。 在本地运行代码时一切正常,但是当尝试使用 Docker Compose 运行它时,我收到以下错误:
Traceback (most recent call last):
File "alerts_monitor_service.py", line 23, in <module>
collect_data_from_db_and_alert()
File "alerts_monitor_service.py", line 11, in collect_data_from_db_and_alert
kafka_dic = kafka_set_up()
File "/monitor_service/src/logic.py", line 49, in kafka_set_up
producer = KafkaProducer(bootstrap_servers=["localhost:9092"])
File "/usr/local/lib/python3.8/site-packages/kafka/producer/kafka.py", line 381, in __init__
client = KafkaClient(metrics=self._metrics, metric_group_prefix='producer',
File "/usr/local/lib/python3.8/site-packages/kafka/client_async.py", line 244, in __init__
self.config['api_version'] = self.check_version(timeout=check_timeout)
File "/usr/local/lib/python3.8/site-packages/kafka/client_async.py", line 900, in check_version
raise Errors.NoBrokersAvailable()
kafka.errors.NoBrokersAvailable: NoBrokersAvailable
这就是我在 docker-compose.yaml 文件中设置 kafka 的方式:
version: "3.6"
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- 2181:2181
depends_on:
- mongo
kafka:
image: wurstmeister/kafka
ports:
- 9092:9092
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
depends_on:
- mongo
- zookeeper
mongo:
container_name: mongo_db
image: mongo:latest
ports:
- "27017:27017"
volumes:
- "./data/mongo:/data/db"
这是我得到错误的地方:
producer = KafkaProducer(bootstrap_servers=["localhost:9092"])
producer = KafkaProducer()
producer = KafkaProducer(value_serializer=lambda v: json.dumps(v).encode('utf-8'))
【问题讨论】:
-
1)
KAFKA_ADVERTISED_HOST_NAME需要是 Docker 服务名称 2) 不清楚 Python 代码在哪里运行,但如果它在容器中,则应将其放在同一个 compose 文件中
标签: python docker apache-kafka docker-compose kafka-python