簡體   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