我们有以下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服务器是否可以解决此问题?
2条答案
按热度按时间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
作为其注册的侦听器之一,因此接受连接。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>