web-dev-qa-db-fra.com

Kafka et règles de pare-feu

Nous avons une politique de segmentation du réseau assez stricte. J'utilise une instance de fonderie cloud pour déployer une application sur. Les règles de pare-feu ont été configurées pour atteindre le cluster kafka à partir de l'instance de fonderie cloud. Je pense que les règles de pare-feu ont également été configurées pour accéder également à l'instance zookeeper. J'ai besoin pour confirmer celui-là.

Mon problème semble être que je peux produire des messages à kafka, mais mon consommateur ne semble pas les prendre. Il semble se bloquer pendant le "sondage".

Y a-t-il des hôtes ou des ports cachés que je dois gérer pour mes règles de pare-feu qui ne sont pas uniquement les hôtes et les ports standard vers les nœuds kafka et zookeeper?

16
George Smith

Kafka et zookeeper sont des choses différentes. Si vous exécutez les deux sur la même machine, vous devez ouvrir les deux ports, bien sûr.

ports par défaut de kafka:

  • 9092, peut être modifié sur server.properties;

ports par défaut de zookeeper:

  • 2181 pour les connexions client;
  • 2888 pour les connexions suiveurs (autres nœuds de gardien);
  • 3888 pour les connexions entre nœuds;

C'est ça.

Kafka, a également les auditeurs et publicized.listeners propriétés qui crée une certaine confusion sur les premiers utilisateurs. Pour faire simple, listener est l'interface réseau que votre serveur liera et advertised.listeners est le nom d'hôte ou l'adresse IP que votre serveur enregistrera sur zookeeper et écoutera les requêtes. Si vous y mettez un nom d'hôte, vos clients devront utiliser le nom d'hôte pour se connecter. L'url advertised.listeners est celle que vos clients utiliseront pour bootstrap la connexion. Une fois la connexion établie, votre le client obtiendra une connexion à zookeeper pour obtenir les URL des autres courtiers. Votre producteur ne fonctionne pas à cause de cela.

Donc, pour le faire fonctionner, vous devez également ouvrir 2888 sur votre pare-feu, pas seulement 2181. Et @Jaya Ananthram a tort quand il vous dit que kafka a besoin du port 2181. C'est un port zookeeper. Les consommateurs sur kafka 0,10 alambics doivent contacter zookeeper pour persister certaines choses, c'est tout.

Kafka 0.11.0.0 a changé cela et fait que les clients n'ont pas du tout besoin de zookeeper.

17
Marcos Arruda

TL; DR: Il n'y a pas de port caché. Vérifiez la configuration de votre courtier. Assurez-vous qu'il annonce IP/PORT accessible par Kafka consommateurs.


Je suis tombé sur cette question après avoir rencontré le même problème avec Kafka 0.10.1.1 avec la bibliothèque kafka-python en tant que consommateur.

Non. J'ai capturé le trafic réseau et il n'utilise aucun autre port pour communiquer avec Kafka. Si les courtiers sont configurés pour utiliser 9092, ce sera le seul port utilisé par les consommateurs.

Mais après de nouvelles investigations, les configurations de courtier étaient en faute dans mon cas.

kafka.advertised.listeners = PLAINTEXT: // [private_ip]: 9092, SSL: // [public_ip]: 9093 kafka.listeners = PLAINTEXT: //0.0.0.0: 9092, SSL: //0.0.0.0: 9093

J'ai utilisé [public_ip]: 9092 comme serveur bootstrap parce que je n'avais pas configuré PKI mais je voulais tester mon consommateur à partir d'Internet public.

Le consommateur a pu se connecter au courtier mais n'a pu tirer aucun message.

Étant donné que le consommateur s'est connecté à Kafka à l'aide de PLAINTEXT, Kafka a annoncé des adresses de courtier PLAINTEXT au lieu d'adresses SSL. Le consommateur a ensuite tenté d'atteindre Kafka courtiers utilisant des adresses IP privées au lieu d'adresses publiques (comme le révèle la capture réseau brute)

Une fois que l'ICP a été activée et configurée dans les courtiers et les clients, j'ai pu très bien extraire des messages d'Internet public.

3
Duke Grouchy