kafka-client 2.7.0 使用 SASL 连接 kafka2.2,第一次发送消息抛出 TimeoutException Topic *** 在 1000 毫秒后不存在于元数据中

问题描述 投票:0回答:1

kafka-客户端版本2.7.0

卡夫卡版本2.2

生产者配置

Map<String, Object> props = new HashMap<>(); 
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "server1:19000,server2:19000,server3:19000");
props.put(ProducerConfig.RETRIES_CONFIG, retries); 
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 5000); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);    
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_SSL");
props.put(SaslConfigs.SASL_MECHANISM, "PLAIN");
props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, "config/kfk-sec/client.truststore.jks");
props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, "password");
props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, "config/kfk-sec/client.keystore.jks");
props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, "password");
props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "JKS");
System.setProperty("java.security.auth.login.config", "config/kfk-sec/kafka_cilent_jaas.conf");`

重启生产者时,发送消息会抛出

org.springframework.kafka.KafkaException: Send failed; nested exception is org.apache.kafka.common.errors.TimeoutException: Topic topic1 not present in metadata after 1000 ms.
    at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:573)
    at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:363)
    at fun.linhui.learning.kafka.KafkaSender.lambda$new$0(KafkaSender.java:48)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.kafka.common.errors.TimeoutException: Topic topic1 not present in metadata after 1000 ms.

Kafka的域名是在hosts文件中配置的。 我尝试删除

/etc/sysconfig/network-scripts/ifcfg-eth0
中的dns配置,删除
/etc/resolv.conf
中的名称服务器配置和
service network restart
中。 它不起作用 我应该怎么做才能使使用 sasl 的 kafka-client 第一次更快地发送消息? 30秒太长了

apache-kafka spring-kafka sasl
1个回答
0
投票

我发现问题了。当发生 SSL 握手时,Kafka 代理会对客户端的 IP 地址执行反向 DNS 查找。在此过程中发生超时,因此我们必须在Kafka Broker的hosts文件中配置客户端的IP和主机名才能恢复正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.