四:一致性协议

数据在跨越多个分布式节点时,为了保障食物的ACID事务,需要一个协调者来协调分布式各个节点的调度,基于这个思想衍生了一致性协议

4.1:2PC阶段提交

顾名思义,二阶段提交,将事务的提交分为两个阶段

kafka producer事物提交时间 kafka 两阶段提交_zookeeper

  • 阶段一 提交事务请求

1、协调者向所有的参与者节点发送事务内容,询问是否可以执行事务操作,并等待其他参与者节点的反馈


2 、各参与者节点执行事务操作


3 、各参与者节点反馈给协调者,事务是否可以执行


  • 阶段二 事务提交

根据一阶段各个参与者节点反馈的 ack, 如果所有参与者节点反馈 ack ,则执行事务提交,否则中断事务


事务提交:


1 、协调者向各个参与者节点发送 commit 请求


2 、参与者节点接受到 commit 请求后,执行事务的提交操作


3 、各参与者节点完成事务提交后,向协调者返送提交 commit 成功确认消息


4 、协调者接受各个参与者节点的 ack 后,完成事务 commit


  • 中断事务

1 、发送回滚请求


2 、各个参与者节点回滚事务


3 、反馈给协调者事务回滚结果


4 、协调者接受各参与者节点 ack 后回滚事务


  • 二阶段提交存在的问题

同步阻塞


二阶段提交过程中,所有参与事务操作的节点处于同步阻塞状态,无法进行其他的操作


单点问题


一旦协调者出现单点故障,无法保证事务的一致性操作


脑裂导致数据不一致


如果分布式节点出现网络分区,某些参与者未收到 commit 提交命令。则出现部分参与者完成数据提


交。未收到 commit 的命令的参与者则无法进行事务提交,整个分布式系统便出现了数据不一致性现


象。


 


4.2:3PC 三阶段提交



3PC 是 2PC 的改进版,实质是将 2PC 中提交事务请求拆分为两步,形成了 CanCommit 、 PreCommit 、



doCommit 三个阶段的事务一致性协议




kafka producer事物提交时间 kafka 两阶段提交_协调者_02


  • 阶段一 : CanCommit

1 、事务询问


2 、各参与者节点向协调者反馈事务询问的响应


  • 阶段二 : PreCommit

根据阶段一的反馈结果分为两种情况


1 、执行事务预提交


1 )发送预提交请求


协调者向所有参与者节点发送 preCommit 请求,进入 prepared 阶段


2 )事务预提交


各参与者节点接受到 preCommit 请求后,执行事务操作


3 )各参与者节点向协调者反馈事务执行


2 、中断事务


任意一个参与者节点反馈给协调者响应 No 时,或者在等待超时后,协调者还未收到参与者的反


馈,就中断事务,中断事务分为两步:


1 )协调者向各个参与者节点发送 abort 请求


2 )参与者收到 abort 请求,或者等待超时时间后,中断事务


  • 阶段三 : doCommit

1、执行提交


1 )发送提交请求


协调者向所有参与者节点发送 doCommit 请求


2 )事务提交


各参与者节点接受到 doCommit 请求后,执行事务提交操作


3 )反馈事务提交结果 北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090


各参与者节点完成事务提交以后,向协调者发送 ack


4 )事务完成


协调者接受各个参与者反馈的 ack 后,完成事务


2、中断事务


1 )参与者接受到 abort 请求后,执行事务回滚


2 )参与者完成事务回滚以后,向协调者发送 ack


3 )协调者接受回滚 ack 后,回滚事务


3PC 相较于 2PC 而言,解决了协调者挂点后参与者无限阻塞和单点问题,但是仍然无法解决网络分


区问题