Apache kafka 通过SSH隧道从Kafka集群消费
我们正试图使用Java客户机从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
/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代理配置为播发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,如何才能找到播发的。主机名?