Kafka EC2:"advertised.listeners"和"listeners"的配置问题



我们有 Kafka 在 EC2 实例中运行,具有以下 server.properties:

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=10
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs
log.dirs=/tmp/kafka-logs
# add all 3 zookeeper instances ip here
zookeeper.connect=ip1:2181,ip2:2181,ip3:2181,ip4:2181,ip5:2181
zookeeper.connection.timeout.ms=6000
#Addition of listeners
listeners=EXTERNAL://0.0.0.0:36379,INTERNAL://0.0.0.0:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=EXTERNAL://our-external-endpoint:36379,INTERNAL://ec2-hostname:9092
inter.broker.listener.name=INTERNAL 

我们必须从 EC2 网络外部访问代理,为此我们为每个代理设置了一个终端节点(配置了 NLB 以指向实际代理(。我们能够远程登录到我们端点的实际代理。即使我们也可以使用外部端点作为引导服务器来获取元数据,如下所示:

kafkacat -b our-external-endpoint:36379 -L 
Metadata for all topics (from broker -1: our-external-endpoint:36379/bootstrap):
6 brokers:
broker 10 at compute1.internal:9092
broker 20 at compute2.internal:9092 (controller)
broker 40 at compute3.internal:9092
broker 30 at compute4.internal:9092
broker 50 at compute5.internal:9092
broker 60 at compute6.internal:9092
4 topics:
topic "from_ec2" with 1 partitions:
...

但是我们得到的是实际的内部主机名,而不是外部主机名。在 ZkCli 中,我们可以看到以下数据:

get /brokers/ids/10
{"listener_security_protocol_map":{"EXTERNAL":"PLAINTEXT","INTERNAL":"PLAINTEXT"},"endpoints":["EXTERNAL://our-external-endpoint:36379","INTERNAL://compute1.internal:9092"],"jmx_port":-1,"host":"our-external-endpoint","timestamp":"1575456980136","port":36379,"version":4}

因此,我们的端点配置没有问题,因为我们能够使用端点获取元数据。那么一定是配置有问题,我们尝试过组合,比如listeners=PLAINTEXT://0.0.0.0:9092)只有一个值,advertised.listeners=PLAINTEXT://our-external-endpoint:36379但没有运气。要从我们的外部 EC2 网络生产/消费,我认为在元数据中应该返回我们的外部点,因为内部 EC2 主机名无法从我们的外部网络访问。我们在这里缺少什么?

这是你的问题:

[负载均衡器的] 目标组指向实际的 EC2 代理 IP 和端口 (9092(

实际上,您正在将外部流量转发到内部 (9092( 侦听器。使用 LB,如果需要,您可以拥有任何外部端口 - 这里的关键是网络流量到达 Kafka 代理的点。如果来自 LB 的流量到达 9092 上的代理,则代理正在使用比您定义的内部侦听器。

更改 LB 以将流量路由到外部侦听器、端口36379

参考:https://rmoff.net/2018/08/02/kafka-listeners-explained/(我知道你已经看到了,但会帮助其他人发现这个答案(

最新更新