Kafka 分区主副本同步数据过程
LEO log end offset 日志末端偏移量,表示下一次数据写入的offset位移值,如果一个分区有三条消息,那么LEO就是3,LEO是从0开始算的;HW 高水位 highWaterMark缩写,控制消费者可读取消息范围,取一个partition分区中ISR中最小的LEO,consumer最多只能消费到HW所在的位置。另外每个replica都有HW,leader和follower各自负责更
LEO log end offset 日志末端偏移量,表示下一次数据写入的offset位移值,如果一个分区有三条消息,那么LEO就是3,LEO是从0开始算的;
HW 高水位 highWaterMark缩写,控制消费者可读取消息范围,取一个partition分区中ISR中最小的LEO,consumer最多只能消费到HW所在的位置。另外每个replica都有HW,leader和follower各自负责更新自己的HW的状 态。对于leader新写入的消息,consumer不能立刻消费,leader会等待该消息被所有ISR中的replicas同步后更新HW, 此时消息才能被consumer消费。这样就保证了如果leader所在的broker失效,该消息仍然可以从新选举的leader中获取。
对于HW, leader副本和follower副本只保存自身的HW,
对于LEO,follower副本只保存自身的,但是leader副本除了保存自身的,还会保存follower副本的
无论是leader副本所在的节点,还是follower副本所在的节点,分区都会保存所有的副本对象,但是只有本地副本才会有对应的日志文件。
整个数据写入和同步过程:
1、leader副本把数据写入本地磁盘
2、leader副本更新LEO
3、follower副本发送FETCH同步数据请求,携带自身的LEO
4、leader副本会读取底层日志文件中的消息数据,更新本地保存的其他副本LEO
5、leader副本尝试更新ISR列表
6、leader副本更新HW
7、leader副本给follower副本返回数据,携带leader副本的HW值
8、follower副本接收响应并写入数据,更新自身的LEO
9、follower副本更新笨的HW值
更多推荐
所有评论(0)