菜单

RocketMQ(1)- 简介与安装

易
发布于 2021-09-08 / 241 阅读
0

RocketMQ(1)- 简介与安装


mq-bd79ca20fb204f58a5e369f67ee50b2d.jpg


RocketMQ是阿里巴巴开发的消息中间件,在双十一万亿级的业务场景下大放异彩,并加入Apache成为其顶级孵化项目。其高性能、高可靠和与相对较低的开发成本、全面的功能支持,成为了许多业务场景下的不二之选,也成为开发中的必备技能之一,博主将分次总结RocketMQ的安装、集群、工作原理、实际应用等。

消息中间件的作用

  1. 限流削峰
    可以将瞬时的超量请求暂时存储在MQ中,避免由于请求过大导致可能的服务崩溃或者请求丢失

  2. 异步解耦
    接口调用由MQ完成,系统可以只对MQ进行消息发布,其他系统可自行接入消费,去除系统间的耦合。且异步调用可减少接口返回时间,提高响应速度

  3. 数据流汇总
    可实对多个系统的数据流进行汇总,如业务数据,日志等。是目前数据汇总的优秀解

消息中间件的对比

中间件

单机吞吐量

开发语言

协议

持久化

顺序消费

分布式事务

并发性

消息回溯

rocketmq

十万级

Java

非标准自研协议

磁盘

支持

支持

支持

activemq

万级

Java

AMQP,MQTT,STOMP,OpenWire等

磁盘、数据库

不支持

支持

不支持

kafka

十万级

Scala

非标准自研协议

磁盘

支持,但集群宕机会导致错乱

支持

支持

rabbitmq

万级

ErLang

AMQP、MQTT、STOMP等

磁盘

不支持

不支持

极高

不支持

目前较为主流的MQ各有优劣:

  • activeMQ官方维护越来越少,存在丢消息等毛病,社区活跃度不断下降,性能略显疲软,目前已经不是较好的选择,但其功能齐全,优秀的开发效率使其在一些简单业务场景下还占有一席之地。

  • rabbitmq凭借ErLang语言带来的原生优势在高并发一骑绝尘,适用于对高并发要求非常高的场景。且支持多种主流协议,适用于整合多种开发平台,iot系统就大量采用rabbitmq。缺点是由于ErLang较为小众,导致定制成本高。且除高并发外其它性能并不突出。

  • kafka的特性是高吞吐,快速持久化,适用于存储日志数据和大数据计算分析应用。

  • rocketMQ,其可靠性、吞吐量等各项指标都相当出色,功能支持完善,能胜任大多数业务场景,基于Java生态,使得越来越多的企业和开发者选择使用。现存的问题一个是Java外的语言支持不多,与其他语言项目一起使用困难。另一个是没有实现JMS规范,无法无缝迁移,但简洁的API一定程度上弥补了该问题,是一种很有前景的技术。

RocketMQ的安装

安装方法来自rocketMQ官方文档,主要介绍如何快速构建和部署基于 DLedger 的可以自动容灾切换的 RocketMQ集群。博主将补充部分内容,包括准备工作、可能出现的问题以及解决方案等,博主的系统为centos7。
链接:官方中文文档 | 官方英文文档

源码构建

构建分为两个部分,需要先构建 DLedger,然后 构建 RocketMQ

  • 构建前的准备工作,已有git和maven可以跳过

安装git
yum install git

安装maven,该方法会自动下载配置,并使用jdk1.8依赖,如果你需要使用其他Java版本,请自行下载maven并手动配置
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven
  • 构建 DLedger

git clone https://github.com/openmessaging/openmessaging-storage-dledger.git

cd openmessaging-storage-dledger

mvn clean install -DskipTests
  • 构建 RocketMQ

git clone https://github.com/apache/rocketmq.git

cd rocketmq

git checkout -b store_with_dledger origin/store_with_dledger

mvn -Prelease-all -DskipTests clean install -U

快速部署

在构建成功后

cd distribution/target/apache-rocketmq

sh bin/dledger/fast-try.sh start

如果上面的步骤执行成功,可以通过 mqadmin 运维命令查看集群状态。
要注意的是需根据实际情况关闭firewalld或者开放相关端口。
如果出现Algorithm HmacSHA1 not available错误,其原因是JAVA_HOME配置错误或者未配置,可直接编辑rocketmq下的/bin/tools.sh文件将/jre/lib/ext的配置改为绝对路径,但是更建议的是在/etc/profile中进行重新配置。

sh bin/mqadmin clusterList -n 127.0.0.1:9876

顺利的话,会看到如下内容:
rocket an-2956f923c9d54a629fd0f92f5be9021d.png


(BID 为 0 的表示 Master,其余都是 Follower)

启动成功,现在可以向集群收发消息,并进行容灾切换测试了。

关闭快速集群,可以执行:

sh bin/dledger/fast-try.sh stop

快速部署,默认配置在 conf/dledger 里面,默认的存储路径在 /tmp/rmqstore。

容灾切换

部署成功,杀掉 Leader 之后(在上面的例子中,杀掉端口 30931 所在的进程),等待约 10s 左右,用 clusterList 命令查看集群,就会发现 Leader 切换到另一个节点了。

建议先简单了解一下fast-try.sh和conf/dledger下的配置内容,后续会有更详细的介绍。