Kafka报错:Couldn't find leaders for Set

本文介绍了一种在使用Spark从Kafka读取数据时遇到的常见异常:找不到partition的Leader。异常的原因通常是由于副本没有及时同步导致。文章提供了检查副本同步状态的方法,并给出了解决方案,包括调整配置参数来提高同步效率。

程序从Kafka读数据的程序运行期间报了如下异常:

org.apache.spark.SparkException: ArrayBuffer(org.apache.spark.SparkException: Couldn't find leaders for Set

这个异常意思是程序找不到partition的Leader。查看监控后发现,在异常发生的时间点,有一个Broker挂掉了。可是对应Topic的replica设置的2,就算挂掉一个,应该有replica顶上啊。后来发现,这是由于存在Partition的Replica没有跟Leader保持同步更新,也就是通常所说的“没追上”。 查看某个Topic是否存在没追上的情况:

kafka-topics.sh --describe --zookeeper XXX --topic XXX

观察其中的Replicas和Isr是否一致,如果出现Isr少于Replicas,则对应Partition存在没追上的情况

 

 

解决方法:

配置文件中增大num.replica.fetchers=节点数的值,此参数是Replicas从Leader同步数据的线程数,默认为1,增大此参数即增大了同步IO。经过测试,增大此值后,不再有追不上的情况

 

副本数default.replication.factor=3,节点的一半

 

确定问题已解决的方法:

启动出现问题的程序,在程序正常计算的状态下,kill掉任意一个Broker后,再观察运行情况。在增大同步线程数之前,kill后程序会报同样的异常,而增大后程序依然正常运行,问题解决。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值