Nous essayons de consommer à partir d'un cluster Kafka en utilisant le client Java. Le cluster est derrière un Jump Host et par conséquent, le seul moyen d'y accéder est via un Tunnel SSH. Mais nous ne pouvons pas lire car une fois que le consommateur récupère les métadonnées, il utilise les hôtes d'origine pour se connecter aux courtiers. Ce comportement peut-il être ignoré? Peut-on demander à Kafka Client de ne pas utiliser les métadonnées ?
Pas autant que je sache.
L'astuce que j'ai utilisée lorsque je devais faire quelque chose de similaire était:
/etc/hosts
fichier afin que le nom d'hôte annoncé du courtier n soit résolu en ip de l'interface virtuelle n.Es.
courtiers Kafka:
Interfaces virtuelles:
Tunnels:
ssh -L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
ssh -L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost
/etc/hosts
:
Si vous configurez votre système comme ceci, vous devriez pouvoir atteindre tous les courtiers de votre cluster Kafka.
Remarque: si vous avez configuré vos courtiers Kafka pour publier une adresse IP au lieu d'un nom d'hôte, la procédure peut toujours fonctionner mais vous devez configurer les interfaces virtuelles avec la même IP adresse que le courtier annonce.
Vous n'avez pas réellement besoin d'ajouter des interfaces virtuelles pour accéder aux courtiers via le tunnel SSH s'ils annoncent un nom d'hôte. Il suffit d'ajouter une entrée d'hôtes dans /etc/hosts
de votre client et liez le tunnel au nom ajouté.
En supposant broker.kafkacluster
est le nom d'hôte annoncé de votre courtier:
/etc/hosts
:
127.0.2.1 broker.kafkacluster
Tunnel:ssh -L broker.kafkacluster:9092:broker.kafkacluster:9092 <brokerhostip/name>
La meilleure solution pour moi était d'utiliser kafkatunnel
( https://github.com/simple-machines/kafka-tunnel ). A fonctionné comme un charme.
Essayez sshuttle comme ceci:
sshuttle -r user@Host broker-1-ip:port broker-2-ip:port broker-3-ip:port
Bien sûr, la liste des courtiers dépend du paramètre de courtier des auditeurs annoncé.