web-dev-qa-db-fra.com

Kafka "Module de connexion non spécifié dans la configuration JAAS"

J'ai un problème de communication avec Kafka sécurisé avec sasl à l'aide de scripts de console. Kafka est sécurisé avec sasl, l'écouteur est SASL_PLAINTEXT et le mécanisme est PLAIN.

Ce que j'ai fait: j'ai essayé de répertorier certaines données en utilisant l'un des scripts kafka:

bin/kafka-consumer-groups.sh --bootstrap-server (address) --list

Mais je reçois

WARN Bootstrap broker (address) disconnected (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 du client à cette commande. J'ai d'abord essayé d'exécuter kafka-console-consumer script, j'ai utilisé --command-config pour ajouter le fichier nécessaire. J'ai rapidement découvert que je ne pouvais pas ajouter directement le fichier jaas et je devais utiliser .properties fichier, donc je l'ai fait.

Mon fichier de propriétés (gardez à l'esprit que les crochets indiquent des 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 fichier jaas fonctionne dans mes applications standard Java.

Cependant, lorsque j'essaie d'exécuter kafka-consumer-groups script ou kafka-console-consumer, J'obtiens 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 que j'utilise dans Java application qui communique avec kafka et cela fonctionne, cependant ici, en utilisant les outils de la console, ça ne marche tout simplement pas. J'ai essayé de chercher une solution mais je ne trouve rien d'utile.

Est-ce que quelqu'un peut m'aider avec ça?

12
Tomasz

Il existe 2 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 réelle. 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. De plus, si vous le définissez dans KAFKA_OPTS, kafka-consumer-groups.sh le récupérera automatiquement.

    export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf"
    
18
Mickael Maison