编程界的小学生
-
- 0、彩蛋
- 1、说说你们公司线上生产环境用的是什么消息中间件?
- 2、多个mq如何选型?
- 3、为什么要使用MQ?
- 4、RocketMQ由哪些角色组成,每个角色作用和特点是什么?
- 5、RocketMQ中的Topic和JMS的queue有什么区别?
- 6、RocketMQ Broker中的消息被消费后会立即删除吗?
- 7、RocketMQ消费模式有几种?
- 8、消费消息是push还是pull?
- 9、broker如何处理拉取请求的?
- 10、RocketMQ如何做负载均衡?
- 11、消息重复消费
- 12、如何让RocketMQ保证消息的顺序消费
- 13、RocketMQ如何保证消息不丢失
- 14、rocketMQ的消息堆积如何处理
- 15、RocketMQ在分布式事务支持这块机制的底层原理?
- 16、如果让你来动手实现一个分布式消息中间件,整体架构你会如何设计实现?
- 17、看过RocketMQ 的源码没有。如果看过,说说你对RocketMQ 源码的理解?
- 18、高吞吐量下如何优化生产者和消费者的性能?
- 19、再说说RocketMQ 是如何保证数据的高容错性的?
- 20、任何一台Broker突然宕机了怎么办?
- 21、Broker把自己的信息注册到哪个NameServer上?
0、彩蛋
先来看看大佬们的代码是怎么写的:
package org.apache.rocketmq.common.protocol.header;
/**
* Use short variable name to speed up FastJson deserialization process.
*/
public class SendMessageRequestHeaderV2 implements CommandCustomHeader {
@CFNotNull
private String a; // producerGroup;
@CFNotNull
private String b; // topic;
@CFNotNull
private String c; // defaultTopic;
@CFNotNull
private Integer d; // defaultTopicQueueNums;
@CFNotNull
private Integer e; // queueId;
@CFNotNull
private Integer f; // sysFlag;
@CFNotNull
private Long g; // bornTimestamp;
@CFNotNull
private Integer h; // flag;
@CFNullable
private String i; // properties;
@CFNullable
private Integer j; // reconsumeTimes;
@CFNullable
private boolean k; // unitMode = false;
private Integer l; // consumeRetryTimes
@CFNullable
private boolean m; //batch
}
这些abcdefg你爱了吗?以后我就这么写变量名,以注释写真实的含义。谁在骂我我就贴给他顶级开源项目的代码,让他自己慢慢品。
1、说说你们公司线上生产环境用的是什么消息中间件?
见【2、多个mq如何选型?】
2、多个mq如何选型?
| MQ | 描述 |
|---|---|
| RabbitMQ | erlang开发,对消息堆积的支持并不好,当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降。每秒钟可以处理几万到十几万条消息。 |
| RocketMQ | java开发,面向互联网集群化功能丰富,对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,每秒钟大概能处理几十万条消息。 |
| Kafka | Scala开发,面向日志功能丰富,性能最高。当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高。所以,Kafka 不太适合在线业务场景。 |
| ActiveMQ | java开发,简单,稳定,性能不如前面三个。小型系统用也ok,但是不推荐。推荐用互联网主流的。 |
3、为什么要使用MQ?
因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq
| 作用 | 描述 |
|---|---|
| 解耦 | 系统耦合度降低,没有强依赖关系 |
| 异步 | 不需要同步执行的远程调用可以有效提高响应时间 |
| 削峰 | 请求达到峰值后,后端service还可以保持固定消费速率消费,不会被压垮 |
4、RocketMQ由哪些角色组成,每个角色作用和特点是什么?
| 角色 | 作用 |
|---|---|
| Nameserver | 无状态,动态列表;这也是和zookeeper的重要区别之一。zookeeper是有状态的。 |
| Producer | 消息生产者,负责发消息到Broker。 |
| Broker | 就是MQ本身,负责收发消息、持久化消息等。 |
| Consumer | 消息消费者,负责从Broker上拉取消息进行消费,消费完进行ack。 |
5、RocketMQ中的Topic和JMS的queue有什么区别?
queue就是来源于数据结构的FIFO队列。而Topic是个抽象的概念,每个Topic底层对应N个queue,而数据也真实存在queue上的。
6、RocketMQ Broker中的消息被消费后会立即删除吗?
不会,每条消息都会持久化到CommitLog中,每个Consumer连接到Broker后会维持消费进度信息,当有消息消费后只是当前Consumer的消费进度(CommitLog的offset)更新了。
追问:那么消息会堆积吗?什么时候清理过期消息?
4.6版本默认48小时后会删除不再使用的CommitLog文件
- 检查这个文件最后访问时间
- 判断是否大于过期时间
- 指定时间删除,默认凌晨4点
源码如下:
/**
* {@link org.apache.rocketmq.store.DefaultMessageStore.CleanCommitLogService#isTimeToDelete()}
*/
private boolean isTimeToDelete() {

本文深入探讨RocketMQ消息中间件的架构、特性与实践,包括消息选型、消费模式、负载均衡、消息不丢失机制及分布式事务支持等核心内容。
&spm=1001.2101.3001.5002&articleId=107463884&d=1&t=3&u=8daf48756af34c018526be4ea3aee1c3)
1万+

被折叠的 条评论
为什么被折叠?



