当我们只有一个经纪人时,与拥有多个经纪人时相比,多个 KAFKA_ADVERTISED_LISTENERS 意味着什么?

Som*_*jit 7 apache-kafka docker

我正在学习 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
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用 5 位数(例如:29092)端口4 位数(例如:9092)端口是否有特定的约定?
  2. 配置的代理数量与中提到的侦听器数量之间是否存在特定关系KAFKA_ADVERTISED_LISTENERS在某些地方,例如 confluence 自己的示例,我只看到一个代理,但有多个KAFKA_ADVERTISED_LISTENERS。这意味着什么?
  3. 另外,在上面提到的同一个融合示例中,有一个侦听器:PLAINTEXT://broker:29092in KAFKA_ADVERTISED_LISTENERS,但我们没有在端口 29092 处配置任何代理或 Zookeeper,那么它在做什么呢?

Vit*_*uel 6

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

长话短说

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


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

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

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

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

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

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

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

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