SpringCloud(十二)消息中心篇RocketMq与Kafka选型(四)
大家好,我是 杰哥
前三篇RocketMq与Kafka选型(一)、RocketMq与Kafka选型(二)以及RocketMq与Kafka选型(三)中,主要对两者的前几个方面分别进行了分析对比。今天,我们再接着 看看消息中心的其余方面的不同点~(毕竟,也该是终结这一part的时候啦)
01.两者的相同点
02.部署架构不同
03.工作流程不同
04.日志存储方式不同
05.保证消息顺序消息的方法是否相同
06.消息重复机制不同
07.是否支持延时消息
08.消息过滤方式不同
09.消息失败支持重试吗?
10.事务不同
11.是否支持回溯消费?
12.高可用机制不同
一 比较
六个方面
01.是否支持延时消息
1 RocketMQ 支持固定延时等级的延时消息,等级可配置
2 kfaka 不支持延时消息
02.消息过滤方式不同
1 RocketMQ 执行过滤是在Broker端,支持 tag 过滤及自定义过滤逻辑
2 Kafka不支持Broker端的消息过滤 ,需要在消费端自定义实现
03.消息失败是否支持重试
1 Kafka 不支持重试
2 RocketMQ 支持 定时重试 ,每次重试间隔逐渐增加
04.事务机制不同
两个消息中心的事务机制也有所不同。RocketMq通过 二阶段提交和回查机制 能够实现分布式场景下的事务: 两个系统进行处理同一业务流程交易时,保证生产方处理和发送消息阶段两个动作要么同时成功,要么同时失败。 而Kafka则是保证 生产者发送多条消息可以封装在一个事务中,形成一个原子操作
1 RocketMq的事务机制
看这样一个例子:
当用户下了订单,并成功付款100元之后,A系统则会扣掉用户账户的100元,并通过B系统为其账户增加100个积分。而执行步骤是
1)A系统扣减100元
2)将结果通过消息中心发送给包含B服务在内的其他服务
3)B服务执行增加100个积分
此时,若第一步和第二步不是同时执行,即
1) 先执行了扣减动作,但还没来得及发送消息。 则最终的结果是用户的钱被扣掉了,但是B系统未收到任何增加积分的通知,因此导致用户并没有添加到积分
2) 若先发送了消息,还未来得及执行扣减动作。 那么最终将会少收用户100元钱
那么,为了尽可能地保证这一业务流程的执行逻辑,则需要保证A系统的 扣减100元 的操作和 发送消息 的操作要么同时成功,要么同时失败。否则其中任何一个操作成功了而另一个操作失败了,都会出现上述逻辑错乱的情况~
而RocketMq的事务就是来保证这种场景下的逻辑的,我们来看看 RocketMq的事务执行流程
RocketMq的事务机制如图所示:
1)生产者向broker端发送半事务消息
2)Broker 将消息持久化成功之后,向生产者回复ACK ,确认半消息已经发送成功
3)接收到响应,生产者便开始执行本地事务逻辑
4)执行结束之后,生产者根据本地事务执行结果,向Broker 提交二次确认结果(Commit 或Rollback )
此外, 若因网络抖动 等原因,导致Broker未收到步骤4的二次确认结果时,则需要进行消息回查 ,进入第5步:
5)经过固定时间后,Broker向生产者将对该消息发起消息回查
6)生产者检查该条消息的本地事务结果
7)发送方根据检查得到的本地事务的最终状态再次提交二次确认 (Commit 或Rollback)
8)此时,Broker将有可能收到两种状态
a 若Broker收到Commit 状态则将半消息标记为可投递,订阅方最终将收到该消息
b 若Broker收到Rollback 状态则删除半消息,订阅方将不会接受该消息
2、Kafka的事务机制
Kafka处理的事务场景则是:确保跨分区的多个写操作的原子性。它的事务特性本质上代表了三个功能:原子写操作,避免重复消息(Zombie fencing)和读事务消息
1)原子写操作
在同一个事务中的消息,要么同时发生成功,要么统一发送失败
2)避免重复消息
在发送事务消息过程中,若生产者集群中某个实例在发送过程中突然宕机,则会由另一个实例进行来替代它的工作,此时若原实例恢复了,继续进行之前的发送工作,便会出现消息重复 的情况
而为了解决这种情况,类似于zookeeper解决脑裂问题的一个思想,就是引入epoch 。 Kafka会在每次进行事务初始化时 赋一个递增的epoch 值给producer
当宕机的实例 恢复之后,继续发送消息到broker。而broker只会接收具有最新epoch的生产者的请求,并拒绝 掉其他请求,这样便会避免了重复消息(需要注意的是,此处的消息重复场景与上篇文章提到的重复还有一点区别。只是这种因为生产者宕机导致消息重复发送的情况,kafka本身已经通过判断epoch 值来直接给避免掉了)
3)读事务消息
为了保证事务特性,Consumer如果设置了isolation.level = read_committed ,那么它只会读取已经提交了的消息。在Producer成功提交事务后,Kafka会将所有该事务中的消息的Transaction Marker从uncommitted 标记为committed 状态,从而所有的Consumer都能够消费
总结
RocketMq的事务机制是: 两个系统进行处理同一业务流程交易时,保证生产方处理和发送消息阶段两个动作要么同时成功,要么同时失败
而Kafka则是保证 生产者发送多条消息可以封装在一个事务中,形成一个原子操作
05.是否支持回溯消费
两者均支持 消息的回溯消费
均需要先根据时间戳 找到offset ,然后从offset开始消费
06.高可用机制不同
两者的高可用机制不同,具体来说是控制的粒度 不一样
RocketMQ在高可用设计上粒度只控制在Broker 。其保证高可用是通过物理的master-slave主从复制集群部署 来实现(具体的部署方式有四种,可以参考RocketMq与Kafka选型(一)中部署架构比较的部分)
Kafka控制高可用的粒度是放在分区 上。即每个topic的leader分区和replica分区都可以在所有broker上负载均衡 的存储,分区之间存在主从关系。当分区所在的broker挂了之后,会重新进行选举过程,选出一个新的leader分区
二 总结
总而言之
RocketMq和Kafka的对比总结篇共4篇文章 ,分别通过十几个方面,对 RocketMq 和Kafka 进行了全方位的比较。本篇主要对两者的以下几点进行了分析比较
07.是否支持延时消息
08.消息过滤方式不同
09.消息失败支持重试吗?
10.事务不同
11.是否支持回溯消费?
12.高可用机制不同
相信看到这里,通过两个消息中心各个方面特点的分析比较的形式,你已经比较深入地了解到了这两个消息中心了。
总得来说,两者的设计思路还是有很多 相同点 的,比如两者的topic均可分为多个分区,写消息均是采用 顺序写 ,发送消息采用 零拷贝 的方式;其 不同点 主要体现在两者的 部署架构不同 , 日志存储方式不同 , 事务机制不同 以及 高可用机制不太相同 等几点
如果大家有什么疑问,可以翻翻前面几篇文章,如果翻了之后还有疑问,那就欢迎向我留言,探讨一番哦~
嗯,就这样。每天学习一点,时间会见证你的强大~
下期预告:
戴助听器会遮蔽耳鸣吗?你好!耳鸣是没办法完全消除的,戴助听器只是会缓解耳鸣的感受,选择带有耳鸣掩蔽功能的助听器,原理就是,长时间听到外界的声音刺激。而忽略了自己的耳鸣声。每天可以进行半个小时的耳鸣治疗。
戴助听器会对原本的听力有影响吗?一般情况下戴助听器不会对原有听力产生影响,但如果是自身的身体疾病原因引起的听力下降是没有办法的。但是如果佩戴不适合患耳听力补偿的助听器有可能会产生影响。绝大多数人经过科学验配正确使
千元机和旗舰机区别在哪?买旗舰就是交智商税吗?内行人说出实情一两千的中低端手机和五六千的旗舰机,大家会这么选呢?那些不爱折腾,想要一部手机用五六年的,都会偏向选择旗舰机,而选择千元机的消费者普遍爱尝鲜,每年都有换机计划。那么,究竟选择哪种更
刚刚宣布退市7日,企鹅电竞发布退市公告,宣布2022年6月7日23时59分,正式停止运营,届时用户将无法登录企鹅电竞相关产品。企鹅电竞公告截图。公告显示,由于业务发展策略的变更,企鹅电竞相关产
联想小新Pro162022将发全系120Hz高刷屏配HDMI2。0联想小新Pro系列新品已经预热多时,其中首款亮相的应该是小新Pro162022款,根据联想小新官方微博发布的消息,这款产品将会是一款大屏高能轻薄本,硬件方面同时推出Intel和AM
NFT元宇宙数字藏品的造富神话NFT是什么?NFT全称为NonFungibleToken,指非同质化代币,是用于表示数字资产(包括jpg和视频剪辑形式)的唯一加密货币令牌。NFT是区块链的一个条目,而区块链是类
曝小米12UltraMIXFold2同时亮相本月发布一早最新消息称,小米12Ultra和MIXfold2代折叠屏手机将在同一场发布会中发布,目前发布会定在本月底,这也是小米首次在同一场发布会中发布两款机皇。目前小米12Ultra已经
乔布斯看了都要气炸了iPhone15渲染图被曝光近日,有外媒曝光了一组iPhone15的渲染图,通过该组渲染图不难发现,这款iPhone15的名字都被改成了ApplePhone15,总感觉有些山寨的味道,而当我看到ApplePh
嘲笑小米雷军衣品的人这几天,小米创始人雷军发布公司在京高管合影图祝贺公司成立12周年。总有一些人,看到照片之后,又吐槽雷军的穿衣风格。上面西装下面牛仔裤。钢铁直男。连高管都一样。一点也不时尚。小米在京
直降7。19万!标准续航版ModelY上市7月8日,标准续航版的ModelY在国内市场上市,这一车型的到来成功让ModelY的售价跌破30万元,官方指导价27。6万元,比在售的全驱长续航版车型低7。19万元,也仅比Mode
马来西亚变脸,华为5G成弃子,痛失170亿大单全球通讯技术已经在4G阶段停留太久,当前将4G转换到5G已成为全球科技领域中的重要任务。此前西方的发达国家一直是科技领域的领导者,直到国内5G网络的全面发展,我国才初次实现核心技术