由于kafka开启SASL认证后导致首次发送失败

Posted ayi12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于kafka开启SASL认证后导致首次发送失败相关的知识,希望对你有一定的参考价值。

一、需求背景:

springboot项目配置两个不同kafka集群。原有kafka(kafka1)配置保持不变,采用默认配置方式,第二个kafka(kafka2)采用自定义配置进行配置。

二、问题现象以及分析:

向kafka2推送消息时,第一次总是发送失败,并出现以下日志。

org.apache.kafka.common.errors.TimeoutException: Expiring 6 record(s) for topicxxx: 30031 ms has passed since batch creation plus linger time

1.将两个kafka配置调换位置后,kafka2依然会出现这个报错,确认本地代码没有问题。

2.分析两个kafka异同,kafka1是单机、默认配置,kafka2是集群且开启了 SASL认证、配置情况未知,将kafka1更换为新的集群,经过测试无问题,因此初步定位开启SASL认证导致的。

通过翻阅资料,在开启SASL认证后,底层在InetAddressSocket时将ip理解成域名进行解析,解析失败后才会以正常的ip进行解析,而在域名解析时,会花费较多的时间。而在使用kafka2进行消息推送时,由于时懒加载方式,只有send时才会初始化kafka配置,因此导致推送的元数据在完成认证前过期而抛出以上日志。

三、解决方案:

  1. 增加元数据失效时间;

  1. 通过配置客户端所在服务器域名解决。

以上是关于由于kafka开启SASL认证后导致首次发送失败的主要内容,如果未能解决你的问题,请参考以下文章

开启kafka密码认证

开启kafka密码认证

Kafka开启SASL认证

kafka使用SASL/PLAIN认证

Kafka增加安全验证安全认证,SASL认证,并通过spring boot-Java客户端连接配置

go kafka 配置SASL认证及实现SASL PLAIN认证功能