【问题标题】:What does multiple KAFKA_ADVERTISED_LISTENERS mean when we have only one broker, vs when we have many?当我们只有一个经纪人时,多个 KAFKA_ADVERTISED_LISTENERS 是什么意思,当我们有很多经纪人时?
【发布时间】:2020-10-08 04:42:48
【问题描述】:

我正在学习 Kafka 并尝试将它与 docker 一起使用。我对 docker-compose 文件感到困惑,所以我想在这里问我的问题。

在大多数示例中,我看到这样的配置:

broker:
   image: confluentinc/cp-enterprise-kafka:5.3.1
   ...
   ports:
       - "29192:29092" 
       - "9192:9092"
   environment:
        ...
        KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092

我想了解一些与此相关的事情:

  1. 对于使用 5 位(例如:29092)端口vs 4 位(例如:9092)端口是否有特定的约定?
  2. 配置的代理数量与KAFKA_ADVERTISED_LISTENERS 中提到的侦听器数量之间是否存在特定关系? In some places, like confluent's own example,我只看到一个经纪人,但有多个 KAFKA_ADVERTISED_LISTENERS。这是什么意思?
  3. 另外,在上面提到的同一个融合示例中,KAFKA_ADVERTISED_LISTENERS 中有一个侦听器:PLAINTEXT://broker:29092,但是我们没有在 29092 端口配置任何代理或 Zookeeper,那么它在做什么?

【问题讨论】:

    标签: docker apache-kafka


    【解决方案1】:

    KAFKA_ADVERTISED_LISTENERS 是特定代理的地址列表。当客户端第一次联系充当“引导服务器”的代理时,它将返回负责每个分区的代理的地址。 客户端将需要不同的地址,具体取决于它们来自哪个网络。 “引导服务器”知道所有代理的“广告侦听器”,将根据客户端用于连接的自己的哪个侦听器选择适当的地址返回。

    TL;DR

    来源:https://rmoff.net/2018/08/02/kafka-listeners-explained/


    1. 对于使用 5 位(例如:29092)端口和 4 位(例如:9092)端口是否有特定的约定?

    我相信唯一的约定是 9092 作为代理端口。当需要多个端口时,人们似乎会使用它的变体。我见过 9093,现在是 29092。

    1. 配置的代理数量与中提到的侦听器数量之间是否存在特定关系 KAFKA_ADVERTISED_LISTENERS?在某些地方,比如 confluent 自己的 例如,我只看到一个经纪人,但有多个 KAFKA_ADVERTISED_LISTENERS。这是什么意思?

    没有关系。每个经纪人都有自己的KAFKA_ADVERTISED_LISTENERS 列表。它仅指该特定经纪人,而不是其他经纪人。

    当客户端连接到 kafka 时,它首先与充当“引导服务器”的代理对话。然后,该代理将使用元数据进行响应,包括客户端在谈论特定分区时应该到达的特定代理的地址。这些地址将取决于客户端来自哪个网络。例如。 localhost:9092 用于 docker 主机中的客户端,broker:29092 用于 docker 网络中的客户端。这就是为什么一个经纪人可以拥有多个KAFKA_ADVERTISED_LISTENERS

    1. 此外,在上面提到的同一个融合示例中,在 KAFKA_ADVERTISED_LISTENERS 中有一个侦听器:PLAINTEXT://broker:29092,但是 我们没有在 29092 端口配置任何代理或 Zookeeper,所以 那是在做什么?

    在融合示例中,KAFKA_ADVERTISED_LISTENERS 行实际上将代理配置为侦听 29092。docker 内部的所有客户端都使用此端口来访问代理。

    顺便说一句,29092 不在上面的ports: 映射中,因为它仅由内部客户端使用(不需要暴露给主机端口)。在这个例子中,只需要将 9092 暴露在 docker 之外。

    【讨论】:

      【解决方案2】:

      对于使用 5 位(例如:29092)端口与 4 位(例如:9092)端口?

      为避免在应用程序运行时发生端口冲突,您应该为应用程序配置端口超出服务器的临时端口范围。参考this问答查找,如何查找或修改临时端口范围。所以约定是,在临时端口范围之外找到一个端口并用作应用程序端口。

      配置的代理数量之间是否存在特定关系 到 KAFKA_ADVERTISED_LISTENERS 中提到的听众数量?在 有些地方,比如 confluent 自己的例子,我只看到一个经纪人,但是 多个 KAFKA_ADVERTISED_LISTENERS。这是什么意思?

      Kafka 可以部署在多个节点内的集群中。每个节点在config/server.properties 文件中都有自己的 IP 和端口号。侦听器和广告侦听器的数量取决于 Kafka 部署中的节点数量。

      另外,在上面提到的同一个融合示例中,有一个 监听器:KAFKA_ADVERTISED_LISTENERS 中的 PLAINTEXT://broker:29092,但是 我们没有在 29092 端口配置任何代理或 Zookeeper,所以 这是在做什么?

      Kafka 需要一个 Zookeeper 部署来管理其集群管理,无论 Kafka 只有一个节点还是多个节点。但它可以使用任何端口,并且没有硬性规定使用 29092 端口。

      【讨论】:

      • 你回答的有点含糊,尽管我认为这些问题很中肯。
      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2020-12-31
      相关资源
      最近更新 更多