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

最佳答案

据我所知。

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

  • 为每个Kafka经纪人
  • 设置虚拟接口(interface)
  • 为每个代理打开一个隧道,以便代理n绑定(bind)到虚拟接口(interface)n
  • 配置您的/etc/hosts文件,以便将代理n的广告主机名解析为虚拟接口(interface)n的ip。

  • Es。

    卡夫卡经纪人:
  • broker1(广告为broker1.mykafkacluster)
  • broker2(广告为broker2.mykafkacluster)

  • 虚拟接口(interface):
  • 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地址而不是主机名,则该过程仍然可以进行,但是您需要为虚拟接口(interface)配置与代理发布的IP地址相同的虚拟接口(interface)。

    关于apache-kafka - 通过SSH隧道从Kafka群集中消费,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45854168/

    10-13 04:20