【发布时间】:2018-10-21 09:15:59
【问题描述】:
我需要一些帮助来为我的超级账本结构配置我的 kafka 代理 docker 容器。我的设置将是一个由 4 个代理组成的集群,当我引入第二个代理时我遇到了问题。所有经纪人目前都坐在一台机器上,我需要他们公布他们的外部地址,以便我在不同机器上的订购者可以发现他们。
我的 compose 文件包含 1 个 Zookeeper 和 1 个 Broker:
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 也会发生同样的情况)环境变量。如果我删除它,它可以工作,但是我的订购者将不会收到经纪人地址,我将失去订购者和经纪人之间的通信。
我如何维护经纪人之间的内部连接以及与我的订购者的外部连接?
【问题讨论】:
-
您在同一台主机上运行两个代理?你最好为你的数据使用不同的磁盘......另外,你的外部客户是
kafka0:9092,kafka1:10092 -
同一主机上的两个代理只是暂时的,因为我不想启动更多的 AWS EC2 机器。我不确定你的第二个问题是什么意思,但我的订购者将在他们的创世区块中的地址 kafka0.hyperfabric.xyz:9092 和 kafka1.hyperfabric.xyz:10092 上寻找这些经纪人。
-
我不知道 orderers 或 genesis block 是什么意思。但是引导服务器需要使用两个端口连接到代理
-
是的,我相信这种情况正在发生,因为我的订购者(客户)实际上最初是使用指定给他们的地址(通过创世块)访问集群并创建一个主题,然后将其分区并复制。问题似乎在那之后出现。然后我的订购者尝试与代理建立一个新连接(可能作为消费者?),这个新连接最初指向 127.0.0.11:53,这听起来像是一个内部 docker 地址,但由于它们不在同一个地址上,所以失败了机器。这就是我添加 KAFKA_ADVERTISED_LISTENERS 环境的原因。
标签: docker apache-kafka hyperledger-fabric hyperledger