RMQ/Kafka事务原理 #627
Unanswered
luky116
asked this question in
Technology sharing
Replies: 1 comment
-
The picture is greate! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Kafka/RocketMQ事务消息对比_「违规用户」的博客-CSDN博客
RocketMQ事务原理
来看个例子:
用户A发起订单,支付100块钱操作完成后,能得到100积分,账户服务和会员服务是两个独立的微服务模块,有各自的数据库,按照上文提及的问题可能性,将会出现这些情况:
上面例子引出了RMQ的事务一致性问题,在RMQ中是这样解决的:解决本地事务执行与消息发送的原子性问题。RMQ会先发送prepare消息到Broker端,如果消息发送成功,再执行本地事务。至于消费端是否能消费到消息,是由RMQ的重试机制来保证的,这里不做别的处理。
具体流程如下:
如如果应用模块的事务中断,不能主给broker报告commit或rollback结果,RocketMQ当做UNKNOW处理,RocketMQ事务消息还提供了一个补救方案:定时查询事务消息的数据库事务状态
Kafka事务原理
幂等性发送:保证每条消息只会发送一次
Producer在初始化的时候,Broker会分配一个PID。对于每个PID,该Producer发送数据的每个<Topic, Partition>都对应一个从0开始单调递增的Sequence Number。
Broker端也会为每个<PID, Topic, Partition>维护一个序号,并且每次Commit一条消息时将其对应序号递增。对于接收的每条消息,如果其序号比Broker维护的序号(即最后一次Commit的消息的序号)大1,则Broker会接受它,否则将其丢弃:
上述设计解决了0.11.0.0之前版本中的两个问题:
Beta Was this translation helpful? Give feedback.
All reactions