每日八股day33

本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写,如有错误纯属本人实力不佳,欢迎各位大佬阅读指正

1.为什么选择RocketMQ的?

高可靠性,消息不会丢失,RocketMQ支持同步刷盘,主从同步机制,消息写到磁盘,并且主从副本备份,Broker挂掉可以切换从节点,保证消息尽量不丢失,适合订单,支付这类对数据可靠要求高的业务。

性能好支持高吞吐,基于顺序写磁盘,底层是CommitLog顺序存储,写入性能很高,可以支持大促场景海量消息。

功能齐全,贴合业务场景,支持事务消息,解决分布式事务场景,支持延迟消息,支持重试队列,死信队列,消息失败的信息可以重试,多次失败进入死信,方便排查问题。

支持消息堆积,当消费速度跟不上生产速度,消息可以大量堆积在Broker,不会直接崩溃,业务高峰期很有用。

2.RocketMQ和Kafka的区别是什么?如何做技术选型?

核心区别:

定位侧重点不同

RocketMQ面向业务消息,更注重消息可靠性,业务功能。

Kafka最初设计面向日志采集,大数据流处理,追求超高吞吐。

吞吐量

kafka吞吐更高,底层批量,零拷贝优化做的很深,适合每秒几十万上百万条日志。

RocketMQ吞吐也很高,足以满足大多是业务并发,但是极限吞吐弱于kafka。

功能支持

RockeMQ,原生支持延时信息,事务消息,死信队列,消息重试,消息查询,业务功能非常完善。

kafka,延时,事务消息支持很弱,没有死信队列,偏向简单的收发消息。

消息可靠度(两者都可做到高可靠)

Kafka通过多副本保证。

RocketMQ支持同步刷盘,异步刷盘+主从,对金融,订单类业务容错方案更友好。

消息堆积能力

都支持海量堆积,kafka底层分段日志,堆积性能更优。

技术选型怎么做?

选Kafka:

适合日志收集,用户行为埋点,大数据实时计算,流处理场景,追求机制高吞吐,不需要延迟,事务等复杂业务信息。

选RocketMQ:

业务解耦,异步通知,订单超时关闭,分布式事务,支付,电商业务消息,业务场景复杂,需要延时消息,重试,死信队列,优先RocketMQ。

3.RocketMQ延时消息的底层原理?

RocketMQ的延迟消息,并不是定时任务实时扫描,也不是等到指定时间才发送到目标队列。

生产者发送延迟消息,发送消息时候,指定延时级别,不会设置一个精确的时间戳。

消息不会直接投递到业务的Topic,Broker收到延迟信息之后,不会把消息放到我们业务的队列,而是转发到一个内部的延迟队列。

定时后台线程轮询,Broker内部开启一个定时任务,不断扫描这个延迟队列里面的消息,每一条消息会根据延时级别,计算出到期时间。

消费者这时才可以消费这条信息,消息到期转发之后,消费者才能拉取到消息进行消费。

相关推荐
肠畔码农5 天前
深度解析 RocketMQ 消费端限流与重平衡(Rebalance):分布式队列分配与流控防雪崩本质
分布式·rocketmq
Rain的Java大神之路5 天前
如何避免订单重复提交
java·redis·后端·面试·架构·rabbitmq·rocketmq
阿里云云原生6 天前
不增加副本,只重构接管路径:RocketMQ 单写有状态服务的高可用新设计
apache·rocketmq
孫治AllenSun6 天前
【RocketMQ】事务消息详解
rocketmq
肠畔码农6 天前
深度解析 RocketMQ 死信队列(DLQ):消费重试的终点站、存储隔离与架构容灾本质
架构·rocketmq
阿昌喜欢吃黄桃7 天前
RocketMQ 同一 JVM 启动多个 Producer 导致 NameServer 只连一个的问题
jvm·rocketmq·mq
lazy H8 天前
不同的消息队列有什么区别?Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ 选型对比
后端·中间件·kafka·rabbitmq·rocketmq
二炮手亮子10 天前
消息队列篇——RocketMQ
rocketmq
笨鸟飞不快10 天前
RocketMQ Lite Topic 流程梳理与设计解读
后端·rocketmq