flink+kafka+kerberos:在jaas配置中找不到“kafkaclient”条目

vpfxa7rd  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(984)

我正在使用Flink1.8尝试连接到一个KerberizedKafka经纪人。
我正在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使用者。。。

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\u opts环境变量上指定jaas.conf路径。
我得到的错误是:
java.lang.illegalargumentexception:在jaas配置中找不到“kafkaclient”条目。系统属性“java.security.auth.login.config”是/tmp/jaas-6335181385007718768.conf
我不知道jaas.conf文件是否应该自动放入临时文件,或者它没有很好地检测到指定的配置文件。临时文件在错误发生后被删除,但是tmp上有一些以前启动的文件,它们不包含任何代码(只有一些默认注解和空配置)。

4si2a6ki

4si2a6ki1#

设置中存在两个问题;首先,传递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文件条目应配置为使用keytab或用户名/密码
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";
};

相关问题