无法从外部应用程序连接到Kafka

问题描述 投票:1回答:2

我有两台docker机器,我想在docker swarm中创建一个kafka集群。我的docker-compose.yml看起来像这样:

version: '3.2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - "9092:9092"
      - "29092:29092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_LISTENERS: PLAINTEXT://:9092,PLAINTEXT_HOST://:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092

我关注了这个问题:Unable to connect to Kafka run in container from Spring Boot app run outside container,我正在尝试使用localhost:29092从外部访问kafka。

我已经在kafka中创建了主题mytesttopic。下面的python代码:

from kafka import KafkaConsumer, SimpleProducer, TopicPartition, KafkaClient


def consume_from_topic():
    try:
        consumer = KafkaConsumer('mytesttopic',
                                 group_id= None,
                                 bootstrap_servers=['localhost:29092'],
                                 auto_offset_reset='earliest')

        for message in consumer:
            #consumer.commit()
            print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
                                                  message.offset, message.key,
                                                  message.value))
    except Exception as e:
        print(e)
        pass



if __name__ == '__main__':
    consume_from_topic()

返回:

NoBrokersAvailable

有人知道我在这里想念的吗?

python docker apache-kafka docker-swarm docker-machine
2个回答
0
投票

鉴于您正在另外2台计算机上运行docker swarm,由于kafka将在docker swarm节点上的端口localhost:29092上公开,因此您将无法在29092上进行连接。尝试使用一个节点的主机名+端口29092连接到kafka。您应该可以通过这种方式连接到kafka。

[请注意,这仅在您以routing mesh运行docker swarm的情况下有效,路由网格确保每个节点都在已发布的端口上接受任何服务的传入请求,无论它是否在同一主机上运行,​​并且确保流量到达运行容器的实际主机。

如果尚未设置路由网格,请尝试连接运行kafka容器的实际主机名(不推荐,但出于测试目的,它可以工作)

希望对您有帮助!


0
投票

您的听众是完全一样的。

您需要设置PLAINTEXT_HOST://0.0.0.0:29092将侦听器绑定到所有接口

© www.soinside.com 2019 - 2024. All rights reserved.