Kafka_CAP理论以及kafka当中的CAP机制


CAP理论

1.分布式系统当中的CAP理论

问题: 分布式系统的最大难点,就是各个节点的状态如何同步!!

解决: 在1998年,由加州大学的计算机科学家 Eric Brewer 提出分布式系统的三个指标,分别是:
一致性:Consistency
• 通过某个节点的写操作结果对后面通过其它节点的读操作可见
• 如果更新数据后,并发访问情况下后续读操作可立即感知该更新,称为强一致性
• 如果允许之后部分或者全部感知不到该更新,称为弱一致性
• 若在之后的一段时间(通常该时间不固定)后,一定可以感知到该更新,称为最终一致性
可用性:Availability
• 任何一个没有发生故障的节点必须在有限的时间内返回合理的结果
分区容忍性:Partition tolerance
• 部分节点宕机或者无法与其它节点通信时,各分区间还可保持分布式系统的功能

Eric Brewer 说,这三个指标不可能同时做到。最多只能同时满足其中两个条件,这个结论就叫做 CAP 定理

一般而言,都要求保证分区容忍性。所以在CAP理论下,更多的是需要在可用性和一致性之间做权衡。

在这里插入图片描述

2.Consistency

Consistency 中文叫做"一致性"。意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1
在这里插入图片描述

接下来,用户的读操作就会得到 v1。这就叫一致性
在这里插入图片描述

问题发生: 用户有可能向 G2 发起读操作,由于 G2 的值没有发生变化,因此返回的是 v0。G1 和 G2 读操作的结果不一致,这就不满足一致性了
在这里插入图片描述

解决办法: 为了让 G2 也能变为 v1,就要在 G1 写操作的时候,让 G1 向 G2 发送一条消息,要求 G2 也改成 v1
在这里插入图片描述

这样的话,用户向 G2 发起读操作,也能得到 v1,体现了一致性(Consistency)

3.Availability

Availability 中文叫做"可用性",意思是只要收到用户的请求,服务器就必须给出回应。
用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。

4.Partition tolerance

在这里插入图片描述

上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。
一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是存在的。即永远可能存在分区容错这个问题

5.kafka当中的CAP机制

满足: kafka满足的是CAP定律当中的CA

具体: kafka首先将数据写入到不同的分区里面去,每个分区又可能有好多个副本,数据首先写入到leader分区里面去,读写的操作都是与leader分区进行通信,保证了数据的一致性原则,也就是满足了Consistency原则。然后kafka通过分区副本机制,来保证了kafka当中数据的可用性

问题: 副本分区当中的数据与leader当中的数据存在差别的问题如何解决??这个就是Partition tolerance的问题。

解决办法: 使用了ISR的同步策略
每个leader会维护一个ISR(a set of in-sync replicas,基本同步)列表;ISR列表主要的作用就是决定哪些副本分区是可用的,也就是说可以将leader分区里面的数据同步到副本分区里面去,决定一个副本分区是否可用的条件有两个:
replica.lag.time.max.ms=10000 副本分区与主分区心跳时间延迟
replica.lag.max.messages=4000 副本分区与主分区消息同步最大差

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值