web-dev-qa-db-fra.com

Kafka - Impossible de trouver une entrée 'KafkaClient' dans la configuration JAAS java

J'ai des problèmes avec un simple programme consommateur Kafka:

18/06/04 18:13:49 ERROR /log/log.txt: org.Apache.kafka.common.KafkaException: Failed to construct kafka consumer
org.Apache.kafka.common.KafkaException: Failed to construct kafka consumer
        at org.Apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.Java:647)
        at org.Apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.Java:542)
        at org.Apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.Java:524)
        at com.carrefour.entequadratura.KafkaHandler.createConsumer(KafkaHandler.Java:96)
        at com.carrefour.entequadratura.KafkaHandler.runConsumer(KafkaHandler.Java:104)
        at com.carrefour.entequadratura.Main.main(Main.Java:48)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:498)
        at org.Apache.spark.deploy.SparkSubmit$.org$Apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:730)
        at org.Apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.Apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.Apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.Apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: org.Apache.kafka.common.KafkaException: Java.lang.IllegalArgumentException: Could not find a 'KafkaClient' entry in the JAAS configuration. System property 'Java.security.auth.login.config' is not set
        at org.Apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.Java:74)
        at org.Apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.Java:60)
        at org.Apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.Java:79)
        at org.Apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.Java:577)
        ... 14 more
Caused by: Java.lang.IllegalArgumentException: Could not find a 'KafkaClient' entry in the JAAS configuration. System property 'Java.security.auth.login.config' is not set
        at org.Apache.kafka.common.security.kerberos.Login.login(Login.Java:295)
        at org.Apache.kafka.common.security.kerberos.Login.<init>(Login.Java:104)
        at org.Apache.kafka.common.security.kerberos.LoginManager.<init>(LoginManager.Java:44)
        at org.Apache.kafka.common.security.kerberos.LoginManager.acquireLoginManager(LoginManager.Java:85)
        at org.Apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.Java:55)
        ... 17 more

Ce sont mes propriétés:

BOOTSTRAP_SERVERS=xxxxxxxxxxxxxxxxxx:6667
GROUP_ID=EnteLoader
AUTO_COMMIT=false
AUTO_COMMIT_INTERVAL=10000
SESSION_TIMEOUT=30000
MAX_POLL_RECORDS=5
KEY_DESERIALIZER=org.Apache.kafka.common.serialization.StringDeserializer
VALUE_DESERIALIZER=org.Apache.kafka.common.serialization.StringDeserializer
SECURITY_PROTOCOL=SASL_PLAINTEXT
SASL_MECHANISM=GSSAPI
SASL_KERBEROS_SERVICE_NAME=kafka

J'ai lu à ce sujet pourrait être un problème possible lié à jaas.conf mais je suis nouveau dans Kafka et je ne sais pas comment le trouver ..

Pourrais-tu m'aider s'il te plaît? Je vous remercie!

4
walzer91

Il y a 2 façons de transmettre jaas conf à votre consommateur kafka.

  1. Si vous utilisez une version de kafka-client supérieure à 0.10.2.1, vous pouvez définir une propriété sasl.jaas.config=org.Apache.kafka.common.security.plain.PlainLoginModule required username="USERNAME" password="PASSWORD";

  2. Comme l'indique votre message d'erreur, vous pouvez définir la propriété système Java.security.auth.login.config, Pour cela, vous devez mettre votre chaîne de configuration jaas dans un fichier et donner ce chemin comme valeur pour la propriété système ci-dessus.

jaas.conf

KafkaClient {
org.Apache.kafka.common.security.plain.PlainLoginModule required
serviceName="yourServiceName"
username="userName"
password="password";
};

Définissez ensuite la variable d'environnement:

System.setProperty("Java.security.auth.login.config","/path/to/jaas.conf");

Je recommanderais la 1ère option car j'ai rencontré des problèmes lorsque j'ai choisi la 2ème option.

5
Thejas Bhat