Kafka(内部详解)如何保证数据的一致性

更新时间:2023-05-16 04:23:29 阅读: 评论:0

Kafka(内部详解)如何保证数据的⼀致性
数据⼀致性保证
⼀致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到
HW-HighWaterMark: client可以从Leader读到的最⼤msg offt,即对外可见的最⼤offt, HW=max(replica.offt)
shij对于Leader新收到的msg,client不能⽴刻消费,Leader会等待该消息被所有ISR中的replica同步后,更新HW,此时该消息才能被client 消费,这样就保证了如果Leader fail,该消息仍然可以从新选举的Leader中获取。
对于来⾃内部Broker的读取请求,没有HW的限制。同时,Follower也会维护⼀份⾃⼰的HW,Folloer.HW = min(Leader.HW, Follower.offt)
数据存储
louisarmstrong
Topic
⼀类消息称为⼀个Topic
Topic逻辑结构
Topic可分为多个Parition;
Parition内部保证数据的有序,按照消息写⼊顺序给每个消息赋予⼀个递增的offt;
为保证数据的安全性,每个Partition有多个Replica
多Parition的优点
并发读写,加快读写速度
多Partition分布式存储,利于集群数据的均衡
加快数据恢复的速率:当某台机器挂了,每个Topic仅需恢复⼀部分的数据,多机器并发
缺点
Partition间Msg⽆序,若想保证Msg写⼊与读取的序不变,只能申请⼀个Partition
Partition
Partition存储结构
每个Partition分为多个Segment
每个Segment包含两个⽂件:log⽂件和index⽂件,分别命名为start_offt.log和start_offt.index
log⽂件包含具体的msg数据,每条msg会有⼀个递增的offt
四级多少分及格
Index⽂件是对log⽂件的索引:每隔⼀定⼤⼩的块,索引msg在该gment中的相对offt和在log⽂件中的位置偏移量
播音培训根据offt查找msg的过程
根据msg的offt和log⽂件名中的start_offt,找到最后⼀个不⼤于msgofft的gment,即为msg所在的gment;
根据对应gment的index⽂件,进⼀步查找msg在log⽂件中的偏移量
从log⽂件的偏移量开始读取解析msg,⽐较msgofft,找到所要读取的msg
Partition recovery过程
每个Partition会在磁盘记录⼀个RecoveryPoint, 记录已经flush到磁盘的最⼤offt。当broker fail 重启时,会进⾏loadLogs。⾸先会读取该Partition的RecoveryPoint,找到包含RecoveryPoint的gment及以后的gment, 这些gment就是可能没有完全flush到磁盘gments。然后调⽤gment的recover,重新读取各个gment的msg,并重建索引
优点
以gment为单位管理Partition数据,⽅便数据⽣命周期的管理,删除过期数据简单
在程序崩溃重启时,加快recovery速度,只需恢复未完全flush到磁盘的gment
通过命名中offt信息和index⽂件,⼤⼤加快msg查找时间,并且通过分多个Segment,每个index⽂件很⼩,查找速度更快
频率副词数据的同步
blamed数据流
Partition的多个replica中⼀个为Leader,其余为follower
Producer只与Leader交互,把数据写⼊到Leader中
Followers从Leader中拉取数据进⾏数据同步
Consumer只从Leader拉取数据
ISR:所有不落后的replica集合, 不落后有两层含义:距离上次FetchRequest的时间不⼤于某⼀个值或落后的消息数不⼤于某⼀个
值,Leader失败后会从ISR中选取⼀个Follower做Leader
数据可靠性保证
当Producer向Leader发送数据时,可以通过acks参数设置数据可靠性的级别雅思写作评分标准
0: 不论写⼊是否成功,rver不需要给Producer发送Respon,如果发⽣异常,rver会终⽌连接,触发Producer更新meta数据;1: Leader写⼊成功后即发送Respon,此种情况如果Leader fail,会丢失数据
-1: 等待所有ISR接收到消息后再给Producer发送Respon,这是最强保证
仅设置acks=-1也不能保证数据不丢失,当Isr列表中只有Leader时,同样有可能造成数据丢失。要保证数据不丢除了设置acks=-1, 还要保证ISR的⼤⼩⼤于等于2,具体参数设置:
pretty怎么读
优秀电影推荐
plicas: 设置为⼤于等于2,保证ISR中⾄少有两个Replica
Producer要在吞吐率和数据可靠性之间做⼀个权衡
数据⼀致性保证
⼀致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到
四六级多少分合格HW-HighWaterMark: client可以从Leader读到的最⼤msg offt,即对外可见的最⼤offt, HW=max(replica.offt)
对于Leader新收到的msg,client不能⽴刻消费,Leader会等待该消息被所有ISR中的replica同步后,更新HW,此时该消息才能被client 消费,这样就保证了如果Leader fail,该消息仍然可以从新选举的Leader中获取。
对于来⾃内部Broker的读取请求,没有HW的限制。同时,Follower也会维护⼀份⾃⼰的HW,Folloer.HW = min(Leader.HW, Follower.offt)
HDFS数据组织

本文发布于:2023-05-16 04:23:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/649526.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   消息   读取
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图