RocketMQ 4.2.0-RocketMQ 六问

以下是在看了RocketMQ4.2.0的开发文档及源码所感,为防忘掉,记录一下,如果理解有偏颇请海涵,希望得到大家的指点,共同进步。

第一问:RocketMQ 是什么软件,是如何演变的,设计思想是什么?

RocketMQ是一款消息中间件软件,个别时候也可以作为缓存数据库使用(如果你的BOSS不介意的话)

RocketMQ前身是Alibabametaq,内部孵化几个版本之后重构而成(metaq3.0),目前已经是Apache基金会的顶级项目。

RocketMQ根据淘宝的业务背景,并借鉴kafka的设计理念,力争解决分布式事务消息及消息堆积问题。

第二问:RocketMQ 解决什么问题,什么人来使用,对业务场景有什么要求?

RocketMQ处理解决事务堆积问题之外,还能解决应用分布式部署的问题,生产者和消费者完全解耦。

RocketMQ 适合java开发者,当然现在社区也很努力在支持其他语言和场景 例如spark python,大家可以在external项目中找到,目前rocketmq-externals-master显示支持的列表如下

l rocketmq-console

l rocketmq-cpp

l rocketmq-docker

l rocketmq-flink

l rocketmq-flume

l rocketmq-go

l rocketmq-jms

l rocketmq-mysql

l rocketmq-php

l rocketmq-redis

l rocketmq-spark

 

RocketMQ 使用的业务场景包括:日志处理、消息削峰、秒杀系统、应用解耦、异步消息。

不适用的场景包括:消息网关、数据清洗

第三问:RocketMQ 都有什么重要概念,如何理解,能举例说明吗?

NameServer:集群监控用,当节点异常时可提供恢复或者异常处理服务,可以看做进程体系里面的守护进程

Broker:消息存储,可看做数据库。

Producer:消息生产者,参考生产者消费者模型。

Consumer:消息消费者,参考生产者消费者模型。

Topic:消息归类用,标识集群的一类消息,通常和TAG一起用

TAG:用于在同一topic下对消息进行分类过滤



第四问:RocketMQ 对软硬件的要求高吗,如何部署和使用,上手容易吗?

RocketMQ基于java语言开发,运行在jvm虚拟机上,一般官方推荐最低分配内存1G 存储空间按照3天的一般消息量来算可以预留

1K*1000*60*24*3*4=17280*1M=17G(消息大小*每秒量*分钟*小时*天数*队列数)

其他的是否需要考虑呢?比如log空间预留10G 因此 大约30G够用了

按上个问题所述RocketMQ 分为单例版部署和集群部署 ,集群部署时 也可以用虚拟机,举例来说 M-AM-B是两台机器,M-AM-B可用互为Broker的主备

NameServ部署在这两台机器上,生产者和消费者各N台机器或者同一台机器跑多个都允许。

在用RocketMQ 开发之前,需要了解一些开发相关的知识,例如javajvmshellmavengit等。

 

第五问:RocketMQ 如何保证消息的一致性,是否消息都是有序的,如何完成消息的发送?

开源版本的RocketMQ是没有保证消息一致性的,需要自己结合实际业务处理

RocketMQ支撑有序消息。

消息包含 普通、顺序、事务,因此单纯说消息都有序是不准确的。


RocketMQ底层采用Netty框架发送消息Netty是一款很友好的通信中间件,可支持阻塞IO以及NIO通信模型。

 

第六问:RocketMQ 如何完成持久化,宕机之后如何恢复,恢复的方式有哪些?

rocketmq-storeDefaultMessageStore具有消息持久化和宕机恢复的功能,

消息持久化是定时任务,定期对消息进行保存以及过期清理。

系统启动时检查是否存在abort文件,不存在则正常启动,存在则根据文件恢复

Zrocketmq中,存储的文件实体MappedFile 以  CopyOnWriteArrayList的形式记录。

几种文件形式:

Consumequeueconsumequeue_extIndexcheckpointAbortlock

config.delayOffset.jsontransaction.statetable

文件的加载、消息的提交和缓存由CommitLog调用MappedFile完成

遇到了一个小问题:CommitLogMESSAGE_MAGIC_CODEBLANK_MAGIC_CODE 有什么作用?


你可能感兴趣的:(RocketMQ)