【问题标题】:Python, Kafka and Docker - KafkaConsumer keeps hangingPython、Kafka 和 Docker - KafkaConsumer 一直挂着
【发布时间】:2020-02-09 03:58:15
【问题描述】:

我有以下 docker-compose 文件:

  version: '3.1'

  services:
    postgres_db:
      image: postgres
      restart: always
      environment:
        POSTGRES_USER: admin
        POSTGRES_PASSWORD: admin
        POSTGRES_DB: default_db
      ports:
        - 54320:5432
    zookeeper:
      image: wurstmeister/zookeeper
      ports:
        - "2181:2181"
    kafka:
      image: wurstmeister/kafka
      ports:
        - "9092:9092"
      environment:
        KAFKA_ADVERTISED_HOST_NAME: kafka
        KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        KAFKA_CREATE_TOPICS: "test:1:1"
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock

使用docker-compose up 运行它后 - 从终端输出看一切正常。 我启动一个 python 控制台并运行以下行:

kp = KafkaProducer(bootstrap_servers=['localhost:9092'],api_version=(0,10),
                         value_serializer=lambda x: 
                         dumps(x).encode('utf-8'))
kc = KafkaConsumer('test', bootstrap_servers=['localhost:9092'],api_version=(0,10),group_id=None,auto_offset_reset='earliest', 
                   value_deserializer=lambda json_data: json.loads(json_data.decode('utf-8')))
data = {"test":"test"}
kp.send(topic="test",value=data)
for message in kc:
    print(message.value)

但是,运行此命令后,控制台只是挂起,看起来消息已被消耗/生成。任何想法这里出了什么问题?谢谢!

【问题讨论】:

  • 可以从cmd和kafka通信吗?由默认脚本kafka保留?另外,你检查过 kafka 和 zookeeper 的日志吗?

标签: python docker apache-kafka kafka-consumer-api kafka-producer-api


【解决方案1】:

您需要在容器中运行 Python 代码并设置

bootstrap_servers=['kafka:9092']

或者您需要将 Kafka 通告回主机上的客户端

KAFKA_ADVERTISED_HOST_NAME: localhost 

您也可以阅读 wurstmeister README 以了解 HOSTNAME_COMMAND 的用法

我还建议您在测试生产者和消费者时分别运行它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多