强制kafka通过ip连接代理,而不是通过主机名

lndjwyie  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(1128)

我们有以下Kafkassh隧道设置。 ssh -N $JUMPHOST -L 2181:w.x.y.z:2181 -L 9092:a.b.c.d:9092 -L 9091:e.e.f.f:9092 broker ip为a.b.c.d,存在具有相同ip地址的本地lo0设备别名
zookeper ip为w.x.y.z,存在具有相同ip地址的本地设备别名
Kafka霍斯特“入口”主持人是e.e.f.f
我们计划的用例是 kafkacat -C -b localhost:9091 -t <topic> 问题:连接到kafka主机/zookepers工作正常,但是kafka客户端(例如kafkacat)正在通过其主机名访问代理, ip-a.b.c.d.eu-central-1.compute.internal ,而不是他们的ip。
为了抵消,我在/etc/hosts中添加了条目 a.b.c.d ip-a.b.c.d.eu-central-1.compute.internal 仍然不起作用,尽管ping到该主机名是成功的。
nslookup提供

Non-authoritative answer:
Name:   ip-a.b.c.d.eu-central-1.compute.internal
Address: a.b.c.d

**server can't find ip-a.b.c.d.eu-central-1.compute.internal: NXDOMAIN

问:有没有办法告诉Kafka通过ip而不是通过主机名连接经纪人?如果不是,启动本地dns服务器是否可以解决此问题?

new9mtju

new9mtju1#

这里发生的是:
经纪人收到客户的请愿书并将其退回 ip-a.b.c.d.eu-central-1.compute.internal ,因为这是代理的主机名和侦听器的默认值(这是关键)
您的客户机尝试使用提供的元数据向代理发送数据。但它无法解决 ip-a.b.c.d.eu-central-1.compute.internal ,它甚至没有到达集群就失败了,这是由Kafka范围之外的网络问题造成的。
如果你把值设置为 /etc/hosts ,您将修复地址解析问题;客户机现在可以访问集群,解决以前的网络问题。
以下步骤涉及Kafka回答 448_in_your_face 错误代码(确切的代码名可能不同)。您的请求再次失败,现在在集群端:您的客户机请求一个名为/referenced的代理 a.b.c.d ,但没有使用该名称注册的侦听器,因为其标识符仍然是 ip-a.b.c.d.eu-central-1.compute.internal .
这里的钥匙在 advertised.listeners 物业,位于 server.properties 配置文件。为了使您的客户端能够连接,请修改该属性,直接在那里设置ip或可解析dns(在本例中使用ip): advertised.listeners=PLAINTEXT://a.b.c.d:9092 现在在客户端,只需使用ip即可连接到代理: bootstrap.servers = a.b.c.d:9092 收到委托人的请愿书后,Kafka将承认请愿书的内容 bootstrap.servers 作为其注册的侦听器之一,因此接受连接。

guykilcj

guykilcj2#

找到了解决方法。如果有人可能会遇到我的问题,请在这里发帖。
步骤如下:
为您计划使用的所有主机创建虚拟别名, sudo ip add a dev lo $ip 这些别名不应具有相同的broker/zookeper IP,而是127.0.j.k格式
添加 ip-<>.<>.<>.<>.eu-central-1.compute.internal < -- > 127.0.[].[] Map到 /etc/hosts 通过ssh创建隧道,考虑broker/zookeper的ip和本地(别名)ip的关系 ssh -N $JUMPHOST -L 2181:<localIP>:<remoteIP>:2181 -L 9092:<localIP>:<remoteIP>:9092 ... 然后你可以通过 kafkacat -C -b 127.0.[].[]:9092 -t <topic>

相关问题