【问题标题】:Docker swarm Kafka. How to assign unique host for brokersDocker 集群 Kafka。如何为代理分配唯一主机
【发布时间】:2021-12-04 11:37:14
【问题描述】:

您好,我正在尝试为每个节点运行具有唯一代理主机的 kafka

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

我尝试做这样的事情

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字段,也许还有其他方法

感谢任何帮助

【问题讨论】:

  • 在我看来,您的覆盖网络没有 DNS 服务器。总的来说,我建议在 Kubernetes 中使用 Strimzi Kafka 运算符,这已经是一个已解决的问题,而不是在 Swarm 中处理节点变量

标签: docker apache-kafka docker-swarm


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助,这按预期工作,但出现了另一个问题,重新启动 kafka 后出现此错误2 partitions have leader brokers without a matching listener,您可能已经体验过如何解决?
  • 如果它们都在同一个节点上启动,您可能需要设置max_replicas_per_node
  • 没有帮助,只是为了确保我使用该服务的一个副本运行了 swarm,但仍然出现此错误。奇怪,就好像听众只剩下老经纪人了
  • 嗯,mode:global 在更新之间是否稳定 {{.Node.ID}}?它是一个大哈希。它只是模式中的一个简单整数值:已复制。
  • 是的,用这个 hostname -I | awk -F '' '{print $$ 1}' | awk -F '.' '{print $$ 4}' 代替它不是很好的解决方案没有帮助,也许用 swarm 实现是不可能的
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2020-12-27
相关资源
最近更新 更多