Kafka Streams:Kerberos票证续订

时间:2018-09-10 02:15:35

标签: apache-kafka kerberos apache-kafka-streams jaas

启动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;
};

1 个答案:

答案 0 :(得分:3)

Kafka Streams像配置中的生产者和使用者一样,使用了Kafka客户端,就像其他任何Kafka客户端一样,因此我真的无法想到Streams自身内部可能导致不续签的任何问题。

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