Kafka scala客户端在broker宕机对发送请求超时问题分析与方案

当Kafka集群中一台服务器宕机,客户端可能会遇到发送请求超时的问题,主要是由于metadata刷新机制导致的。解决方案包括:将`topic.metadata.refresh.interval.ms`设置为负数以仅在发送失败时更新路由,或者使用最新版Java客户端利用异步线程执行发送和metadata更新,避免业务线程堵塞。
摘要由CSDN通过智能技术生成

现象

生产中kafka集群一台服务器硬件故障下线,kafka集群具备高可用特性,下线broker上的leader分区自动切换到新的broker节点,客户端链接随之切换至新的节点继续提供服务,从流量上看也未发现异常情况;集群整体运行平稳,无异常。但后续有一个业务方反馈每10分钟就有少量接口响应时间升高导致超时,查看日志发现发送消息的接口有WARN日志,日志内容如下:

 


分析

         根据服务日志异常调用栈反映出的问题:业务线程在消息发送时,会触发获取远端metadata的服务请求,请求发到了宕机服务器后抛出Exception,并且很有周期性的每10分钟间隔发生少量异常;根据调用栈深入到kafka代码,找到发生问题的位置DefaultEventHandler.handle():

红色方框里的代码,是发送消息前处理的一段逻辑,topicMetadataRefreshInterval为更新metadata路由表的间隔时间,缺省为600000(10分钟)。

 

发送消息前会判断本次发送是否需要更新路由表,判断依据为topicMetadataRefreshInterval指定的时间间隔, 设置不同值时执行情况如下:

topicMetadataRefreshIn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值