Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 强制卡夫卡通过IP而不是主机名连接代理_Apache Kafka_Ssh Tunnel_Kafkacat - Fatal编程技术网

Apache kafka 强制卡夫卡通过IP而不是主机名连接代理

Apache kafka 强制卡夫卡通过IP而不是主机名连接代理,apache-kafka,ssh-tunnel,kafkacat,Apache Kafka,Ssh Tunnel,Kafkacat,我们有以下kafka ssh隧道设置 ssh-N$JUMPHOST-l2181:w.x.y.z:2181-l9092:a.b.c.d:9092-l9091:e.e.f.f:9092 代理IP为a.b.c.d,存在具有相同IP地址的本地lo0设备别名 zookeper IP为w.x.y.z,存在具有相同IP地址的本地设备别名 卡夫卡霍斯特“入口”主持人是e.e.f.f 我们计划的用例是kafkacat-C-b localhost:9091-t 问题: 但是,连接到kafka主机/zookepe

我们有以下kafka ssh隧道设置

ssh-N$JUMPHOST-l2181:w.x.y.z:2181-l9092:a.b.c.d:9092-l9091:e.e.f.f:9092

  • 代理IP为a.b.c.d,存在具有相同IP地址的本地lo0设备别名
  • zookeper IP为w.x.y.z,存在具有相同IP地址的本地设备别名
  • 卡夫卡霍斯特“入口”主持人是e.e.f.f
我们计划的用例是
kafkacat-C-b localhost:9091-t

问题: 但是,连接到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.计算内部

还是不行, 尽管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
问题: 有没有办法告诉卡夫卡通过IP而不是主机名连接经纪人?
如果没有,启动本地dns服务器是否可以解决问题?

这里发生的是:

  • 代理收到客户的请求,并将其返回
    ip-a.b.c.d.eu-central-1.compute.internal
    ,因为这是代理的主机名,也是侦听器的默认值。(这是键)

  • 您的客户机尝试使用提供的元数据向代理发送数据。但由于无法解决ip-a.b.c.d.eu-central-1.compute.internal,它甚至无法到达集群,这是由卡夫卡范围之外的网络问题造成的

    如果在
    /etc/hosts
    上设置该值,则将修复地址解析问题;客户机现在将能够到达集群,解决以前的网络问题

    以下步骤涉及卡夫卡在您的脸上回复
    448\u
    错误代码(确切的代码名可能不同)。您的请求再次失败,现在在集群端:您的客户请求一个名为/引用的
    a.b.c.d
    ,但没有使用该名称注册的侦听器,因为其标识符仍然是
    ip-a.b.c.d.eu-central-1.compute.internal


  • 此处的键位于
    服务器.properties
    配置文件中的
    播发的.listeners
    属性中。 为了使客户端能够连接,请修改该属性,直接在其中设置ip或可解析dns(本例中使用ip):

    广告。监听器=纯文本://a.b.c.d:9092

    现在在客户端,只需使用IP即可与代理连接:

    bootstrap.servers=a.b.c.d:9092


    当收到来自客户端的请求时,kafka会将
    bootstrap.servers
    的内容识别为其注册的侦听器之一,从而接受连接。

    找到了解决方法。如果有人可能会遇到我的问题,请在此发帖

    步骤如下:

    • 为您计划使用的所有主机创建虚拟别名,
      sudo ip添加一个dev lo$ip
    • 这些别名不应具有相同的代理/zookeper IP,但应具有127.0.j.k格式
    • 添加
      ip-..eu-central-1.compute.internal
      <-->
      127.0.[].]
      映射到
      /etc/hosts
    • 通过SSH创建隧道,考虑broker/zookeper的IP和本地(别名)IP的关系
    ssh-N$JUMPHOST-L 2181:::2181-L 9092:::9092…

    然后,您可以通过
    kafkacat-C-b127.0.[]:9092-t

    感谢您深入研究我的复杂问题。我会问我们的devOps团队是否可以更改它,但是我找到了另一个解决方案,我会发布它,以备有人需要。有关广告的更多信息,请参阅此处的回答。侦听器工作原理:为什么不编辑广告的
    。侦听器
    以返回IP地址?@OneCricketeer是,这是前面提到的。我会让我们的DevOps看看他们是否能做到,但通常他们对任何更改都非常保守:)否则,是的,
    compute。例如,内部的
    DNS名称需要通过ELB在外部映射