kafka副本机制学习

作用:

 

1.高可用,数据冗余。不能够提供读的能力,也不能有局部性原理;

注:同一分区的副本会在不同broker上面;

副本同步机制:

读写都在领导副本上面,副本通过主动pull的方式在leader副本里面去拿数据;

 分布式的话出现的问题:

1.领导挂了咋办:

zk能够感知到对应的broker挂掉了,开始进行选主(从ISR,这个定义了和leader的数据可不可以看成同步的,比如落后多少秒没有发fetch操作的就是不同步的,

replica.lag.time.max.ms,是一个动态变化的集合,有人加入,有人跳出。(in SYC replication)里面选(没了的话需要从非ISR集合,也叫非同步副本。里面去选举,Unclean Leader Election));

unclean 选举的影响:

1.提高了可用性2.数据的不一致性;

重平衡:

涉及到的组件:. broker端的coordinator组件 

过程:

1.joinGroup;每个消费者加入组,会向coordinator发送 join Group请求。目的收集到组里成员的订阅消息,coordinator选出消费者组的leader(通常是第一个发join Group的消费者),此时joinGroup响应信息会将消费者组的订阅消息发给leader,由leader制定具体的分区消费分配方案;

SyncGroup(领导者把分配方法发给协调者,其他的成员也会发

SyncGroup,只不过是空的,为了让协调者统一把分区分配方案发给所有成员);

borker端新成员加入的流程:

broker端主动退出的流程:

 broker 崩溃离组:

 

kafka 控制器:

Kafka高水位、低水位

高水位作用:对消费位移节点的描述,定义分区当中哪些消息是可以消费的,位移值大于高水位的说明时未提交的,不能被消费。;帮助完成副本同步;

注:

第一个核心要素是“已提交的消息”。什么是已提交的消息?当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已成功提交。此时,这条消息在 Kafka 看来就正式变为“已提交”消息了。那为什么是若干个 Broker 呢?这取决于你对“已提交”的定义。你可以选择只要有一个 Broker 成功保存该消息就算是已提交,也可以是令所有 Broker 都成功保存该消息才算是已提交。不论哪种情况,Kafka 只对已提交的消息做持久化保证这件事情是不变的。

 

 所有副本都会有有高水位和log End,分区的的高水位就是leader副本的高水位。

高水位的更新:

 

leader epoch:防止数据丢失;

epoch:领导本本更新的话会增加一个一个版本号;

开始位移:leader副本在该epoch上面写入的首条消息的唯一; 

broker会在内存里面缓存 leader epoch的信息,定期会把这些信息保存到checkpoint文件中,主要原因,避免数据丢失;每当leader副本写入新的数据,会跟信这个缓存,假如是新的leader,会增加一个条目,并且吧之前的起始位移找出;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值