-
RocketMQ 面试路线最全整理(附面试题精选及答案)
RocketMQ 面试路线最全整理,附 RocketMQ 高频必考面试题及答案。 搞定 RocketMQ 面试题,看这一篇就够了,不用四处找资料,节约大量时间。 1. RocketMQ 面试题及答案 MQ 基础 什么是消息队列,它有什么作用 MQ 的缺陷是什么 有哪些常用的 MQ 消费者的消费模式有几种 消费者获取消息有几种模式 生产者有哪些容错机制 MQ 应用 MQ 有哪些使用场景 如何解决…... -
RocketMQ 学习进阶路线及资料(附大厂面试题合集)
无论是工作、还是面试,RocketMQ 都是我们必知必会的一个知识点。 我最新总结的 RocketMQ 学习进阶路线及资料,包含: RocketMQ 高清知识导图 RocketMQ 大厂 面试题合集 可作为面试突击参考资料,也可帮助快速构建 RocketMQ 知识体系。 RocketMQ 学习进阶路线 包含了 RocketMQ 的所有核心知识点。 参考学习路线,俯瞰森林,构建框架。复盘技术栈,精准…... -
RocketMQ 的消息模型
参考答案 RocketMQ 的消息模型 Message 就是要传输的消息,一个消息必须有一个主题,一条消息也可以有一个可选的Tag(标签)和额外的键值对,可以用来设置一个业务的key,便于开发中在 broker 服务端查找消息。 Topic 主题,是消息的第一级类型,每条消息都有一个主题,就像信件邮寄的地址一样。 主题就是我们具体的业务,例如: 一个电商系统可以有订单消息,商品消息,采购消息,交易…... -
半消息是什么?RocketMQ 是怎么实现分布式事务消息的?
参考答案 半消息 是指暂时还不能被 Consumer 消费的消息,Producer 成功发送到 Broker 端的消息,但是此消息被标记为“暂不可投递”状态,只有等 Producer 端执行完本地事务,经过二次确认了之后,Consumer 才能消费此条消息。 分布式事务消息的实现过程 依赖半消息,二次确认以及消息回查机制。 Producer 向 Broker 发送半消息 Producer 端收到响…... -
RocketMQ 的存储结构是怎样的?
参考答案 消息存储是 MQ 消息队列中最为复杂和最为重要的一部分。 消息生产者发送消息到 Broker ,会按照顺序存储在 CommitLog 文件中,每个 CommitLog 文件的大小为 1G 。 如图所示: RocketMQ 的几个主要组件说明: Commit Log:存储所有的消息元数据,包括 Topic、QueueId 以及 message CosumerQueue:消费逻辑队列,存储消…... -
RocketMQ 的存储机制了解吗?
参考答案 RocketMQ 采用文件系统进行消息的存储,相对于 ActiveMq 采用关系型数据库进行存储的方式,更加直接、性能更高。 RocketMQ 与 Kafka 在写消息与发送消息上,继续沿用了Kafka 的这两个方面:顺序写、零拷贝。 1 顺序写 操作系统每次从磁盘读写数据时,都要找到数据在磁盘上的地址,再进行读写。如果是机械硬盘,寻址需要的时间往往会比较长。通常,把数据存储在内存…... -
RocketMQ 的工作流程是怎样的?
参考答案 RocketMQ 的工作流程: 1 启动 NameServer NameServer启动后监听端口,等待Broker、Producer以及Consumer连上来 2 启动 Broker 启动之后,会跟所有的 NameServer 建立并保持一个长连接,定时发送心跳包。心跳包中包含当前Broker 信息(ip、port等)、Topic 信息、以及 Borker 与 Topic 的映…... -
RocketMQ 如何保证高可用性?
参考答案 1 集群化部署 NameServer Broker 集群会将所有的 broker 基本信息、topic 信息以及两者之间的映射关系,轮询存储在每个 NameServer 中(也就是说每个NameServer 存储的信息完全一样)。 因此,NameServer 集群化,不会因为其中的一两台服务器挂掉,而影响整个架构的消息发送与接收。 2 集群化部署多 broker producer…... -
你自己部署过 RocketMQ 吗?简单说一下你当时部署的过程
参考答案 由于我们项目中主要使用 RocketMQ 做链路跟踪功能,因此需要比较高的性能,并且偶尔丢失几条消息也关系不大,所以我们就选择多 Master 多 Slave 模式,异步复制方式进行部署。 部署过程简单说一下: 我部署的是双master和双slave模式集群,并部署了两个nameserver节点。 1 服务器分配 分配是A和B两台服务器,其中, A 服务器部署 nameserv1,…... -
RocketMQ 有哪几种部署类型?分别有什么特点?
参考答案 RocketMQ 有4种部署类型 1 单 Master 单机模式: 即只有一个 Broker, 如果 Broker 宕机了, 会导致 RocketMQ 服务不可用, 不推荐使用。 2 多 Master 模式 组成一个集群,集群每个节点都是 Master 节点,配置简单,且性能最高, 某节点宕机重启,都不会影响 RocketMQ 服务。 其缺点是如果某个节点宕机了, …... -
RocketMQ 的部署架构了解吗?
参考答案 这个是 RocketMQ 的集群架构图,包含了四个主要部分:NameServer 集群、Producer 集群、Cosumer 集群、Broker 集群。 NameServer 担任路由消息的提供者。 生产者或消费者能够通过 NameServer 、查找各 Topic 相应的 Broker IP 列表,分别进行发送消息和消费消息。 nameServer 由多个无状态的节点构…... -
RocketMQ 在分布式事务支持这块机制的底层原理?
参考答案 大厂面试题: RocketMQ 的一大特点是对分布式事务的支持,说说它在分布式事务支持这块机制的底层原理吧? 参考答案: 分布式系统中的事务可以使用 TCC(Try、Confirm、Cancel)、2pc ,来解决分布式系统中的消息原子性。 RocketMQ 4.3+ 提供分布事务功能,通过 RocketMQ 事务消息能达到分布式事务的最终一致。 RocketMQ 的实现方式: Half…... -
RocketMQ 如何做负载均衡?
参考答案 负载均衡(LB,Load Balance),是一种技术解决方案,用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,避免单台服务器过载。 RocketMQ 中的负载均衡,主要可以分为 Producer 发送消息的负载均衡、Consumer 订阅消息的负载均衡。 1 producer 发送消息的负载均衡 默认会轮询向 Topic 的所有queue 发送消息,以达到消息平均落…... -
消费消息是 push 还是 pull ?
参考答案 RocketMQ 没有真正意义的 push ,都是 pull ,虽然有 push 类,但实际底层实现采用的是长轮询机制,即拉取方式。 Broker 端属性 longPollingEnable 标记,默认开启长轮询。 延伸问题: 为什么要主动拉取消息,而不使用事件监听方式? 事件驱动方式是建立好长连接,由事件(发送数据)的方式来实时推送。 如果 Broker 主动推送消息,有可能出现 pu…... -
RocketMQ Broker 中的消息,被消费后会立即删除吗?
参考答案 RocketMQ Broker 中的消息,被消费后会立即删除吗? RocketMQ Broker 中的消息,被消费后不会立即删除。 每条消息都会持久化到 CommitLog 中,每个 Consumer 连接到 Broker 后,会维持消费进度信息,当有消息消费后,只是当前 Consumer 的消费进度(CommitLog的offset)更新了。 消息会堆积吗? 默认72小时后,会删除不再…... -
为什么要用 RocketMQ ,优点是什么?
参考答案 RocketMQ 是一个纯 Java、分布式队列模型 的消息中间件,具有高可用、高可靠、高实时、低延迟的特点。 RocketMQ 的主要功能 具有消息中间件的通用功能: 业务解耦:这也是发布订阅的消息模型。生产者发送指令到MQ中,然后下游订阅这类指令的消费者会收到这个指令执行相应的逻辑,整个过程与具体业务无关,抽象成了一个发送指令,存储指令,消费指令的过程。 前端削峰:前端发起的请求在短…... -
RocketMQ 是什么,有什么特点?
参考答案 1 RocketMQ 是什么? RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。 作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼,有稳定出色表现的国产中间件,RocketMQ 具有高性能、低延时和高可靠等特性。 RocketMQ 主要用来提升性能、系统解耦、流量削峰…... -
聊下 RocketMQ 的消息轨迹?
参考答案 RocketMQ 默认提供了消息轨迹的功能: 1 RocketMQ消息轨迹数据的关键属性 Producer端 Consumer端 Broker端 生产实例信息 消费实例信息 消息的Topic 发送消息时间 投递时间,投递轮次 消息存储位置 消息是否发送成功 消息是否消费成功 消息的Key值 发送耗时 消费耗时 消息的Tag值 2 消息轨迹配置 打开消息轨迹功能,在 broker.…... -
使用 RocketMQ,如何快速处理积压消息?
参考答案 1 如何确定RocketMQ有大量的消息积压? 在正常情况下,使用 MQ 都会要尽量保证:他的消息生产速度和消费速度整体上是平衡的。 如果部分消费者系统出现故障,就会造成大量的消息积累。 在实际工作中,这类问题出现得较为隐蔽。 例如: 某天一个数据库突然挂了,我们大概率就会集中处理数据库的问题。好不容易把数据库恢复了,这时,基于这个数据库服务的消费者程序就会积累大量的消息,或者因为…... -
使用 RocketMQ ,如何保证消息顺序
参考答案 这是一道最常见、高频的 RocketMQ 面试题,需要我们对 MQ 场景有一定的深入理解。 下面详解: 1 为什么要保证消息有序?(在什么场景中要保证消息有序?) 假设: 我们有个大数据系统,需要对业务系统的日志进行收集分析,为了减少对业务系统的影响,通常都会通过 MQ 来做消息中转。此时,对消息的顺序就有一定的要求。 我们可以考虑下面这一系列的操作: 用户的积分默认是0分,而新注…... -
使用 RocketMQ 如何保证消息不丢失
参考答案 这个是面试官最喜欢问的问题,也是所有 MQ 都需要面对的一个共性问题。 大致的解决思路都是一致的,只是不同的 MQ 产品,有不同的解决方案。 分析这个问题,要从以下几个角度入手: 1 哪些环节会有丢消息的可能 我们考虑一个通用的MQ场景: 第 1、2、4 个环节都是跨网络的,只要跨网络,就一定有丢消息的可能。 关于第 3 环节,通常 MQ 存盘时,都会先写…... -
如何解决消息队列的延时及过期失效问题
参考答案 假设我们用的是RabbitMQ,RabbitMQ是可以设置过期时间的,就是TTL。 如果消息在queue中积压超过一定的时间,就会被RabbitMQ给清理掉,导致大量的数据直接丢失。 对于大量消息丢失的这种情况,我们可以采取批量重导的方式,即大量积压时,直接丢弃数据,等过了高峰期以后,写个临时程序,将丢失的那批数据逐一查找出来,然后重新灌入MQ里面,补回丢失的数据。 假设1万个订单积压在…... -
消费者获取消息有几种模式
参考答案 消费者获取消息有两种模式: 1. 推送模式PushConsumer 推送模式(虽然 RocketMQ 使用的是长轮询)的消费者,消息能及时被消费。 使用非常简单,内部已处理如线程池消费、流控、负载均衡、异常处理等等的各种场景。 2. 拉取模式PullConsumer 拉取模式的消费者,应用主动控制拉取的时机,怎么拉取,怎么消费等。 主动权更高。但要自己处理各种场景。 以上,是MQ面试题【…... -
消费者的消费模式有几种
参考答案 集群消费 消费者的一种消费模式。 一个 Consumer Group 中的各个 Consumer 实例分摊去消费消息,即一条消息只会投递到一个 Consumer Group 下面的一个实例。 广播消费 消费者的一种消费模式。 消息将对一 个Consumer Group 下的各个 Consumer 实例都投递一遍。即使这些 Consumer 属于同一个Consumer Group ,消息也…...