Kafka集群模式端口配置

Kafka cluster mode ports configuration

我正在尝试部署一个 docker kafka 集群,其中包含 3 个 zookeeper 和 3 个 kafka 节点。 kafka 节点不断打印以下错误:

[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server zookeeper-1/10.0.0.5:2181. Will not attempt to authenticate using SASL (unknown error)
[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to zookeeper-1/10.0.0.5:2181, initiating session
[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect

当 zookeeper 节点不断打印时:

WARN Cannot open channel to 1 at election address
zookeeper-1/10.0.0.5:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
    java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
    [2019-03-01 17:24:30,930] INFO Resolved hostname: zookeeper-1 to address: zookeeper-1/10.0.0.5 (org.apache.zookeeper.server.quorum.QuorumPeer)
    [2019-03-01 17:24:30,931] WARN Cannot open channel to 2 at election address zookeeper-2/10.0.0.7:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
    java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)

看起来zookeeper节点之间无法通信,但是我检查了几次docker-compose yaml都没有找到奇怪的地方。有人可以帮助我吗?

docker-compose.yaml:

version: '3.3'

networks:
  kafka_example:
    driver: overlay

services:
  zookeeper-1:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
      - '/volumedockerkafka/zookeeper-1/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
      - '/volumedockerkafka/zookeeper-1/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
    networks:
      - kafka_example

  zookeeper-2:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
      - '/volumedockerkafka/zookeeper-2/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
      - '/volumedockerkafka/zookeeper-2/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
      ZOOKEEPER_SERVER_ID: 2
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
    networks:
      - kafka_example

  zookeeper-3:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
      - '/volumedockerkafka/zookeeper-3/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
      - '/volumedockerkafka/zookeeper-3/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
      ZOOKEEPER_SERVER_ID: 3
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
    networks:
      - kafka_example

  message_queue_kafka-1:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
      - '/volumedockerkafka/kafka-1/kafka_data:/var/lib/kafka/data:rw'  # mount point
      - '/volumedockerkafka/kafka-1/kafka_etc:/etc/kafka:rw'
    environment:
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-1:9092
      KAFKA_BROKER_ID: 1
      KAFKA_SESSION_TIMEOUT_MS: 60000
      KAFKA_HEARTBEAT_INTERVAL_MS: 20000
      KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    networks:
      - kafka_example

  message_queue_kafka-2:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
      - '/volumedockerkafka/kafka-2/kafka_data:/var/lib/kafka/data:rw'  # mount point
      - '/volumedockerkafka/kafka-2/kafka_etc:/etc/kafka:rw'
    environment:
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
      KAFKA_BROKER_ID: 2
      KAFKA_SESSION_TIMEOUT_MS: 60000
      KAFKA_HEARTBEAT_INTERVAL_MS: 20000
      KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    networks:
      - kafka_example

  message_queue_kafka-3:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
      - '/volumedockerkafka/kafka-3/kafka_data:/var/lib/kafka/data:rw'  # mount point
      - '/volumedockerkafka/kafka-3/kafka_etc:/etc/kafka:rw'
    environment:
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-3:9092
      KAFKA_BROKER_ID: 3
      KAFKA_SESSION_TIMEOUT_MS: 60000
      KAFKA_HEARTBEAT_INTERVAL_MS: 20000
      KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
      - zookeeper-1
      - zookeeper-2
      - zookeeper-3
    networks:
      - kafka_example

我有一个类似的设置,3 个动物园管理员和 3 个代理,并且运行良好。我注意到三件事,你的设置与我的不同,第二个我肯定是个问题(我做了同样的事情,但没有工作)

  1. 对于 ZOOKEEPER_SERVERS,您对所有动物园管理员 2888:3888 使用相同的端口组合。据我所知,你应该有不同的端口 check this example as a reference.
  2. 您对所有 zookeeper 实例使用相同的 ZOOKEEPER_CLIENT_PORT,请考虑为每个实例使用不同的实例,并且也与 ZOOKEEPER_SERVERS 中使用的端口不同。
  3. 对于kafka服务,环境变量KAFKA_ZOOKEEPER_CONNECT的值是用单引号引起来的,我不认为这是一个问题但是有点与您的其他配置不一致。

然后考虑更改 ZOOKEEPER_SERVERSZOOKEEPER_CLIENT_PORT 的值,例如更改为这样的值:

ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888

还要记住相应地调整 KAFKA_ZOOKEEPER_CONNECT 的值:

KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181 

clientPort the port to listen for client connections

server.X ..., note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.

摘自Zookeeper Docs

加起来应该是这样的(还没有测试):

version: '3.3'

networks:
kafka_example:
    driver: overlay

services:
zookeeper-1:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
    - '/volumedockerkafka/zookeeper-1/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
    - '/volumedockerkafka/zookeeper-1/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
    ZOOKEEPER_SERVER_ID: 1
    ZOOKEEPER_CLIENT_PORT: 22181
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_TICK_TIME: 2000
    ZOOKEEPER_INIT_LIMIT: 5
    ZOOKEEPER_SYNC_LIMIT: 2
    networks:
    - kafka_example

zookeeper-2:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
    - '/volumedockerkafka/zookeeper-2/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
    - '/volumedockerkafka/zookeeper-2/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
    ZOOKEEPER_SERVER_ID: 2
    ZOOKEEPER_CLIENT_PORT: 32181
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_TICK_TIME: 2000
    ZOOKEEPER_INIT_LIMIT: 5
    ZOOKEEPER_SYNC_LIMIT: 2
    networks:
    - kafka_example

zookeeper-3:
    image: confluentinc/cp-zookeeper:5.0.1
    volumes:
    - '/volumedockerkafka/zookeeper-3/zookeeper_data:/var/lib/zookeeper:rw'  # mount point
    - '/volumedockerkafka/zookeeper-3/zookeeper_etc:/etc/zookeeper:rw'  # mount point
    environment:
    ZOOKEEPER_SERVER_ID: 3
    ZOOKEEPER_CLIENT_PORT: 42181
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_TICK_TIME: 2000
    ZOOKEEPER_INIT_LIMIT: 5
    ZOOKEEPER_SYNC_LIMIT: 2
    networks:
    - kafka_example

message_queue_kafka-1:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
    - '/volumedockerkafka/kafka-1/kafka_data:/var/lib/kafka/data:rw'  # mount point
    - '/volumedockerkafka/kafka-1/kafka_etc:/etc/kafka:rw'
    environment:
    KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-1:9092
    KAFKA_BROKER_ID: 1
    KAFKA_SESSION_TIMEOUT_MS: 60000
    KAFKA_HEARTBEAT_INTERVAL_MS: 20000
    KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
    - zookeeper-1
    - zookeeper-2
    - zookeeper-3
    networks:
    - kafka_example

message_queue_kafka-2:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
    - '/volumedockerkafka/kafka-2/kafka_data:/var/lib/kafka/data:rw'  # mount point
    - '/volumedockerkafka/kafka-2/kafka_etc:/etc/kafka:rw'
    environment:
    KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
    KAFKA_BROKER_ID: 2ori
    KAFKA_SESSION_TIMEOUT_MS: 60000
    KAFKA_HEARTBEAT_INTERVAL_MS: 20000
    KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
    - zookeeper-1
    - zookeeper-2
    - zookeeper-3
    networks:
    - kafka_example

message_queue_kafka-3:
    image: confluentinc/cp-kafka:5.0.1
    volumes:
    - '/volumedockerkafka/kafka-3/kafka_data:/var/lib/kafka/data:rw'  # mount point
    - '/volumedockerkafka/kafka-3/kafka_etc:/etc/kafka:rw'
    environment:
    KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-3:9092
    KAFKA_BROKER_ID: 3
    KAFKA_SESSION_TIMEOUT_MS: 60000
    KAFKA_HEARTBEAT_INTERVAL_MS: 20000
    KAFKA_REBALANCE_TIMEOUT_MS: 300000
    depends_on:
    - zookeeper-1
    - zookeeper-2
    - zookeeper-3
    networks:
    - kafka_example

更新

这是我正在使用的 docker-compose,在我的设置中,容器可以位于两个物理主机中的任何一个中。

version: '2'
services:
zookeeper-3:
    image: confluentinc/cp-zookeeper:5.1.1
    environment:
    ZOOKEEPER_CLIENT_PORT: '42181'
    ZOOKEEPER_INIT_LIMIT: '5'
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_SERVER_ID: '3'
    ZOOKEEPER_SYNC_LIMIT: '2'
    ZOOKEEPER_TICK_TIME: '2000'
zookeeper-2:
    image: confluentinc/cp-zookeeper:5.1.1
    environment:
    ZOOKEEPER_CLIENT_PORT: '32181'
    ZOOKEEPER_INIT_LIMIT: '5'
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_SERVER_ID: '2'
    ZOOKEEPER_SYNC_LIMIT: '2'
    ZOOKEEPER_TICK_TIME: '2000'
zookeeper-1:
    image: confluentinc/cp-zookeeper:5.1.1
    environment:
    ZOOKEEPER_CLIENT_PORT: '22181'
    ZOOKEEPER_INIT_LIMIT: '5'
    ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
    ZOOKEEPER_SERVER_ID: '1'
    ZOOKEEPER_SYNC_LIMIT: '2'
    ZOOKEEPER_TICK_TIME: '2000'
kafka-1:
    image: confluentinc/cp-enterprise-kafka:5.1.1
    environment:
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:19092
    KAFKA_BROKER_ID: '1'
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'
kafka-2:
    image: confluentinc/cp-enterprise-kafka:5.1.1
    environment:
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:29092
    KAFKA_BROKER_ID: '2'
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'
kafka-3:
    image: confluentinc/cp-enterprise-kafka:5.1.1
    environment:
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:39092
    KAFKA_BROKER_ID: '3'
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
    KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
    KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'

最后我得到了奇数:https://forums.docker.com/t/cannot-get-zookeeper-to-work-running-in-docker-using-swarm-mode/27109/2

为了让zookeeper 集群正常工作,似乎需要在KAFKA_BROKER_ID 为x 时指定0.0.0.0 作为主机名x。端口号似乎也无关紧要,因为它们是不同的机器(实际上)。

这是我的新撰写文件:

version: '3.3'

networks:
  kafka_example:
      driver: overlay

services:
  zookeeper-1:
      image: confluentinc/cp-zookeeper:5.0.1
      volumes:
        - '/volumedockerkafka/zookeeper-1/zookeeper_data:/var/lib/zookeeper:rw'
        - '/volumedockerkafka/zookeeper-1/zookeeper_etc:/etc/zookeeper:rw'
      environment:
        ZOOKEEPER_SERVER_ID: 1
        ZOOKEEPER_CLIENT_PORT: 2181
        ZOOKEEPER_SERVERS: 0.0.0.0:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
        ZOOKEEPER_TICK_TIME: 2000
        ZOOKEEPER_INIT_LIMIT: 5
        ZOOKEEPER_SYNC_LIMIT: 2
        ZOOKEEPER_MAX_CLIENT_CNXNS: 200
      networks:
      - kafka_example

  zookeeper-2:
      image: confluentinc/cp-zookeeper:5.0.1
      volumes:
        - '/volumedockerkafka/zookeeper-2/zookeeper_data:/var/lib/zookeeper:rw'
        - '/volumedockerkafka/zookeeper-2/zookeeper_etc:/etc/zookeeper:rw'
      environment:
        ZOOKEEPER_SERVER_ID: 2
        ZOOKEEPER_CLIENT_PORT: 2181
        ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;0.0.0.0:2888:3888;zookeeper-3:2888:3888
        ZOOKEEPER_TICK_TIME: 2000
        ZOOKEEPER_INIT_LIMIT: 5
        ZOOKEEPER_SYNC_LIMIT: 2
        ZOOKEEPER_MAX_CLIENT_CNXNS: 200
      networks:
        - kafka_example

  zookeeper-3:
      image: confluentinc/cp-zookeeper:5.0.1
      volumes:
        - '/volumedockerkafka/zookeeper-3/zookeeper_data:/var/lib/zookeeper:rw'
        - '/volumedockerkafka/zookeeper-3/zookeeper_etc:/etc/zookeeper:rw'
      environment:
        ZOOKEEPER_SERVER_ID: 3
        ZOOKEEPER_CLIENT_PORT: 2181
        ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;0.0.0.0:2888:3888
        ZOOKEEPER_TICK_TIME: 2000
        ZOOKEEPER_INIT_LIMIT: 5
        ZOOKEEPER_SYNC_LIMIT: 2
        ZOOKEEPER_MAX_CLIENT_CNXNS: 200
      networks:
        - kafka_example

  message_queue_kafka-1:
      image: confluentinc/cp-kafka:5.0.1
      volumes:
        - '/volumedockerkafka/kafka-1/kafka_data:/var/lib/kafka/data:rw'
        - '/volumedockerkafka/kafka-1/kafka_etc:/etc/kafka:rw'
      environment:
        KAFKA_BROKER_ID: 1
        KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
        KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-1:9092
        KAFKA_SESSION_TIMEOUT_MS: 60000
        KAFKA_HEARTBEAT_INTERVAL_MS: 20000
        KAFKA_REBALANCE_TIMEOUT_MS: 300000
      depends_on:
        - zookeeper-1
        - zookeeper-2
        - zookeeper-3
      networks:
        - kafka_example

  message_queue_kafka-2:
      image: confluentinc/cp-kafka:5.0.1
      volumes:
        - '/volumedockerkafka/kafka-2/kafka_data:/var/lib/kafka/data:rw'
        - '/volumedockerkafka/kafka-2/kafka_etc:/etc/kafka:rw'
      environment:
        KAFKA_BROKER_ID: 2
        KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
        KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
        KAFKA_SESSION_TIMEOUT_MS: 60000
        KAFKA_HEARTBEAT_INTERVAL_MS: 20000
        KAFKA_REBALANCE_TIMEOUT_MS: 300000
      depends_on:
        - zookeeper-1
        - zookeeper-2
        - zookeeper-3
      networks:
        - kafka_example

  message_queue_kafka-3:
      image: confluentinc/cp-kafka:5.0.1
      volumes:
        - '/volumedockerkafka/kafka-3/kafka_data:/var/lib/kafka/data:rw'
        - '/volumedockerkafka/kafka-3/kafka_etc:/etc/kafka:rw'
      environment:
        KAFKA_BROKER_ID: 3
        KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
        KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-3:9092
        KAFKA_SESSION_TIMEOUT_MS: 60000
        KAFKA_HEARTBEAT_INTERVAL_MS: 20000
        KAFKA_REBALANCE_TIMEOUT_MS: 300000
      depends_on:
        - zookeeper-1
        - zookeeper-2
        - zookeeper-3
      networks:
        - kafka_example