Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 通过SSH隧道从Kafka集群消费_Apache Kafka_Ssh Tunnel - Fatal编程技术网

Apache kafka 通过SSH隧道从Kafka集群消费

Apache kafka 通过SSH隧道从Kafka集群消费,apache-kafka,ssh-tunnel,Apache Kafka,Ssh Tunnel,我们正试图使用Java客户机从Kafka集群进行消费。集群位于跳转主机后面,因此访问的唯一方法是通过SSH隧道。但我们无法读取,因为一旦使用者获取元数据,它就会使用原始主机连接到代理。这种行为可以被推翻吗?我们可以要求Kafka客户端不要使用元数据吗?据我所知,没有 当我需要做类似的事情时,我使用的技巧是: 为每个Kafka代理设置虚拟接口 打开到每个代理的隧道,以便代理n绑定到虚拟接口n 配置/etc/hosts文件,以便将代理n的播发主机名解析为虚拟接口n的ip 是的 卡夫卡经纪人: br

我们正试图使用Java客户机从Kafka集群进行消费。集群位于跳转主机后面,因此访问的唯一方法是通过SSH隧道。但我们无法读取,因为一旦使用者获取元数据,它就会使用原始主机连接到代理。这种行为可以被推翻吗?我们可以要求Kafka客户端不要使用元数据吗?

据我所知,没有

当我需要做类似的事情时,我使用的技巧是:

  • 为每个Kafka代理设置虚拟接口
  • 打开到每个代理的隧道,以便代理n绑定到虚拟接口n
  • 配置
    /etc/hosts
    文件,以便将代理n的播发主机名解析为虚拟接口n的ip
  • 是的

    卡夫卡经纪人

    • broker1(广告名为broker1.mykafkacluster)
    • broker2(广告名为broker2.mykafkacluster)
    虚拟接口

    • veth1(192.168.1.1)
    • veth2(192.168.1.2)
    隧道

    • broker1:ssh-L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
    • broker2:
      ssh-L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost
    /etc/hosts

    • 192.168.1.1 broker1.mykafkacluster
    • 192.168.1.2 broker2.mykafkacluster
    如果您这样配置系统,您应该能够访问Kafka集群中的所有代理


    注意:如果您将Kafka代理配置为播发ip地址而不是主机名,则该过程仍然可以工作,但您需要使用代理播发的相同ip地址配置虚拟接口。

    如果虚拟接口通过SSH隧道访问代理,您实际上不必添加虚拟接口公布主机名。在客户端的
    /etc/hosts
    中添加一个hosts条目并将隧道绑定到添加的名称就足够了

    假设
    broker.kafkacluster
    是您的代理的播发主机名:

    /etc/hosts

    127.0.2.1 broker.kafkacluster

    隧道:

    ssh-L broker.kafkacluster:9092:broker.kafkacluster:9092
    对我来说绝对最好的解决方案是使用
    kafkatunnel
    ()。工作起来很有魅力。

    试试这样:

    sshuttle -r user@host broker-1-ip:port broker-2-ip:port broker-3-ip:port
    

    当然,代理列表取决于播发的侦听器代理设置

    您不能关闭元数据请求,否则客户端将无法知道哪个代理具有每个分区的当前前导。如果代理被正确配置为公布隧道的ip或域名以及正常的内部侦听端口,那么这应该是可行的,因为我需要连接的kafka群集很多,并且我想从中连接它们的客户端也是动态的,所以我没有做这一切的自由。因此,无法手动更改/etc/hosts。此外,我没有权限更改播发的ip。当我创建一个vif(sudo ip addr add 10.x.x.x/32 dev eth0)(我的代理的ip)时,在再次删除vif之前,我无法再访问代理(我无法建立连接)。(我的经纪人只有一个IP,因此我正在创建一个VIF,其IP与您所说的经纪人相同。)
    127.0.2.1
    绑定到什么?此IP地址不也必须绑定到网络接口吗?本地主机将回复所有127.x.x.x地址此属性是否也适用于MacOS?ping 127.x.x.(2+)会导致超时。对于mac,您需要为每个环回地址添加一个别名,如前所述。我不知道播发的是什么。我的代理的主机名,我只从第三方开发人员处获得了ip,如何才能找到播发的。主机名?