【问题标题】:Kafka - Could not find a 'KafkaClient' entry in the JAAS configuration javaKafka - 在 JAAS 配置 java 中找不到“KafkaClient”条目
【发布时间】:2018-11-14 01:08:03
【问题描述】:

我在使用简单的 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

这些是我的属性:

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

我读到这可能是一个与 jaas.conf 相关的问题,但我是 Kafka 新手,不知道如何找到它..

你能帮帮我吗? 谢谢!

【问题讨论】:

  • 如果您想在集群中进行授权和身份验证,请查看这篇文章:developer.ibm.com/code/howtos/kafka-authn-authz
  • "系统属性 'java.security.auth.login.config' 未设置" > 如果我是你,我会搜索有关该 Java 属性的 Kafka 文档。
  • @walzer91 - 我在 kerberised 集群上回答了一个关于 Kafka 消费者的问题。这是链接-stackoverflow.com/questions/48744660/…。这篇文章中提到的第 1 步是您可能需要的。让我知道这是否有效。
  • 试试export KAFKA_OPTS="-Djava.security.auth.login.config=${PWD}/jaas.conf"环境变量魔法。

标签: apache-spark apache-kafka kerberos


【解决方案1】:

您可以通过 2 种方式将 jaas conf 传递给您的 kafka 消费者。

  1. 如果您使用的 kafka-client 版本大于 0.10.2.1,您可以设置属性 sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="USERNAME" password="PASSWORD";

  2. 正如您的错误消息所说,您可以设置系统属性java.security.auth.login.config,为此您需要将您的 jaas 配置字符串放入一个文件,并将该路径作为上述系统属性的值。

    李>

jaas.conf

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

然后设置环境变量:

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

我会推荐第一个选项,因为我在选择第二个选项时遇到了一些问题。

【讨论】:

  • 您可以在用于创建KafkaConsumer 实例的道具中设置它。同样适用于KafkaProducer 实例。 ``` 属性 props = new Properties(); props.put("sasl.jaas.config", "/path/to/file"); KafkaConsumer 消费者 = 新的 KafkaConsumer(props); ```
【解决方案2】:

检查您的 application.properties 是否设置为 kafka.security.protocol=SASL_PLAINTEXT

然后需要在您的属性中设置 JAAS 身份验证。 System.setProperty("java.security.auth.login.config","/File_Location/jaas.conf");

如果您正在使用身份验证测试您的本地。将身份验证协议设置为纯文本为

kafka.security.protocol=纯文本

它的测试代码。对我来说工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2016-07-11
    • 2022-01-07
    • 2019-12-07
    • 2023-03-15
    • 2019-02-18
    相关资源
    最近更新 更多