通过SSH隧道从Kafka群集中消耗

时间:2017-08-24 06:11:04

标签: apache-kafka ssh-tunnel

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

4 个答案:

答案 0 :(得分:6)

据我所知。

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

  1. 为每个Kafka经纪人设置虚拟界面
  2. 打开到每个代理的隧道,以便代理n绑定到虚拟接口n
  3. 配置您的/etc/hosts文件,以便将代理n的通告主机名解析为虚拟接口的IP。
  4. Kafka经纪人

    • 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地址相同的虚拟接口进行配置。

答案 1 :(得分:2)

如果他们宣传主机名,您实际上不必通过SSH隧道添加虚拟接口来访问代理。只需在客户端的<input type="text"/> <button>Add Calories</button> <p>0</p>中添加主机条目,并将隧道绑定到添加的名称即可。

假设/etc/hosts是您的经纪人的advertised.hostname:

broker.kafkacluster
127.0.2.1 broker.kafkacluster

隧道:
/etc/hosts

答案 2 :(得分:1)

对我来说,最好的解决方案是使用kafkatunnelhttps://github.com/simple-machines/kafka-tunnel)。像魅力一样工作。

答案 3 :(得分:0)

像这样尝试sshuttle

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

当然,代理列表取决于公告的侦听器代理设置。