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