Docker 蜂拥而至的卡夫卡。如何为经纪人分配唯一的主机

Docker swarm Kafka. How to assign unique host for brokers

嗨,我正在尝试 运行 kafka,每个节点都有唯一的代理主机

主要目标是确保在重启 Kafka 服务后,broker hosts 不会发生变化

我试着做这样的事情

version: '3.7'

services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
       - "2181:2181"

  kafka:
    image: wurstmeister/kafka:2.12-2.5.0
    hostname: "{{.Node.Hostname}}"
    deploy:
      mode: global
    ports:
      - 9092:9092
      - 9094:9094
    environment:
      KAFKA_BROKER_ID_COMMAND:   "{{.Node.ID}} | grep -o '[0-9]$$+'"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://localhost:9092,OUTSIDE://:9094
      KAFKA_ADVERTISED_LISTENERS: INSIDE://{{.Node.Hostname}}:9092,OUTSIDE://:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

  web-socket-service:
    image: 'my_hub/web_socket_service'
    deploy:
      replicas: 2
    environment:
      BOOTSTRAP_SEVER: '{{.Node.Hostname}}:9092'

为了测试我使用了两个节点

Kafka 运行在两个节点上都很好,但后来我在其中一个节点上遇到了这个错误

WARN [Controller id=1001, targetBrokerId=1002] Error connecting to node worker1:9092 (id: 1002 rack: null) (org.apache.kafka.clients.NetworkClient)
dev_kafka.0.wxl6rlfypaai@main    | java.net.UnknownHostException: worker1: Name does not resolve

可能是Kafka服务中Hostname字段的问题,也可能有其他的办法

感谢任何帮助

您需要在所有 swarm 节点上升级到 docker 20.10。使这种部署成为可能的功能之一是 docker 20.10 确实将容器主机名添加到 docker 网络 dns 别名,而 19.03 则没有。