Java Flink群集上的Kafka jaas验证失败
我遇到了一个非常奇怪的问题Java Flink群集上的Kafka jaas验证失败,java,apache-kafka,apache-flink,apache-beam,jaas,Java,Apache Kafka,Apache Flink,Apache Beam,Jaas,我遇到了一个非常奇怪的问题 Could not find a "KafkaClient" entry in the JAAS configuration. System property "java.security.auth.login.config" is /etc/kafka/kafka_sink_jaas.conf 在单节点ApacheFlink集群上,当我使用ApacheBeamKafkaio消费来自kafka的记录时。JAAS文件包含“KafkaClient”,但Flink群集找不
Could not find a "KafkaClient" entry in the JAAS configuration. System property "java.security.auth.login.config" is /etc/kafka/kafka_sink_jaas.conf
在单节点ApacheFlink集群上,当我使用ApacheBeamKafkaio消费来自kafka的记录时。JAAS文件包含“KafkaClient”,但Flink群集找不到该条目。有人知道原因吗?我想建议你做一些尝试 设置卡夫卡选项 export KAFKA_OPTS=“-Djava.security.auth.login.config=/etc/KAFKA/KAFKA_sink_jaas.conf” 在代码中添加以下内容
System.setProperty("java.security.auth.login.config", "/etc/kafka/kafka_sink_jaas.conf")
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf")
System.setProperty("sun.security.krb5.debug", false)
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false")
希望这会有所帮助。我已经解决了这个问题。这是由flink群集kerberos配置引起的。只需要在flink-conf上设置一些配置,yaml就可以让它正常工作 设置如下:
security.kerberos.login.use-ticket-cache: false
security.kerberos.login.keytab: /etc/kafka/kafka.keytab
security.kerberos.login.principal: kafka@HADOOP.COM
security.kerberos.login.contexts: Client,KafkaClient
在本地运行Flink时,我使用了这个jaas配置文件。如Fred所述,以下选项在群集模式下不起作用
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="MyUserId"
password="MyPwd";
};
security.kerberos.login.use-ticket-cache: false
security.kerberos.login.keytab: /etc/kafka/kafka.keytab
security.kerberos.login.principal: kafka@HADOOP.COM
security.kerberos.login.contexts: Client,KafkaClient
如果我们使用kerberos设置,这是否正确?
security.kerberos.login.principal:MyUserId
为了创建一个keytab文件,我使用了klist。它似乎总是添加一个域名与用户,例如。MyUserId@somedomain.com. 有没有办法避免这种情况?当我在flink本地计算机上运行应用程序时,这个问题并不存在!所以我猜原因就要到弗林克星系团了!我已尝试了您的建议,但无法解决我的问题!kafka.keytab是kafka用户的keytab文件。如果使用您的keytab,则应设置security.kerberos.login.principal:MyUserId。并且security.kerberos.login.context仅具有客户端。