直击面试现场,关于RocketMQ面试,还是要上一些比较尖锐的面试题,本篇文章也是要答复“直击RocketMQ面试现场”。
1、适用场景 kafka适合日志处理 rocketmq适合业务处理 结论:两者没有区别,根据具体业务定夺 2、性能 kafka单机写入TPS号称在百万条/秒 rocketmq大约在10万条/秒 结论:追求性能方面,kafka单机性能更高 3、可靠性 kafka使用异步刷盘方式,异步Replication rocketmq支持异步/同步刷盘,异步/同步Replication 结论:rocketmq所支持的同步方式提升了数据的可靠性 4、实时性 kafka和rocketmq均支持pull长轮询,rocketmq消息实时性更高 结论:rocketmq胜出 5、支持的队列数 kafka单机超过64个队列/分区,消息发送性能降低严重 rocketmq单机支持最高5W个队列,性能稳定 结论:长远看,rocketmq胜出, 6、消息顺序性 kafka某些配置下,支持消息顺序,但是一台Broker宕机后,就会产生消息乱序 rocketmq支持严格的消息顺序,一台Broker宕机后,发送消息会失败,但是不会乱序 结论:rocketmq胜出 7、消息失败重试机制 kafka消费失败不支持重试 rocketmq消费失败支持定时重试,每次重试间隔时间顺延 8、定时/延时消息 kafka不支持定时消息 rocketmq支持定时消息 9、分布式事务消息 kafka不支持分布式事务消息 rocketmq未来会支持 10、消息查询机制 kafka不支持消息查询 rocketmq支持根据message id查询消息,也支持根据消息内容查询消息 11、消息回溯 kafka可以按照offset回溯消息 rocketmq支持按照时间回溯消息,例如从一天之前的某时某分开始重新消费消息 问题一:push和pull模式 push模式:客户端与服务端建立连接后,当服务端有消息时,将消息推送到客户端 pull模式:客户端不断的轮询请求服务端,来获取新的消息 在具体实现时,push和pull模式都是采用消费端主动拉取的方式,即consumer轮询从broker拉取消息 区别: push 方式中,consumer把轮询过程封装了,并注册了MessageListener监听器,取到消息后,唤醒MessageListener的consumerMessage来消费,用户而言,觉得消息被推送过来的 pull方式中,取消息的过程需要用户自己写,首先通过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合,然后针对每个MessageQueue批量获取消息,一次取完之后,记录该队列下一次要取的开始offset,直到取完了,再换另一个MessageQueue 疑问:既然都是采用pull方式实现,rocketmq怎么保证消息的实时性? 长轮询:rocketmq时采用长轮询的方式实现的,指的是在请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器推送新的数据,再返回,然后进入循环周期 客户端像传统轮询一样从服务端请求数据,服务端会阻塞请求不会立刻返回,直到有数据或者超时才返回给客户端,然后关闭连接,客户端处理完响应信息后再向服务器发送新的请求
前面已经用源码的手段对 RocketMQ 日志复制的实现细节做了一个详细的介绍,可能有不少读者朋友们觉得源码阅读较为枯燥,看的有点云里雾里,本篇将首先梳理一下 RocketMQ DLedger 多副本关于日志复制的三个核心流程图,然后再思考一下在异常情况下如何保证数据一致性。
本文将结合自己使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题、解决问题。
本文将围绕 RocketMQ 5.x 的新特性展开探讨,详细解读其在腾讯云上的实际应用案例,并展望未来的发展规划。
获取上云帮助文档:http://rocketmq.cloud/zh-cn/blog/tocloud-catalog.html
从RocketMQ架构来看,用户在使用客户端生产时时不时会遇到一些问题,这里做了一些总结,大家参考
mq有很多,近期买了《分布式消息中间件实践》这本书,学习关于mq的相关知识。mq大致有有4个功能:
RocketMQ主要有四大核心组成部分:NameServer、Broker、Producer以及Consumer四部分。
本文将深入剖析rocketmq为什么选择自己开发NameServer,而不是选择类似于ZK这样的开源组件。同时对rocketmq的路由注册、路由发现、路由剔除进行剖析。并通过结合核心源码,对笔者的观点进行验证。同时对不同类型消息的重试机制,以及客户端选择nameserver的策略进行深入讲解。
Netty4的主从多线程模型是全局多线程,局部单线程(事件循环),用线程封闭技术实现的无锁化设计实现并发安全。
导语 | Pulsar作为下一代消息中间件的典型代表,在设计和实现上面都具备很好的前瞻性,综合考量了业界现存的一些比较常用的、优秀的消息中间的架构设计、适用场景、运营中的问题等,如目前用的比较多的Kafka、Rocketmq、Inlong-TubeMQ等。本文仅从设计角度出发,说明下Pulsar与Kafka、Rocketmq及腾讯开源的Inlong-TubeMQ在实现上的几点区别和可能遇到的问题,供大家参考。 一、云原生多租户设计 (一)分级命名 Pulsar原生支持多租户设计,非常适合作为云产品进
本文分享RocketMQ Proxy是如何启动的,代码基于https://github.com/apache/rocketmq/tree/release-5.0.0
https://github.com/apache/rocketmq/tree/release-5.0.0
首先注意本次讨论的RokcetMq源码版本为 4.9.4,距离5.0发布 的没有多久。
阅读源码,不推荐从入口开始看到底,毕竟你太年轻,把握不住它的底。我们可以带着问题去研究源码:Producer是如何发消息的?
导语 消息队列 RocketMQ 版(TDMQ for RocketMQ,简称 TDMQ RocketMQ 版)在今日正式公测!TDMQ RocketMQ 是TDMQ系列产品中的一款分布式高可用的消息队列服务,兼容 Apache RocketMQ 的各个组件与概念,RocketMQ 4.6及以上版本的客户端几乎零改造接入。欢迎大家扫描文末二维码使用体验! TDMQ RocketMQ 版的背景 RocketMQ作为典型的业务处理消息队列,主要用于处理订单,支付,积分等业务类型,对信息交换的准确性有极高的要求
线下环境客户端启动会频繁报错响应超时,导致consumer实例化失败,无法启动应用。
Redis是一个快速、开源的内存数据库,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。除了基本的数据存储和检索功能外,Redis还提供了许多高级功能,其中之一就是发布订阅(Pub/Sub)。
广播消费: 当使用广播消费模式时, 消息队列 RocketMQ 会将每条消息推送给集群内所有注册过的客户端, 保证消息至少被每台机器消费一次。
阅读源码,不推荐从入口开始看到底,毕竟你也看不到底。而应该带着问题分析源码:Producer是如何发消息的。
RocketMQ可用于以三种方式发送消息:同步、异步和单向传输。前两种消息类型是可靠的,因为无论它们是否成功发送都有响应。
前文了解了 RocketMQ消息存储的相关原理,本文将讲讲消息消费的过程及相关概念。
过去的 2 月份,EMQX 开源版发布了 v5.0.16、v5.0.17 以及 v5.0.18 三个版本,提供了 MQTT over QUIC 多流(multistream)支持。企业版 v4.3.19 以及 v4.4.15 开发完成,即将发布,数据集成将新增对 HStreamDB 最新版本的适配,并允许设置 RocketMQ 消息生产者投递策略,将相同属性的消息转发到同一 RocketMQ 队列(Queue)中。
我们在使用消息队列时,经常关注的是消息队列收发消息的功能。但好多时候需要对客户端有一定的限制,比如只有持有令牌的客户端才能访问集权,不允许 Producer 发送消息到某一个 Topic,或者某一个 Topic 只能给固定 Consumer 消费。
“分享 RocketMQ 5.X Pop,Ack 源码解读。内容较多建议 PC 上对照代码查看,手机你可能会晕”
昨晚生产系统机房切换,又度过了一个不眠之夜。趁着这段无聊时间,分享一下前一段时间 RocketMQ 踩坑经历
大量业务使用消息中间件进行系统间的解耦、异步化、削峰填谷设计实现。公司内部前期基于RabbitMQ实现了一套高可用的消息中间件平台。随着业务的持续增长,消息体量随之增大,对消息中间件平台提出了更高的要求,此外在运维过程中也遇到了高可用难以保障,功能特性不足等诸多问题。基于遇到的这些问题,决定引入RocketMQ进行替换。本文将介绍基于RocketMQ建设消息中间件平台并实现在线业务无感知的平滑迁移。
最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了。
在企业实践RocketMQ时基本上80%都是不消费问题,而由于消费进度问题导致不消费的问题又是最难确认的和排查的。RocketMQ的消费进度分为本地消费进度管理和远程消费进度管理,分别对应的消费模式是广播消费和集群消费。 本文选自《RocketMQ分布式消息中间件:核心原理与最佳实践》一书,带你层层揭秘RocketMQ如何管理消费进度。 什么是消费进度 消费进度,也就是由Broker管理每一个消费者消费Topic的进度,包含正常提交消费进度和重置消费进度,如下: 上图表示一个消费者组A,部署了2个消
昨晚收到了应用报警,发现线上某个业务消费消息延迟了 54s 多(从消息发送到MQ 到被消费的间隔):
“分享RocketMQ5.X Pop,Ack源码解读。内容较多建议PC上对照代码查看,手机你可能会晕”
既然应用并没有什么问题,我们来看看 RocketMQ 是否有什么问题。一般的 RocketMQ Broker 的日志我们关心:
CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
RocketMQ 最早诞生于淘宝的在线电商交易场景,经过了历年双十一大促流量洪峰的打磨,2016年捐献给 Apache 社区,成为 Apache 社区的顶级项目,并在国内外电商,金融,互联网等各行各业的广大客户落地验证,得到广泛认可。
本文将详细介绍消息发送、消息消费、RocketMQ queryMsgById 命令以及 rocketmq-console 等使用场景中究竟是用的哪一个ID。
RocketMQ是一个高可用、高性能、高可靠的分布式消息队列,相对于kafka更适合处理业务系统之间的消息。
采访嘉宾 | 誓嘉、林清山 编辑 | Tina RocketMQ 是一个来自阿里巴巴的分布式消息中间件,于 2012 年开源,并在 2017 年正式成为 Apache 顶级项目。 2017 年 2 月 20 日,RocketMQ 正式发布 4.0 版本。差不多 5 年之后,我们终于等来了 5.0 版本。 RocketMQ 5.0 专注于消息基础架构的云原生化演进,聚焦在消息领域的后处理场景,支持消息的流式处理和轻计算,帮助用户实现消息的就近计算和分析,并将全面拥抱 Serverless 和 EDA。 据阿
2018 年,做为架构负责人,接到一个架构需求:实现一个简单易用的 RocketMQ SDK 。
RocketMQ是一个统一消息引擎、轻量级数据处理平台。 RocketMQ是⼀款阿⾥巴巴开源的消息中间件。2016年11⽉28⽇,阿⾥巴巴向 Apache 软件基⾦会捐赠RocketMQ,成为 Apache 孵化项⽬。2017 年 9 ⽉ 25 ⽇,Apache 宣布 RocketMQ孵化成为 Apache 顶级项⽬(TLP ),成为国内⾸个互联⽹中间件在 Apache 上的顶级项⽬。它使用Java语言开发,在阿里内部,RocketMQ承接了例如“双11”等高并发场景的消息流转,能够处理万亿级别的消息。
“分享 RocketMQ5.X Pop,Ack 源码解读。内容较多建议 PC 上对照代码查看,手机你可能会晕”
我们在之前也说了不少RocketMQ的知识点了,这一篇要说的是RocketMQ的消息的推拉机制,这个应该也是属于面试的热点,学起来吧
在实际开发中,经常需要查看MQ中消息的内容,RocketMQ提供了多种消息查询方式,给开发和运维带来了极大的便利,一些其他消息中间件,如Kafka,并不具备消息查询能力。
在2007年的时候,淘宝实施了“五彩石”项目,“五彩石”用于将交易系统从单机变成分布式,也是在这个过程中产生了阿里巴巴第一代消息引擎——Notify。在2010年的时候,阿里巴巴B2B部门基于ActiveMQ的5.1版本也开发了自己的一款消息引擎,称为Napoli,这款消息引擎在B2B里面广泛地被使用,不仅仅是在交易领域,在很多的后台异步解耦等方面也得到了广泛的应用。在2011年的时候,业界出现了现在被很多大数据领域所推崇的Kafka消息引擎,阿里在研究了Kafka的整体机制和架构设计之后,基于Kafka的设计使用Java进行了完全重写并推出了MetaQ 1.0版本,主要是用于解决顺序消息和海量堆积的问题。而在2012年,阿里对于MetaQ进行了架构重组升级,开发出了MetaQ 2.0,这时就发现MetaQ原本基于Kafka的架构在阿里巴巴如此庞大的体系下很难进行水平扩展,所以在2012年的时候就开发了RocketMQ 3.0版本。很多人会问到RocketMQ 3.0和MetaQ 3.0的区别,其实这两者是等价的版本,只不过阿里内部使用的称为MetaQ 3.0,外部开源称之为RocketMQ 3.0。在2015年,又基于RocketMQ开发了阿里云上的Aliware MQ和Notify 3.0。在2016年的时候,阿里巴巴将RocketMQ的内核引擎捐赠给了Apache基金会。
RocketMQ 主从复制是 RocketMQ 高可用机制之一,数据可以从主节点复制到一个或多个从节点。
RocketMQ 选择了自己写 NameServer 做注册中心而没有选择 Zookeeper,这是为什么呢?
领取专属 10元无门槛券
手把手带您无忧上云