韶关网站建设第一品牌,永久观看不收费的直播,wordpress获取文章内容过滤空格,wordpress图片后加载很慢首先介绍下LEO和HW LEO#xff1a; 即LogEndOffset#xff0c;表示该副本下次日志记录的偏移量HW#xff1a;即HighWatermark#xff0c;高水位线#xff0c;是所有ISR副本集合中的LEO最小值上图中#xff0c;如果此时三个副本都在ISR集合中#xff0c;那么此时他们的LE…首先介绍下LEO和HW LEO 即LogEndOffset表示该副本下次日志记录的偏移量HW即HighWatermark高水位线是所有ISR副本集合中的LEO最小值上图中如果此时三个副本都在ISR集合中那么此时他们的LEO分别为9,7,6 而HW则为6只有在HW之前的消息才是消费者可见的Kafka消息的整个追加过程可以概括如下生产者客户端发送消息至Leader副本消息被追加到leader副本的本地日志并且会更新日志的偏移量即LEOfollower副本向leader副本请求同步数据leader副本所在的服务器读取本地日志并更新对应拉取的follower副本的信息leader副本所在的服务器将拉取结果返回给follower副本fllower副本收到leader副本返回的拉取结果将消息追加到本地日志中并更新日志的偏移量信息这个过程中我们分析下LEO和HW的变化现在生产者一直往leader带阴影的方框写入消息某一时刻leader的LEO增加至5并且所有副本的HW都还为0 之后fllower副本不带阴影的方框向leader拉取消息在拉取的请求中会带有自身的LEO信息这个LEO信息对应的是FetchRequest请求中的fetch_offset。leader副本返回给follower副本相应的消息并且还带有自身的HW信息如图8-5这个HW信息对应的是FetchResponse中的high_watermark此时两个follower副本各自拉取到了消息并且更新各自的LEO为3 和4 。同时follower副本还会更新自己的HW更新HW的算法是比较当前LEO和leader副本中传送过来的HW的值取最小值作为自己的HW值。当前两个follower副本的HW都为0.接下来follower副本再次请求拉取leader副本中的消息此时leader副本收到follower副本的FetchREquest请求其中带有LEO的相关信息选取其中最小值作为新的HW即3 然后连同消息和HW一起返回FetchResponse给follower如图8-7注意leader副本的HW是一个很重要的东西它直接影响了分区数据对消费者的可见性。两个follower收到新的消息后更新LEO并更新自己的HW为3去leader HW和自身LEO的最小值。在一个分区中leader副本所在的节点会记录所有副本的LEO而follower副本所在的节点只会记录自身的LEO而不会记录其他副本的LEO。对HW而言各个副本所在的节点都只记录自身的HW。ISR 分区中的所有副本统称为AR而ISR是指与leader副本保持同步状态的副本集合当然leader副本本身也是这个集合中的一员。如果副本将leader副本LEO之前的日志全部同步时则认为该副本已经追上了leader副本此时更新该副本的lastCaughtUpTimeMs标识kafka的副本管理器会启动一个副本过期的定时检测任务如果当前时间与副本的lastCaughtUpTimeMs标识差值是否大于参数replica.lag.time.max.ms如果大于则会判断为失效副本被踢出ISR集合还有个就是如果副本滞后的消息大小超过replica.lag.max.messages时也会判断为失效副本