上文我们已经学到,
- 一个Topic(主题)会有多个Partition(分区)
- 为了保证高可用,每个分区有多个Replication(副本)
- 副本分为Leader 和 Follower 两个角色,Leader副本对外提供读写服务,Follower 从Leader同步数据
- 当Leader副本挂掉,从ISR中选举一个Follower副本成为新的Leader对外继续提供服务
- 那么就要保证分区各副本间数据一致性
图1:
见上图,先来熟悉一下
图2:
高水位可以理解为一个横切面
,存储的也是Offset
(位移)值,
拉齐分区ISR所有副本已经写入的消息,保证HW前的消息你有我有全都有啊,水桶原理
这里要注意,所有副本指的是ISR列表中的同步副本,OSR中同步慢的副本不管
为啥只管ISR列表,不管OSR列表中的副本呢?
这也就是为啥要搞HW 和 LEO 的原因,搞HW就是为了当Leader宕机了,会从ISR列表中选举一个Follower成为新的Leader继续对外提供服务,来实现高可用,而HW能保证任意一个Follower都包含对消费者可见的所有数据,实现数据的可靠性
而OSR是同步过慢的副本,选举也不选它,所以记录HW值也没必要管OSR列表
就是下一个消息要写入的Offset
(位移),
如上图1,当前副本最后一条消息的位移是13,下一个消息写入14位置,该副本的LEO值就是14
以图2 中为例:
Leader 的LEO = 14
Follower1 的 LEO = 12
Follower2 的 LEO = 8
Fetch
请求,一旦获取数据后就写入log
(日志)文件中进行备份,同时更新LEO值以图2 中为例:
Leader 、Follower1 、 Follower2 的 HW = 7
Follower的HW值是怎么算的呢?
Leader 的HW值是怎么算的呢?
最小的LEO值作为HW
感觉有点迷糊? 我们再来一篇举个栗子,掰BoBo说陷一下子,跟住奥~
** 都说kafka最厉害的地方是他的设计思想,果然有很多精妙之处啊**
本文发布于:2024-01-28 06:21:36,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063941005424.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |