我们正尝试使用Java客户端从Kafka群集中使用。群集是Jump主机的后面,因此唯一的访问方式是通过SSH隧道。但我们无法读取,因为一旦消费者获取元数据,它就会使用原始主机连接到代理。这种行为可以被覆盖吗?我们可以要求Kafka客户端不使用元数据吗?
答案 0 :(得分:6)
据我所知。
当我需要做类似的事情时,我使用的技巧是:
/etc/hosts
文件,以便将代理n的通告主机名解析为虚拟接口的IP。居
Kafka经纪人:
虚拟接口:
<强>隧道强>:
ssh -L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
ssh -L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost
/etc/hosts
:
如果您按照这样配置系统,则应该能够访问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)
对我来说,最好的解决方案是使用kafkatunnel
(https://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
当然,代理列表取决于公告的侦听器代理设置。