怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?( 五 )


Kafka 的事务有事务协调者角色 , 事务协调者其实就是 Broker 的一部分 。
在开始事务的时候 , 生产者会向事务协调者发起请求表示事务开启 , 事务协调者会将这个消息记录到特殊的日志-事务日志中 , 然后生产者再发送真正想要发送的消息 , 这里 Kafka 和 RocketMQ 处理不一样 , Kafka 会像对待正常消息一样处理这些事务消息 , 由消费端来过滤这个消息 。
然后发送完毕之后生产者会向事务协调者发送提交或者回滚请求 , 由事务协调者来进行两阶段提交 , 如果是提交那么会先执行预提交 , 即把事务的状态置为预提交然后写入事务日志 , 然后再向所有事务有关的分区写入一条类似事务结束的消息 , 这样消费端消费到这个消息的时候就知道事务好了 , 可以把消息放出来了 。
最后协调者会向事务日志中再记一条事务结束信息 , 至此 Kafka 事务就完成了 , 我拿 confluent.io 上的图来总结一下这个流程 。
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?最后至此我们已经知道了 RocketMQ 和 Kakfa 的事务消息全流程 , 可以看到 RocketMQ 的事务消息才是我们想要的 , 当然你要是用的流式计算那么 Kakfa 的事务消息也是你想要的 。
需要贴代码的文章其实很难受 , 这贴的多不好 , 贴的少又怕不清晰 , 真的难 , 如果觉得文章不错记得点个在看哟 。
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?点分享
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?
怅然|消息队列之事务消息,RocketMQ 和 Kafka是如何做的?


推荐阅读