Flink + Kafka + Kerberos:在JAAS配置中找不到“ KafkaClient”条目

时间:2019-09-16 14:12:06

标签: apache-kafka apache-flink kerberos jaas

我正在使用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上有一些文件,它们不包含任何代码(仅包含一些默认注释和空配置)。

1 个答案:

答案 0 :(得分:0)

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

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