python做网站快么,建设校园网站必要性,找关键词,制作网站 优帮云什么是高水位#xff1f; 高水位表示分区下副本消息到哪里是算正常提交的。比如如下图#xff1a;leader副本写到8了#xff0c;follower副本也写到8#xff0c;那么这个8就代表要求的副本都写入了。消息到8这里才算提交成功#xff0c;后面的15写入了也不算提交成功…什么是高水位 高水位表示分区下副本消息到哪里是算正常提交的。比如如下图leader副本写到8了follower副本也写到8那么这个8就代表要求的副本都写入了。消息到8这里才算提交成功后面的15写入了也不算提交成功消费端只能看到8以前的数据。只有要求的副本都写入15后高水位才会变为15。所以也可以说高水位表示消息的可见性。 后面的LEO表示当前副本消息的最后日志位置高水位HW和LEO结合才能完成副本的同步。 具体怎么同步的 leader副本上存有当前副本的高水位和LEO和其他副本的LEO。我们用发送一条消息举例。 leader副本 follower副本 HW2HW2LEO2LEO2其他副本的LEO2 1当leader副本写入一条日志后HW2,LEO3其他副本LEO2这个时候follower会按自己的LEO2来拉取数据。那么他可以拉取到LEO的数据。如下图的这么一个状态 leader副本 follower副本 HW2HW2LEO3LEO3其他副本的LEO2 2这时follower又来拉取数据了按当前LEO3来拉取数据。leader则知道他的LEO3了则更新其他副本的LEO3。leader判断所有副本的LEO都是3时则更新HW3。 leader副本1,1 follower副本1,1 HW3HW2LEO3LEO3其他副本的LEO3 3leader然后将HW值下发给其他副本其他副本更新自己HW1。 leader副本 follower副本 HW3HW3LEO3LEO3其他副本的LEO3 通过上面的这3个步骤来实现消息的同步。但是第3步可能会发送失败这就会造成leader的HW3了但是其他副本还是HW2。这个时候leader副本挂了其他副本会选举新的leader。那么HW又变为2了等老副本重启后也会变成follower去请求数据也会将自己HW从3变更为2。这就造成了消息丢失。为了解决该问题引入了leader epoch机制来判断日志是否需要截取。我更愿意叫他领导者版本。
领导者版本 递增的版本号该版本号下第一条写入的数据位置。kafka会缓存该值。一个领导者写入的第一条数据上面例子中该值就应该等于1,1。 还是用上面举例子。如果leader副本挂了follower副本被推举为新leader。那么他会看当前版本号对应的位置为1,1自己HW2LEO3133需要保留。更新HW3。只有当版本号对应位置大于自己时才需要截断自己的位置。比如1,4那么自己LEO3明显自己落后了需要将数据截断。