通过unclean.leader.election配置解决offset out off range
- kafka集群突然有一个broker退出
查看日志报如下内容
ERROR [ReplicaFetcherThread-3-4], Current offset 3381428 for partition [cmsps,4] out of range; reset offset to 3501150 (kafka.server.ReplicaFetcherThread)
- 首先采取消极等待,等待退出的broker抓取leader副本的分区的数据赶上来,但是并不行
- 想到另一个方法,就是通过Partition Assignments为每个分区的副本分配broker,将退出的broker上的分区副本全部手动分配到其他broker上,理想上是可以的,但当遇到几百个topic时,机械性的操作相当费时费力,而且遇到副本数等于broker数的topic就完全没有办法分配了,也没有办法减少这个topic的副本数,因此放弃。
- 最后无奈,打算使用一个,以前从来不敢使用的配置,就是unclean.leader.election.enable = true,这就意味着不在isr队列中的broker都可以被选举为leader;
配置参数,逐个重启broker,之前退出的broker成功启动当选leader,集群也不再报错。 - broker宕机是解决了,但是我们是在牺牲数据的情况下解决的问题,也就是牺牲可靠性换取可用性。
如有更好的解决办法欢迎探讨;
有关unclean.leader.election.enable参数的详解见链接
Kafka参数图鉴——unclean.leader.election.enable