Мы пытаемся использовать кластер Kafka с помощью Java-клиента. Кластер находится за ходом перехода, и, следовательно, единственный способ доступа - через SSH-туннель. Но мы не можем читать, потому что, как только потребитель получает метаданные, он использует исходные хосты для подключения к брокерам. Можно ли переопределить это поведение? Можем ли мы попросить Kafka Client не использовать метаданные?
Потребление из кластера Кафки через SSH-туннель
Ответ 1
Насколько я знаю.
Трюк, который я использовал, когда мне нужно было сделать что-то подобное, было:
- настроить виртуальный интерфейс для каждого брокера Kafka
- откройте туннель для каждого брокера, чтобы брокер n был связан с виртуальным интерфейсом n
- настройте файл
/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>
Ответ 3
Абсолютно лучшим решением для меня было использование kafkatunnel
(https://github.com/simple-machines/kafka-tunnel). Работал как шарм.
Ответ 4
Попробуйте sshuttle следующим образом:
sshuttle -r [email protected] broker-1-ip:port broker-2-ip:port broker-3-ip:port
Конечно, список брокеров зависит от настроек брокера рекламируемых слушателей.