无法建立与节点-1的连接

时间:2020-02-29 00:08:26

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

我在虚拟机上安装了zookeeper和kafka docker容器。我的设置看起来像

 zookeeper:
    image: confluentinc/cp-zookeeper:latest
    name:zookeeper
ZOOKEEPER_CLIENT_PORT: 2181
  ports:
  - "2181:2181"

kafka:
   image: confluentinc/cp-kafka:latest
   hostname: kafka
 ports:
     - "9092:9092"
     - "29092:29092"
   depends_on:
     - zookeeper
   KAFKA_BROKER_ID: "-1"
   KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181");
   ALLOW_PLAINTEXT_LISTENER: "yes"
   KAFKA_LISTENERS: "PLAINTEXT://9092, PLAINTEXT_HOST://29092"
   KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092, PLAINTEXT_HOST://localhost:29092"
   KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT"
   KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
   KAFKA_DEFAULT_REPLICATION_FACTOR: "1"
   AUTO.LEADER.REBALANCE.ENABLE: "true"
   KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE: "true"
   KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"

现在,我正在尝试从本地计算机向kafka发送一些消息,但出现以下错误。

  Connection to node -1 (//ip-of-virtualmachine:29092) could not be established. Broker may not be available.

在我的本地计算机上,我将kafka生产者配置为发送消息。在我的代码中用于配置引导服务器的属性是

 String bootstrapServers = "virtual-machine-ip:29092";
 Properties kafka-properties = new Properties();
 kafka-properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
 .
 .
 .
 create producer and send some record etc.

我在互联网上找到的所有示例都与docker和kafka有关。它们都与kafka,docker和虚拟机无关。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

可能您没有将kafka容器的端口暴露给主机,请尝试通过以下方式暴露端口29092:

ports:
 - "29092:29092"

或在主机网络docker -d --net=host...中运行容器,如果您是从docker-compose运行的,则将network_mode: host添加到服务中

要修复您的docker配置,您可以在此处获得启发: https://github.com/simplesteph/kafka-stack-docker-compose/blob/master/zk-single-kafka-single.yml

答案 1 :(得分:0)

如果代码在VM外部运行,则需要使外部端口从VM转发到主机,并通过容器。

顺便说一句,Docker Machine会为您创建VM,而不是您自己单独安装Docker