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