2017-08-18 4 views
3

J'ai un problème de communication avec Kafka sécurisé avec sasl en utilisant des scripts de console. Kafka est sécurisé avec sasl, l'écouteur est SASL_PLAINTEXT et le mécanisme est PLAIN.Kafka "Module de connexion non spécifié dans la configuration JAAS"

Ce que je l'ai fait: J'ai essayé la liste des données en utilisant l'un des scripts kafka:

bin/kafka-consumer-groups.sh --bootstrap-serveur (adresse) --list

Cependant, je reçois "WARN Bootstrap courtier (adresse) déconnecté (org.apache.kafka.clients.NetworkClient)" et la commande échoue, ce qui est compréhensible car il est sécurisé avec sasl. J'ai donc essayé d'ajouter le nom d'utilisateur/mot de passe client à cette commande. D'abord, j'ai essayé d'exécuter kafka-console-consumer script, j'ai utilisé - commande-config pour ajouter le fichier nécessaire. J'ai rapidement découvert que je ne pouvais pas ajouter de fichier jaas directement et que j'avais besoin d'utiliser le fichier .properties, ce que j'ai fait.

Mes fichier de propriétés (garder à l'esprit que les crochets indiquent que les données "censurées", je ne peux pas mettre toutes les données réelles ici):

bootstrap.servers=(address) 
zookeeper.connect=127.0.0.1:2181 
zookeeper.connection.timeout.ms=6000 
sasl.jaas.config=(path)/consumer_jaas.conf 
security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN 
group.id=(group) 

mon fichier jaas:

KafkaClient { 
    org.apache.kafka.common.security.plain.PlainLoginModule required 
    username=(username) 
    password=(password); 
}; 

Ce jaas Le fichier fonctionne dans mes applications Java standard.

Cependant, quand je suis en train d'exécuter soit scénario kafka-consommateurs-groupes ou kafka-console-consommation, je reçois cette erreur:

Exception in thread "main" org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: Login module not specified in JAAS config 
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:94) 
at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:93) 
at org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:51) 
at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:84) 
at kafka.admin.AdminClient$.create(AdminClient.scala:229) 
at kafka.admin.AdminClient$.create(AdminClient.scala:223) 
at kafka.admin.AdminClient$.create(AdminClient.scala:221) 
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.createAdminClient(ConsumerGroupCommand.scala:454) 
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.<init>(ConsumerGroupCommand.scala:389) 
at kafka.admin.ConsumerGroupCommand$.main(ConsumerGroupCommand.scala:65) 
at kafka.admin.ConsumerGroupCommand.main(ConsumerGroupCommand.scala) 
Caused by: java.lang.IllegalArgumentException: Login module not specified in JAAS config 
at org.apache.kafka.common.security.JaasConfig.<init>(JaasConfig.java:68) 
at org.apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.java:59) 
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:85) 

Ce fichier JAAS est une copie directe d'un fichier J'utilise une application Java qui communique avec Kafka et cela fonctionne, mais ici, en utilisant les outils de la console, ça ne marche pas. J'ai essayé de chercher une solution mais je ne trouve rien d'utile.

Quelqu'un peut-il m'aider avec ceci?

Répondre

4

Il existe deux façons de fournir la configuration JAAS aux clients Kafka.

  • Via la propriété client: sasl.jaas.config. Dans ce cas, vous le définissez sur l'entrée de configuration JAAS actuelle. Par exemple, votre fichier de configuration devient:

    bootstrap.servers=(address) 
    zookeeper.connect=127.0.0.1:2181 
    zookeeper.connection.timeout.ms=6000 
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="(username)" password="(password)"; 
    security.protocol=SASL_PLAINTEXT 
    sasl.mechanism=PLAIN 
    group.id=(group) 
    

    Comme vous l'avez déjà compris, vous pouvez utiliser --command-config pour passer un fichier de propriétés kafka-consumer-groups.sh.

  • Via la propriété Java: java.security.auth.login.config. Dans ce cas, vous le définissez sur le chemin de votre fichier JAAS. Aussi, si vous le définissez en KAFKA_OPTS, kafka-consumer-groups.sh le ramassera automatiquement.

    export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf" 
    
+0

Je mets l'entrée de configuration jaas directement dans le fichier .properties et cela a fonctionné. Maintenant, je peux utiliser ces scripts sans aucune erreur. Je ne sais pas pourquoi il a eu des problèmes avec le fichier externe. Je vous remercie! – Tomasz

+1

Lorsque vous utilisez sasl.jaas.config, vous ne pouvez le définir que sur l'entrée de configuration JAAS, il ne fonctionne pas avec le chemin d'accès à un fichier. Au contraire avec la propriété Java, cela ne fonctionne qu'avec le chemin d'accès à un fichier. –