Мне нужна помощь в настройке докер-контейнеров моего kafka brokers для структуры hyperledger. Моя установка будет кластером из 4 брокеров, и у меня возникнет проблема, когда я представлю второго брокера. Все брокеры в настоящее время работают на одной машине, и мне нужно, чтобы они объявили свой внешний адрес, чтобы мои заказчики на разных машинах могли их обнаружить.
Мой составной файл с 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). Если я удалю его, он будет работать, но тогда мои заказчики не получат адрес брокера, и я потеряю связь между заказчиками и брокерами.
Как мне поддерживать внутреннюю связь между моими брокерами и внешнюю связь с моими заказчиками?