RocketMQ面试题及答案
RocketMQ面试题及答案
1. RocketMQ是什么?
RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的*项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,具有高性能、低延时和高可靠等特性。主要用来提升性能、系统解耦、流量肖峰等。
2. RocketMQ有什么特点?
1. 灵活可扩展性
RocketMQ 天然支持集群,其核心四组件(Name Server、Broker、Producer、Consumer)每一个都可以在没有单点故障的情况下进行水平扩展。
2. 海量消息堆积能力
RocketMQ 采用零拷贝原理实现超大的消息的堆积能力,据说单机已可以支持亿级消息堆积,而且在堆积了这么多消息后依然保持写入低延迟。
3. 支持顺序消息
可以保证消息消费者按照消息发送的顺序对消息进行消费。顺序消息分为全局有序和局部有序,一般推荐使用局部有序,即生产者通过将某一类消息按顺序发送至同一个队列来实现。
4. 多种消息过滤方式
消息过滤分为在服务器端过滤和在消费端过滤。服务器端过滤时可以按照消息消费者的要求做过滤,优点是减少不必要消息传输,缺点是增加了消息服务器的负担,实现相对复杂。消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会传输给消息消费者。
5. 支持事务消息
RocketMQ 除了支持普通消息,顺序消息之外还支持事务消息,这个特性对于分布式事务来说提供了又一种解决思路。
6. 回溯消费
回溯消费是指消费者已经消费成功的消息,由于业务上需求需要重新消费,RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。
3. RocketMQ、RabbitMQ、Kafaka的区别?
- kafka:
1、开发语言: Scala开发
2、性能、吞吐量: 吞吐量所有MQ里最优秀,QPS十万级、性能毫秒级、支持集群部署
3、功能: 功能单一
4、缺点: 丢数据, 因为数据先写入磁盘缓冲区,未直接落盘。机器故障会造成数据丢失
5、应用场景: 适当丢失数据没有关系、吞吐量要求高、不需要太多的高级功能的场景,比如大数据场景。 - RabbitMQ:
1、开发语言: Erlang开发
2、性能、吞吐量: 吞吐量比较低,QPS几万级、性能u秒级、主从架构
3、功能: 功能单一
4、缺点: Erlang小众语言开发,吞吐量低,集群扩展麻烦
5、应用场景: 中小公司对并发和吞吐量要求不高的场景。 - RocketMQ:
1、开发语言: java开发
2、性能、吞吐量: 吞吐量高,QPS十万级、性能毫秒级、支持集群部署
3、功能: 支持各种高级功能,比如说延迟消息、事务消息、消息回溯、死信队列、消息积压
等等
4、缺点: 官方文档相对简单可能是RocketMQ目前唯一的缺点
5、应用场景: 适当丢失数据没有关系、吞吐量要求高、不需要太多的高级功能的场景,比如大数据场景。
4. 你会在什么情况下使用RocketMQ?
5. RocketMQ 由哪些角色组成?
- producer集群:拥有相同的producerGroup,一般来讲,Producer不必要有集群的概念,这里的集群仅仅在RocketMQ的分布式事务中有用到
- Name Server集群:提供topic的路由信息,路由信息数据存储在内存中,broker会定时的发送路由信息到nameserver中的每一个机器,来进行更新,节点之间无任何信息同步,所以name server集群可以简单理解为无状态(实际情况下可能存在每个nameserver机器上的数据有短暂的不一致现象,但是通过定时更新,大部分情况下都是一致的)
- broker集群:一个集群有一个统一的名字,即brokerClusterName,默认是DefaultCluster。一个集群下有多个master,每个master下有多个slave。master和slave算是一组,拥有相同的brokerName,不同的brokerId,master的brokerId是0,而slave则是大于0的值。master和slave之间可以进行同步复制或者是异步复制。
- consumer集群:拥有相同的consumerGroup。
6. 如果Broker宕了,NameServer是怎么感知到的?
Broker会定时(30s)向NameServer发送心跳
然后NameServer会定时(10s)运行一个任务,去检查一下各个Broker的最近一次心跳时间,如果某个Broker超过120s都没发送心跳了,那么就认为这个Broker已经挂掉了。
7. RocketMQ对生产者有哪些容错机制?
基于Dledger实现RocketMQ高可用自动切换
RocketMQ 4.5之后支持了一种叫做Dledger机制,基于Raft协议实现的一个机制。
我们可以让一个Master Broker对应多个Slave Broker, 一旦Master Broker宕机了,在多个Slave中通过Dledger技术将一个Slave Broker选为新的Master Broker对外提供服务。
在生产环境中可以是用Dledger机制实现自动故障切换,只要10秒或者几十秒的时间就可以完成。
8. Producer发送消息到Broker,是随机选择一个Broker还是有一定的规则?
一般是负载均衡做随机选择,但也可以走其他策略,比如根据某个字段来hash,后续会讲//
10. 生产者发送消息的方式?
- 同步发送
同步发送指消息发送方发出数据后会在收到接收方发回响应之后才发下一个数据包。一般用于重要通知消息,例如重要通知邮件、营销短信。 - 异步发送
异步发送指发送方发出数据后,不等接收方发回响应,接着发送下个数据包,一般用于可能链路耗时较长而对响应时间敏感的业务场景,例如用户视频上传后通知启动转码服务。 - 单向发送
单向发送是指只负责发送消息而不等待服务器回应且没有回调函数触发,适用于某些耗时非常短但对可靠性要求并不高的场景,例如日志收集。
11. 消费者消费模式有几种?- 集群消费
消费者的一种消费模式。一个 Consumer Group 中的各个 Consumer 实例分摊去消费消息,即一条消息只会投递到一个 Consumer Group 下面的一个实例。 - 广播消费
消费者的一种消费模式。消息将对一 个Consumer Group 下的各个 Consumer 实例都投递一遍。即即使这些 Consumer 属于同一个Consumer Group ,消息也会被 Consumer Group 中的每个 Consumer 都消费一次。
- 集群消费
12. 消费者获取消息有几种模式?
消费者获取消息有两种模式:推送模式和拉取模式。
1. PushConsumer
推送模式(虽然 RocketMQ 使用的是长轮询)的消费者。消息的能及时被消费。使用非常简单,内部已处理如线程池消费、流控、负载均衡、异常处理等等的各种场景。
2. PullConsumer
拉取模式的消费者。应用主动控制拉取的时机,怎么拉取,怎么消费等。主动权更高。但要自己处理各种场景。
本文地址:https://blog.csdn.net/jiang18238032891/article/details/107339069
上一篇: Linux查看系统块大小
下一篇: vuerouter刷新当前所在子路由