新版本ISR 为啥 移除replica.lag.max.messages这个参数
ISR
上節(jié)我們涉及到ISR (In-Sync Replicas),這個(gè)是指副本同步隊(duì)列。副本數(shù)對(duì)Kafka的吞吐率是有一定的影響,但極大的增強(qiáng)了可用性。默認(rèn)情況下Kafka的replica數(shù)量為1,即每個(gè)partition都有一個(gè)唯一的leader,為了確保消息的可靠性,通常應(yīng)用中將其值(由broker的參數(shù)offsets.topic.replication.factor指定)大小設(shè)置為大于1,比如3。 所有的副本(replicas)統(tǒng)稱(chēng)為Assigned Replicas,即AR。ISR是AR中的一個(gè)子集,由leader維護(hù)ISR列表,follower從leader同步數(shù)據(jù)有一些延遲(包括延遲時(shí)間replica.lag.time.max.ms和延遲條數(shù)replica.lag.max.messages兩個(gè)維度, 當(dāng)前最新的版本0.10.x中只支持replica.lag.time.max.ms這個(gè)維度),任意一個(gè)超過(guò)閾值都會(huì)把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也會(huì)先存放在OSR中。AR=ISR+OSR。
Kafka 0.9.0.0版本后移除了replica.lag.max.messages參數(shù),只保留了replica.lag.time.max.ms作為ISR中副本管理的參數(shù)。為什么這樣做呢?replica.lag.max.messages表示當(dāng)前某個(gè)副本落后leader的消息數(shù)量超過(guò)了這個(gè)參數(shù)的值,那么leader就會(huì)把follower從ISR中刪除。假設(shè)設(shè)置replica.lag.max.messages=4,那么如果producer一次傳送至broker的消息數(shù)量都小于4條時(shí),因?yàn)樵趌eader接受到producer發(fā)送的消息之后而follower副本開(kāi)始拉取這些消息之前,follower落后leader的消息數(shù)不會(huì)超過(guò)4條消息,故此沒(méi)有follower移出ISR,所以這時(shí)候replica.lag.max.message的設(shè)置似乎是合理的。但是producer發(fā)起瞬時(shí)高峰流量,producer一次發(fā)送的消息超過(guò)4條時(shí),也就是超過(guò)replica.lag.max.messages,此時(shí)follower都會(huì)被認(rèn)為是與leader副本不同步了,從而被踢出了ISR。但實(shí)際上這些follower都是存活狀態(tài)的且沒(méi)有性能問(wèn)題。那么在之后追上leader,并被重新加入了ISR。于是就會(huì)出現(xiàn)它們不斷地剔出ISR然后重新回歸ISR,這無(wú)疑增加了無(wú)謂的性能損耗。而且這個(gè)參數(shù)是broker全局的。設(shè)置太大了,影響真正“落后”follower的移除;設(shè)置的太小了,導(dǎo)致follower的頻繁進(jìn)出。無(wú)法給定一個(gè)合適的replica.lag.max.messages的值,故此,新版本的Kafka移除了這個(gè)參數(shù)。
?
總結(jié)
以上是生活随笔為你收集整理的新版本ISR 为啥 移除replica.lag.max.messages这个参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows下部署oracle11,w
- 下一篇: php网页加查询框,Twentytwel