Потребление из кластера Кафки через SSH-туннель

Мы пытаемся использовать кластер Kafka с помощью Java-клиента. Кластер находится за ходом перехода, и, следовательно, единственный способ доступа - через SSH-туннель. Но мы не можем читать, потому что, как только потребитель получает метаданные, он использует исходные хосты для подключения к брокерам. Можно ли переопределить это поведение? Можем ли мы попросить Kafka Client не использовать метаданные?

Ответ 1

Насколько я знаю.

Трюк, который я использовал, когда мне нужно было сделать что-то подобное, было:

  1. настроить виртуальный интерфейс для каждого брокера Kafka
  2. откройте туннель для каждого брокера, чтобы брокер n был связан с виртуальным интерфейсом n
  3. настройте файл /etc/hosts таким образом, чтобы объявленное имя хоста брокер n разрешилось к ip виртуального интерфейса n.

Es.

Брокеры 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, который рекламирует брокер.

Ответ 2

Вам фактически не нужно добавлять виртуальные интерфейсы для доступа брокеров через SSH-туннель, если они рекламируют имя хоста. Этого достаточно, чтобы добавить запись хоста в /etc/hosts вашего клиента и привязать туннель к добавленному имени.

Предполагая, что broker.kafkacluster - это рекламируемое имя вашего брокера:

/etc/hosts:
127.0.2.1 broker.kafkacluster

Туннель:
ssh -L broker.kafkacluster:9092:broker.kafkacluster:9092 <brokerhostip/name>

Ответ 4

Попробуйте sshuttle следующим образом:

sshuttle -r [email protected] broker-1-ip:port broker-2-ip:port broker-3-ip:port

Конечно, список брокеров зависит от настроек брокера рекламируемых слушателей.