- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一些 java 8 Kafka 应用程序,其中一些是 Kafka 流,其他是普通的生产者/消费者。
对于它们中的每一个,都不存在功能问题,它们在大多数时间都运行良好。
但是,对于它们中的每一个,我都会临时出现 SaslAuthenticationException。由于它们每隔几周左右发生一次,我不确定如何复制/推断根本原因:
错误:
Failed to create channel due to
org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Principal could not be determined from Subject, this may be a transient failure due to Kerberos re-login
堆栈跟踪:
Failed to create channel due to
org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Principal could not be determined from Subject, this may be a transient failure due to Kerberos re-login
at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.firstPrincipal(SaslClientAuthenticator.java:441) ~[kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.<init>(SaslClientAuthenticator.java:135) ~[kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.network.SaslChannelBuilder.buildClientAuthenticator(SaslChannelBuilder.java:244) ~[kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:194) ~[kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:289) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:280) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.common.network.Selector.connect(Selector.java:215) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:864) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.clients.NetworkClient.access$700(NetworkClient.java:64) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1035) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:920) [kafka-clients-2.0.1.jar!/:na]
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:508) [kafka-clients-2.0.1.jar!/:na]
这就是我向 Kafka 提供 JAAS Kerberos 身份验证的方式(在我的配置文件中,我提供了 kdc、realm、keytab、principal 等信息):
@Value("${kafka.sasl.kerberos.kdc}")
private String kdc;
@Value("${kafka.sasl.kerberos.realm}")
private String realm;
@Value("${kafka.sasl.kerberos.keytab}")
private Resource keytab;
@Value("${kafka.sasl.kerberos.principal}")
private String principal;
@Bean
public InMemoryConfiguration kafkaOpts() throws IOException {
System.setProperty("java.security.krb5.kdc", kdc);
System.setProperty("java.security.krb5.realm", realm);
Map<String, Object> options = new HashMap<>();
options.put("keyTab", copyResourceToTempFile(keytab, ".keytab").toString());
options.put("principal", principal);
options.put("useKeyTab","true");
options.put("storeKey","true");
AppConfigurationEntry kafkaClientConfig = new AppConfigurationEntry(
"com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options);
Map<String, AppConfigurationEntry[]> jaasConfigEntries = new HashMap<>();
jaasConfigEntries.put("KafkaClient", new AppConfigurationEntry[] {kafkaClientConfig});
InMemoryConfiguration jaasConfig = new InMemoryConfiguration(jaasConfigEntries);
javax.security.auth.login.Configuration.setConfiguration(jaasConfig);
return jaasConfig;
}
public static Path copyResourceToTempFile(Resource resource, String extension) {
try (InputStream in = resource.getInputStream()) {
Path tempFile = Files.createTempFile("spring-boot-", extension);
Files.copy(in, tempFile, StandardCopyOption.REPLACE_EXISTING);
return tempFile;
} catch (IOException e) {
log.error("Error creating resource to file",e);
return null;
}
}
最佳答案
我们也面临同样的问题。连接 kafka 后,突然失去连接,应用程序重试登录,但失败。但是我们使用以下配置更新 jaas auth 配置文件:
com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
它非常适合我。
关于java - Kafka SaslAuthenticationException 在 SASL_SSL 协议(protocol)的临时基础上发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900214/
我一直在尝试使用 Spark Structured Streaming API 通过 SASL_SSL 连接到 Kafka 集群。我已将 jaas.conf 文件传递给执行者。看来我无法设置 ke
我想创建和使用 java 实用程序来获取信息并创建/修改/删除主题。 要创建实用程序,我正在尝试 this link 中的示例 这就是我在代码中设置属性的方式: Properties adminCon
我正在运行一些 java 8 Kafka 应用程序,其中一些是 Kafka 流,其他是普通的生产者/消费者。 对于它们中的每一个,都不存在功能问题,它们在大多数时间都运行良好。 但是,对于它们中的每一
当我在带有 PLAIN_TEXT 端口 9092 的 Kafka 代理中使用下面的“/usr/bin/kafka-delete-records”命令时,该命令工作正常,但是当我使用 SASL_SSL
SSL 的工作原理是众所周知的,因为它被广泛使用并且在任何地方都得到了很好的描述。简而言之 - SSL 涉及 客户端通过验证服务器 X.509 证书来验证服务器的真实性。 然后使用 diffie-he
当尝试使用golang连接到kafka消费者(Centos中的kafka_2.11-2.0.0)时,出现以下错误: [ 2019_12_12_12:45:05 ] ----> Kafka Consu
我已经能够在未启用 SASL 或 SSL 的情况下成功连接 GCS 连接器。当我启用 SASL 和 SSL 时; connect-standalone 似乎无法与代理通信。 问题似乎出在 gcs-si
我正在使用 node-rdkafka 通过以下选项连接到 IBM MessageHub: var options = { // 'debug': 'all', 'metadata.broker
我正在尝试使用 SASL_SSL 配置 Spring Cloud Kafka,但无法使其正常工作。我相信我的 application.yml 未正确配置,因此请提供建议和帮助。 这是我的 applic
我有一个可以工作的 python kafka,它是代码: class TokenProvider(object): def __init__(self,client_id,client
我是一名优秀的程序员,十分优秀!