当前位置: 首页 > 知识库问答 >
问题:

Kafka-在JAAS配置java中找不到“KafkaClient”条目

董宜然
2023-03-14

我在一个简单的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相关的问题。但是我对Kafka还不熟悉,我不知道怎么找到它。。

你能帮帮我吗?谢谢你!

共有2个答案

锺离霖
2023-03-14

检查你的申请。属性(如果设置为kafka)。安全协议=SASL_明文

然后需要在属性中设置JAAS身份验证。ystem.set财产(java.security.auth.login.config、File_Location/jaas.conf);

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

Kafka。安全协议=明文

它的测试代码。为我工作得很好。

谷梁宏恺
2023-03-14

有两种方法可以将jaas conf传递给kafka消费者。

>

  • 如果您使用的kafka客户端版本大于0.10.2.1,您可以设置属性sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginMoules必需用户名="USERNAME"密码="PASSWORD";

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

    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");
    

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

  •  类似资料:
    • TLS加密:已启用 客户与经纪人之间 TLS加密:已启用 在此之后,我使用以下命令启动了Kafka rest代理: 但是,当我试图通过从Postman:Post:http://ip_of_ec2instance:8082/topics/TestTopic调用服务将事件放到TestTopic上时,我得到了500个错误。但是在EC2实例中,我可以看到错误: 我还可以在ProducerConfig值中看

    • 我试图连接到Kafka使用汇流。Kafka包。但是,我需要使用jaas作为身份验证方法。我找不到使用融合的方法。Kafka为。NET. 编辑: 我收到以下数据连接: 我试图建立这样的联系: 你们知道我怎么设置收到的Jaas吗?

    • 我有一个独立的Kafka经纪人,我试图配置SASL。配置如下。我试图在经纪人身上设置SASL_PLAIN身份验证。 我的理解是,这与听众有关。名称服务器中的配置。属性,我不需要jaas文件。但我已经尝试过一种方法,看看这是否是一种更好的方法。 我对这些命令中的每一个都进行了实验,但都产生了相同的异常。 显示的异常为: KafkaServer启动期间出现致命错误。准备关机。。。找不到“KafkaSe

    • 问题内容: 与使用控制台脚本保护的Kafka通信时出现问题。Kafka受保护,监听器受保护,机制由。 我做了什么:我尝试使用kafka脚本之一列出一些数据: 但是我明白了 命令失败,这是可以理解的,因为它由sasl保护。 因此,我尝试了如何向该命令添加客户端用户名/密码。首先,我尝试运行脚本,我曾经添加必要的文件。我很快发现我无法直接添加文件,我需要使用文件,所以我做到了。 我的属性文件(请记住,

    • 我有Spring启动应用程序,它是接收静态数据,基于一些业务逻辑,我需要将数据转移到两个不同的kafka集群,它们有自己的kerberos密钥提及的jaas文件。 我已经编写了两个不同的生产者实例,在它们的不同对象实例中具有以下属性。 第二制片人 当我将其作为两个服务启动并仅启用生产者实例时,它可以工作,但当我在单个jar中启用两个实例时,只有一个生产者可以工作,其他生产者会遇到身份验证问题。 我