首页 > 解决方案 > Kafka Streams:Kerberos 票据续订

问题描述

启动 Kafka 流应用程序时,正在使用以下 jaas 文件。但是,流应用程序不会自动更新票证。票证到期后,它会失败,但出现以下异常。我们应该怎么做才能让 Kerberos 票证自动更新?

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
useTicketCache=true
principal="astvy@DEV.ACM.COM"
useKeyTab=true
serviceName="kafka"
keyTab="/home/astvy/astvy.headless.keytab"
renewTGT=true
client=true;
};

错误

Abort sending since an error caught with a previous record (key ED1812 value org.cox.model.HourlyUnit@83e6c99 timestamp 1536165112061) to topic dub_hourlyunit_source1 due to org.apache.kafka.common.errors.SaslAuthenticationException: 
An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: 
GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]) occurred when evaluating SASL token received from the Kafka Broker. 
Kafka Client will go to AUTHENTICATION_FAILED state.

在进行了如下一些更正(关键更改是将 useTicketCache 设置为 false)后,我们没有看到上述问题再次发生,但由于更新 TGT 设置为 7 天,我们将继续监控问题是否已解决。如果以下更改永久解决了该问题,将再检查几天并对此进行确认。

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
useTicketCache=false
principal="astvy@DEV.ACM.COM"
useKeyTab=true
serviceName="kafka"
keyTab="/home/astvy/astvy.headless.keytab"
storeKey=true;
};

标签: apache-kafkakerberosapache-kafka-streamsjaas

解决方案


Kafka Streams 使用 Kerberos 和 SSL,就像配置中的任何其他 Kafka 客户端(如生产者和消费者)一样,所以我真的无法想到 Streams 本身内部可能导致无法续订票证的任何问题。

我在 Google 上进行了一些快速搜索,其中一个可能相关:https ://issues.apache.org/jira/browse/HADOOP-10786 ,如果您使用的是 J8。


推荐阅读