【问题标题】:Increasing number of brokers in kafka using KAFKA_ADVERTISED_HOST_NAME使用 KAFKA_ADVERTISED_HOST_NAME 的 kafka 中越来越多的经纪人
【发布时间】:2022-01-13 12:13:47
【问题描述】:

我是 Kafka 新手,我正在尝试在本地机器上运行 Kafka 服务,并使用它将一些数据从一个 .NET 项目传输到另一个。 我正在使用 docker-compose.yml 文件从 wurstmeister 为 zookeeper 和 Kafka 创建两个 docker 容器。 在环境变量中的 Kafka 定义中有 KAFKA_ADVERTISED_HOST_NAME,我将其设置为 127.0.0.1。 在 wurstmeister/kafka 的 docker hub 说我引用了

“修改 docker-compose.yml 中的 KAFKA_ADVERTISED_HOST_NAME 以匹配您的 docker 主机 IP(注意:如果要运行多个代理,请勿使用 localhost 或 127.0.0.1 作为主机 IP。)”。

当我将主题设置为具有超过 1 个副本和超过 1 个分区时,我会收到此消息

“执行主题命令时出错:复制因子:2 大于可用代理:1。”。

在 KAFKA_ADVERTISED_HOST_NAME 中定义的正确 IP 地址是什么,这将允许我获得超过 1 个代理?

version: '2'
services:
 zookeeper:
  image: wurstmeister/zookeeper
  ports:
   - "2181:2181"
 kafka:
  image: wurstmeister/kafka
  ports:
   - "9092:9092"
  environment:
   KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
   KAFKA_CREATE_TOPICS: "simpletalk_topic:2:2"
   KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock

【问题讨论】:

    标签: docker apache-kafka docker-compose


    【解决方案1】:

    它应该是您机器的 IP 地址。 Linux:使用ifconfig 命令,您的IP 将是inet <IP_ADDRESS> 在 Windows 中,您将使用 ipconfig

    获得此信息

    【讨论】:

    • 这回答了问题,但它不会让容器一起工作
    【解决方案2】:

    注意 - 在一台机器上运行多个代理并不能提供真正的容错能力。

    使用它将一些数据从一个 .NET 项目传输到另一个

    您只需要一位经纪人即可。


    首先,建议阅读https://github.com/wurstmeister/kafka-docker/wiki/Connectivity

    KAFKA_ADVERTISED_HOST_NAME 已弃用。不要使用它。

    它已被KAFKA_ADVERTISED_LISTENERS 取代,它可以包含${DOCKER_HOST_IP:-127.0.0.1}(或来自ifconfig 的主机IP),因为这是您的客户端将使用的IP(来自主机) .
    由于经纪人是他们自己的客户,因此您还需要宣传容器名称。而且,如果您想将您的客户端容器化,您的应用也会使用这些地址。

    除了 Kafka 网络配置之外,KAFKA_BROKER_ID 需要在每个配置之间有所不同,并且您的错误表明您需要覆盖所有其他复制因子代理配置。

    总之。

    version: '3'
    services:
     zookeeper:
      image: wurstmeister/zookeeper
     kafka-1:
      image: wurstmeister/kafka
      depends_on: [zookeeper]
      ports:
       - "9092:9092"
      environment:
       KAFKA_BROKER_ID: 1
       KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${DOCKER_HOST_IP:-127.0.0.1}:9092,PLAINTEXT_INTERNAL://kafka-1:29092
       KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_INTERNAL://:29092
       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT_INTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
       KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
       KAFKA_DEFAULT_REPLICATION_FACTOR: 2
       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
       KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 2
     kafka-2:
      image: wurstmeister/kafka
      ports:
       - "9093:9093"
      environment:
       KAFKA_BROKER_ID: 2  # unique
       KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://${DOCKER_HOST_IP:-127.0.0.1}:9093,PLAINTEXT_INTERNAL://kafka-2:29093
       KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093,PLAINTEXT_INTERNAL://:29093
       KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT_INTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
       KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
       KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
       KAFKA_DEFAULT_REPLICATION_FACTOR: 2
       KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
       KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 2
       KAFKA_CREATE_TOPICS: "simpletalk_topic:2:2"
      depends_on:  # ensure this joins the other
       - zookeeper
       - kafka-1
    

    我正在尝试在本地机器上运行 Kafka 服务

    设置bootstrap.servers="localhost:9092,localhost:9093"

    进一步阅读 - Connect to Kafka running in Docker

    示例用法

    请注意,主题创建似乎不会自动工作。理想情况下,您应该使用您的应用程序来实际创建/检查主题是否存在。

    $ kcat -b localhost:9093 -L
    Metadata for all topics (from broker -1: localhost:9093/bootstrap):
     2 brokers:
      broker 2 at 127.0.0.1:9093
      broker 1 at 127.0.0.1:9092 (controller)
     0 topics:
    

    产生一些数据......并使用它

    $ kcat -b localhost:9093 -t test -o earilest
    % Auto-selecting Consumer mode (use -P or -C to override)
    hello
    world
    sample
    data
    of
    no
    importance
    

    【讨论】:

    • 非常感谢它为我工作了 2 个代理,我在哪里可以找到运行多个代理所需的环境变量的完整列表并在我的 docker 容器中添加一些额外的东西
    • @Nikola 在 Kafka 文档之外,这些信息并没有真正的真实来源。如果您想简单地运行 Kafka 集群,云托管解决方案将是最好的。或者,如果您想使用 Kubernetes,请使用 Strimzi 运算符。 Compose 不提供与任一选项相同的功能集。添加“内部额外的东西”需要制作自己的 Docker 映像
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多