【问题标题】:Unable to set up Kafka and Python with docker无法使用 docker 设置 Kafka 和 Python
【发布时间】:2020-02-04 07:16:18
【问题描述】:

我可以使用 docker 设置 Kafka,但是当我尝试使用 python 访问它时,我无法做到这一点。如果我在 kafka shell 中安装 python,我可以做到这一点,但是在 kafka shell 和 docker python 之外,我无法使用 kafka。

我的Producer.py 文件:

import time
import random
from kafka import KafkaProducer

# give broker IP from docker
producer = KafkaProducer(bootstrap_servers='kafka:9092')

# continuous loop
var = 1
while var == 1:

    # generate a random integer
    num = random.randint(0, 10)

    # message value and key must be raw bytes
    num_bytes = bytes(str(num), encoding='utf-8')

    # send to topic on broker
    producer.send('test', value=num_bytes, key=num_bytes)

    # wait 1 second
    time.sleep(1)

我的consumer.py 文件:

from kafka import KafkaConsumer

# continuous loop
var = 1
while var == 1:

    # initialize consumer to given topic and broker
    consumer = KafkaConsumer('test',
                            group_id='consumer-1',
                            bootstrap_servers='kafka:9092')

    # loop and print messages
    for msg in consumer:
        print (msg)

我的docker-compose 文件:


version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: "zoo1"
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    container_name: "kafka1"
    ports:
     - "9092:9092"
    expose:
     - "9093"
    depends_on:
     - zookeeper
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

【问题讨论】:

    标签: python docker docker-compose kafka-python


    【解决方案1】:

    在你的 docker.compose 中试试这个(从实际配置中复制)

    environment:
          KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka:9093,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL
    

    【讨论】:

    • 引起:java.lang.IllegalArgumentException:没有为监听器LISTENER_DOCKER_EXTERNAL://127.0.0.1定义安全协议
    • 您是否尝试在 docker 或主机上运行您的脚本?在第二种情况下,尝试用 localhost:9092 替换脚本中的 kafka:9092
    • 我已经在 docker 中运行了我的所有服务..我没有运行生产者...我只运行了消费者..问题是我可以通过生产者发送数据但消费者不能收到它...
    猜你喜欢
    • 2017-08-20
    • 2021-07-21
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2021-11-13
    • 2021-02-04
    • 2020-06-11
    • 2018-02-22
    相关资源
    最近更新 更多