最近在看这一块的知识,刚好也遇到这个疑问,我的理解是,HW是水位线,类似木桶效应,它的值一直是所有副本中最低的那个值,LEO 是当前数据最大offset值。因为副本同步过程是需要时间的,所以两者不可能是一直相等,只有=-1,且发送成功时,是相等。对于=-1来说,只是发送消息是否所有副本进行了保存,成功就是都是存好了,失败就是没存好。
需要明确一点,ack是为了保证数据完整性,即上传部分不出现问题,hw是为了保证数据一致性,即consumer消费数据不出现问题,两者功能看着相似,但作用不冲突。我也想了好久才缓过来。
你提供的链接已拜读,已经对LEO和HW的更新机制有了基本了解。但还是有点疑问,就是ack=-1的解释是producer只有收到分区内所有副本的成功写入的通知才认为成功,这里的所有副本“成功写入”指的是follow的LEO更新成功的时机么,还是leader的remote LEO更新成功,还是什么?
原提问的第二个问题大神有指导么,有没有可以查看当前HW,LEO值的方法呢。我之前搜到一个帖子说查看replication-offset-checkpoint中的值就是HW,但是我在实际环境中看,follower的这个文件值有大于leader的情况,搞得我也不清楚这个是否正确。
我看解释是说ack=-1表示所有ISR都接收成功才能认为producer成功。你说ack=-1只是leader确认接收到消息会返回响应,那么和ack=1的区别是什么?