Hyperledger Fabric 的 Kafka 代理无法建立连接

Kafka Brokers for Hyperledger Fabric could not establish a connection

我需要一些帮助来为 hyperledger fabric 配置我的 kafka 代理 docker 容器。我的设置将是一个由 4 个代理组成的集群,我在引入第二个代理时遇到了问题。所有经纪人目前都坐在一台机器上,我需要他们公布他们的外部地址,以便我在不同机器上的订购者可以发现他们。

我用 1 个 Zookeeper 和 1 个代理编写的文件:

version: '2'

services:
  zookeeper0.hyperfabric.xyz:
    image: hyperledger/fabric-zookeeper
    restart: always
    container_name: zookeeper0.hyperfabric.xyz
    environment:
      - ZOO_SERVERS=server.1=zookeeper0.hyperfabric.xyz:2888:3888
      - ZOO_MY_ID=1
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888

  kafka0.hyperfabric.xyz:
    image: hyperledger/fabric-kafka
    restart: always
    container_name: kafka0.hyperfabric.xyz
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_MIN_INSYNC_REPLICAS=1
      - KAFKA_DEFAULT_REPLICATION_FACTOR=1
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0.hyperfabric.xyz:2181
      - KAFKA_BROKER_ID=0
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka0.hyperfabric.xyz:9092
    ports:
      - 9092:9092
      - 9093:9093

运行 这很好用。

当我介绍另一个经纪人时使用:

kafka1.hyperfabric.xyz:
  image: hyperledger/fabric-kafka
  restart: always
  container_name: kafka1.hyperfabric.xyz
  environment:
    - KAFKA_MESSAGE_MAX_BYTES=103809024
    - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
    - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
    - KAFKA_MIN_INSYNC_REPLICAS=1
    - KAFKA_DEFAULT_REPLICATION_FACTOR=1
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper0.hyperfabric.xyz:2181
    - KAFKA_BROKER_ID=1
    - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka1.hyperfabric.xyz:10092
  ports:
    - 10092:9092
    - 10093:9093

我收到以下无限循环错误:

[2018-05-11 02:04:08,310] WARN [Controller id=0, targetBrokerId=1] Connection to node 1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

该错误与我的 KAFKA_ADVERTISED_LISTENERS(KAFKA_ADVERTISED_HOST_NAME 和 KAFKA_ADVERTISED_PORT 环境变量发生了同样的事情)有些相关。如果我删除它,它会起作用,但是我的订购者将不会收到经纪人地址,我将失去订购者和经纪人之间的联系。

如何维护我的经纪商之间的内部连接以及与我的订购者的外部连接?

容器内是配置侦听器变量的地方。 10092 是 你的主机 上的端口,而不是容器。

因此,你想要这个

PLAINTEXT://kafka1.hyperfabric.xyz:9092

一起
ports:
    - 10092:9092

或者对侦听器 端口使用 10092(加上 KAFKA_ADVERTISED_PORT


或者,如果您在 unix 主机上,您可以执行 network_mode: host 模式,失去端口转发,然后您可以 use different ports 用于通告的侦听器。

通过将我的 kafka1 容器更改为如下所示,我能够连接所有内容:

kafka1.hyperfabric.xyz:
  image: hyperledger/fabric-kafka
  restart: always
  container_name: kafka1.hyperfabric.xyz
  environment:
    - KAFKA_PORT=10092
    - KAFKA_MESSAGE_MAX_BYTES=103809024
    - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
    - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
    - KAFKA_MIN_INSYNC_REPLICAS=1
    - KAFKA_DEFAULT_REPLICATION_FACTOR=1
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper0.hyperfabric.xyz:2181
    - KAFKA_BROKER_ID=1
    - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka1.hyperfabric.xyz:10092
  ports:
    - 10092:10092
    - 10093:9093

区别是 - KAFKA_PORT=10092- 10092:10092