测试环境有一台后端服务器,为了方便移动开发,我在上面安装了ZeroTier Client以便远程使用它上面的各种服务,比如mongodbElasticSearchRedis之类的。

但是上面的kafka服务,在远程连接时出现了问题,经过排查,发现kafka的服务在通过ZeroTier的IP地址访问时,需要创建额外的Listener

调整docker-compose.yml配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3"
services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:1.1.1'
    ports:
      - '9092:9092'
      - '9093:9093'
    volumes:
      - /datadisk/kafka:/bitnami/kafka
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://10.0.x.xx:9092,EXTERNAL://172.xx.xx.xxx:9093
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
    depends_on:
      - zookeeper

打开了两个Listener,一个CLIENT,服务器内网使用;一个EXTERNAL,供ZeroTier网络使用;
再通过ADVERTISED_LISTENERS通过ZooKeeper进行宣告,让别的Broker能发现并使用。