【问题标题】:How to use Kafka with docker and python? [duplicate]如何将 Kafka 与 docker 和 python 一起使用? [复制]
【发布时间】: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


【解决方案1】:

这里是 Dockerfile 示例:https://github.com/up9inc/async-ms-demo/tree/main/kafka

您可以将其构建为docker build . -t kafka,然后在本地以docker run -it -p 9092:9092 kafka 运行。然后它会在本地为您工作。

对于 docker-compose,您需要使用设置了 KAFKA_ADVERTISED_LISTENERS env var 的相同 Docker 映像运行,以让其他主机正确找到它。请参阅此处的示例:https://github.com/up9inc/async-ms-demo/blob/main/docker-compose.yml#L39

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2022-01-11
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多