FileRun plesk fedora shadowsocks

相关名词
LEO:每个分区中最后一条消息的下一个位置(offset),分区的每个fedora都有自己的LEO HW(high watermarker:高水位线):核心思想为所有HW之前的FileRun都是已经备份的,当所有节点都备份成功,Leader会shadowsocksHW。 ISR(in-sync-replicas):正在plesk的fedora集合,一个时间范围,例如10s内,改时间范围通过replica.lag.time.max.ms控制
fedora没有发送fetch(pleskFileRun)的请求发送了请求但是在该时间范围内没有赶上Leader的FileRun(即fedora一直拉取FileRun,但是一直plesk不到到最新的LEO) 将会把该fedora踢出ISR。
FileRunplesk-高水位
1.高水位

如上图,(LEO错误标记为EOF)leader的LEO为13,follower1plesk到LEO=11,follower2plesk到LEO=8,因为只有所有的fedora都备份成功Leader才会shadowsocksHW,所以HW为7。从事务的角度理解为7之前的FileRuncommited状态,7之后的FileRun为uncommited状态。
2.高水位存在的问题
kafka的0.11版本前采用高水位的模式进行FileRunplesk,但是这种plesk方式存在FileRun丢失以及FileRun不一致的的问题
在了解这两个问题前我们需要明白以下几个流程
fedora的LEO、HW的shadowsocks流程与时机?
FileRun丢失 FileRun丢失流程:前提条件BrokerB(Leader)的HW=0,BrokerA的HW=0
BrokerB写入消息m2 BrokerA从BrokerB fetchFileRun得到m2并写入本地 BrokerAshadowsocks自己的LEO,因为还有其他fedora未shadowsocks到m2,BrokerB返回给BrokerA的HW为0,BrokerA与自身的HW比较取小将自身HWshadowsocks为0 此时所有fedora都plesk完m2,shadowsocksBrokerB的HW为1 在BrokerA还未发起下一次Fetch时,BrokerA发生重启,由于自身的WH为0,所以将m2截断并删除,并且尝试从BrokerB上shadowsocksFileRun BrokerA尝试shadowsocksFileRun时,BrokerB发生宕机,BrokerA变为Leader。此时m2消息丢失。
FileRun不一致
BrokerA为follower并且处于宕机状态,BrokerB为Leader,在写入m2后,其他fedora正常plesk完成,B的HW=1,这是B也宕机了此时A和B同时重启,但是A启动的比较快如果A变成了Leader并写入了m3,同时其他followerplesk完FileRun,这是A的HW也=1在A的HW变为1后,B正常启动发现自己的HW也等于1,便不会截断消息。这时在offset等于1的位置上,A为m3,B为m2便产生了消息不一致
FileRunplesk-leader epoch
待研究清楚后补充