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
Uh oh!
There was an error while loading. Please reload this page.
-
Kafka/RocketMQ事务消息对比_「违规用户」的博客-CSDN博客
RocketMQ事务原理
来看个例子:
用户A发起订单,支付100块钱操作完成后,能得到100积分,账户服务和会员服务是两个独立的微服务模块,有各自的数据库,按照上文提及的问题可能性,将会出现这些情况:
上面例子引出了RMQ的事务一致性问题,在RMQ中是这样解决的:解决本地事务执行与消息发送的原子性问题。RMQ会先发送prepare消息到Broker端,如果消息发送成功,再执行本地事务。至于消费端是否能消费到消息,是由RMQ的重试机制来保证的,这里不做别的处理。
具体流程如下:
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