【问题标题】:Kafka Consumer on host machine not accessing messages of Kafka Producer running in docker主机上的 Kafka 消费者未访问在 docker 中运行的 Kafka 生产者的消息
【发布时间】:2021-05-28 06:12:40
【问题描述】:

我在主机上写了这个消费者代码

from kafka import KafkaConsumer
KAFKA_HOSTS = 'divolte-kafka:9092'
KAFKA_VERSION = (0,11,5)

topic = "csptest"
consumer = KafkaConsumer(topic, bootstrap_servers=KAFKA_HOSTS, api_version=KAFKA_VERSION)
for msg in consumer:
    print(msg)

Kafka 使用此配置安装在 docker 中

version: "3.3"
services:

  # Kafka/Zookeeper container
  divolte-kafka:
    image: krisgeus/docker-kafka
    container_name: divolte-kafka
    environment:
      ADVERTISED_HOST: divolte-kafka
      KAFKA_ADVERTISED_HOST_NAME: 192.168.65.0
      LOG_RETENTION_HOURS: 1
      AUTO_CREATE_TOPICS: "false"
      KAFKA_CREATE_TOPICS: divolte:4:1
      ADVERTISED_LISTENERS: OUTSIDE://divolte-kafka:9092,INTERNAL://localhost:9093
      LISTENERS: OUTSIDE://0.0.0.0:9092,INTERNAL://0.0.0.0:9093
      SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT,INTERNAL:PLAINTEXT
      INTER_BROKER: INTERNAL
    ports:
      - 9092:9092 # kafka broker
    expose:
      - "9092"
    networks:
      - divolte.io

当我尝试如下运行生产者和消费者时,它可以工作。但是当我启动生产者并访问主机中用python编写的消费者代码中的主题“csptest”时,我没有收到任何消息(什么都没有打印)。感谢您帮助我。

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic csptest

# producer
./kafka-console-producer.sh --broker-list localhost:9092 --topic csptest
> dd
> hi
> jhj


# consumer 
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic csptest --group topic_group
> dd
> hi
> jhj

【问题讨论】:

  • divolte-kafka:9092 不会从您的主机解析。如果要使用 Docker 容器名称,请使用 Python 容器

标签: python python-3.x apache-kafka kafka-consumer-api


【解决方案1】:

当您在容器中时,您的 shell 脚本可以工作,但这并不能帮助您测试在 Docker 之外运行的代码

你的内部和外部听众似乎颠倒了

从宿主机,你想在内部监听器上连接,所以需要暴露9093端口并在localhost:9093上连接,不要使用Kafka容器服务名

【讨论】:

    猜你喜欢
    • 2023-01-21
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2019-07-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多