繁体   English   中英

spring 启动 jar 未连接到 Kafka 代理(通过系统变量 java.security.auth.login.config 设置 client_jaas.conf)

[英]spring boot jar not connecting to Kafka brokers ( setting client_jaas.conf through he system variable java.security.auth.login.config)

我有一个 spring boot/spring-kafka 应用程序,它在作为 war 文件部署到外部 tomcat 服务器时正确使用消息,我将 java.security.auth.login.config 环境变量设置为具有用户的 client_jaas.conf 文件名称和密码如下。 现在我正在尝试将相同的应用程序部署到本地 Docker 容器作为 jar 使用内部 tomcat 服务器,看起来它没有连接到 Kafka 代理,据我所知它没有找到 client_jaas.conf 文件。 有没有办法在 application.properties 文件中配置 client_jaas.conf 或提及用户名、密码等的方法,以便我可以获得 Kafka 代理的身份验证。

client_jaas.conf:

KafkaClient {

  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="usse_name"
  password="pwd123";
  };

在 docker 上部署 jar 时,甚至当我从命令提示符运行 jar 时,我在下面遇到此异常:

Caused by: org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:827)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:629)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:207)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createConsumerWithAdjustedProperties(DefaultKafkaConsumerFactory.java:193)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:167)
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createConsumer(DefaultKafkaConsumerFactory.java:141)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.<init>(KafkaMessageListenerContainer.java:607)
    at org.springframework.kafka.listener.KafkaMessageListenerContainer.doStart(KafkaMessageListenerContainer.java:329)
    at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:340)
    at org.springframework.kafka.listener.ConcurrentMessageListenerContainer.doStart(ConcurrentMessageListenerContainer.java:176)
    at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:340)
    at org.springframework.kafka.config.KafkaListenerEndpointRegistry.startIfNecessary(KafkaListenerEndpointRegistry.java:312)
    at org.springframework.kafka.config.KafkaListenerEndpointRegistry.start(KafkaListenerEndpointRegistry.java:257)
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
    ... 22 common frames omitted
Caused by: org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: No serviceName defined in either JAAS or Kafka config
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:160)
    at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:146)
    at org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:67)
    at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:99)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:741)
    ... 35 common frames omitted
Caused by: java.lang.IllegalArgumentException: No serviceName defined in either JAAS or Kafka config
    at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:301)
    at org.apache.kafka.common.security.kerberos.KerberosLogin.configure(KerberosLogin.java:92)
    at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:60)
    at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:111)
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:149)
        

我不确定我是否遗漏了什么,或者我是否应该按照某种方式将我的 client_jaas.conf 作为独立文件或将其放在应用程序属性文件中。 我正在使用非安全端口连接到 Kafka 代理

请帮忙。

我遇到了完全相同的问题。结果在我的本地(在 IDE 中)它只是没有找到 *.conf 文件在预期路径上可见。

选项 1:如 Gary 所说,提供 KafkaJaasLoginModuleInitializer bean。

选项 2:搞乱系统属性

@Configuration
public class KerberosConfig {
    @Value("${java.security.krb5.conf}")
    private String krb5Conf;  // path to your krb5.conf

    @Value("${java.security.auth.login.config}")
    private String authConfig;  // path to you jaas-client-$profile.conf

    /**
     * This implementation configures the run time environment with the relevant
     * Kerberos security properties.
     */
    @PostConstruct
    public void setProperty() {
        System.setProperty("java.security.krb5.conf", krb5Conf);
        System.setProperty("java.security.auth.login.config", authConfig);
    }
}

请参阅文档 您可以使用KafkaJaasLoginModuleInitializer @Bean配置 JAAS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM