【问题标题】:Flink + Kafka + Kerberos: Could not find a 'KafkaClient' entry in the JAAS configurationFlink + Kafka + Kerberos:在 JAAS 配置中找不到“KafkaClient”条目
【发布时间】:2021-06-11 15:06:04
【问题描述】:

我正在使用 Flink 1.8 尝试连接到 Kerberized Kafka Broker。

我在 jaas.conf 中设置 KafkaClient 条目,如下所示:

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useTicketCache=true
    renewTicket=true
    serviceName="kafka";
};
Client {  
   com.sun.security.auth.module.Krb5LoginModule required
   useTicketCache=true
   renewTicket=true
   serviceName="zookeeper";
};

并通过在代码中设置此属性来指向该 jaas 文件,该属性将与其余所需属性(bootstrap.servers 等)一起传递给 Kafka Consumer...

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", args[0]);
properties.setProperty("security.protocol", "SASL_PLAINTEXT");
properties.setProperty("java.security.auth.login.config","/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");

我还尝试在启动 flink 应用程序之前在 KAFKA_OPTS 环境变量上指定 jaas.conf 路径。

我得到的错误是:

java.lang.IllegalArgumentException:找不到“KafkaClient” JAAS 配置中的条目。系统属性 'java.security.auth.login.config' 是 /tmp/jaas-6335181385007718768.conf

我不知道 jaas.conf 文件是否应该自动放入临时文件,或者它没有很好地检测指定的配置文件。临时文件在发生错误后被删除,但在 tmp 上有一些文件来自以前的启动,它们不包含任何代码(只有一些默认的 cmets 和空配置)。

【问题讨论】:

  • 要从 JAAS 获取一些调试级别的日志记录,请添加 -Dsun.security.krb5.debug=true-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext >> 但这不会解释该临时文件是如何创建并首先强制进入 JAAS...

标签: apache-kafka apache-flink kerberos jaas


【解决方案1】:

设置有两个问题;首先,传递 jaas conf 文件位置,然后传递 jaas conf 文件内容

java.security.auth.login.config 是系统属性。所以你应该通过在代码中设置系统属性来传递

System.setProperty("java.security.auth.login.config", "/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");

或通过在运行时设置 JVM 参数 -D。

-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf

jaas 文件条目应配置为使用 keytabs 或用户名/密码

kafka-keytab-auth-jaas.conf

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab = true   
    useTicketCache=false
    storeKey = true
    keyTab="/tmp/kafka.service.keytab"
    principal="****@REALM"
    serviceName="kafka";
};

kafka-password-auth-jaas.conf

KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="user"
  password="userpassword";
};

【讨论】:

  • 您好,谢谢您的回答。但是在代码中使用“java.security.auth.login.config”时,错误提示在/tmp 内的临时jaas 文件中找不到KafkaClient 条目,它没有读取指定的jaas.conf 文件的内容代码(这是我尝试的第一件事)。我终于通过将 KafkaClient 配置内联在代码中来使其工作(而不是放置文件位置,我将 jaas 配置中的不同条目写在一行中,每个条目之间有一个空格)。
猜你喜欢
  • 2018-11-14
  • 2019-01-31
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2016-07-11
  • 2022-01-07
  • 2021-02-21
  • 2019-12-07
相关资源
最近更新 更多