敞开生长之旅!这是我参与「日新计划 12 月更文挑战」的第11天,点击检查活动详情
布景
随着事务的快速开展,事务越来越复杂,服务之间彼此调用形成复杂的控制联系、调用联系和数据传递联系。服务联系越多,耦合性越强。为了使服务高内聚低耦合,提高服务的高可用性,就需要对服务进行异步解耦。RocketMQ就是服务解耦的时候常用一种解决方案。
介绍
RocketMQ是阿里开源的一个优秀老练的产品,咱们能够运用RocketMQ作为服务间异步通信的中间件。随着事务的并发吞吐量上升,也能够运用RocketMQ削峰限流。RocketMQ架构简略、支撑多种事务场景,有很强的扩展性,在很多大厂都有成功的运用事例,是一个老练可靠的开源产品,广泛的应用于互联网、大数据和物联网等事务场景。
RocketMQ vs. ActiveMQ vs. Kafka
特性 | ActiveMQ | Kafka | RocketMQ |
---|---|---|---|
单机吞吐量 | 万级 | 10万级,支撑高吞吐 | 10万级,高吞吐,一般合作大数据类的系统进行实时数据计算、日志收集等场景 |
topic数量对吞吐量的影响 | – | topic能够达到几百/几千级别,吞吐量会有较小幅度的下降,这是RocketMQ的一大优势,在平等机器下能够支撑很多的topic | topic从几十到几百时,吞吐量会大幅度下降,在平等机器下,kafka尽量保证topic数量不要过多,假如要支撑大规模的topic,需要添加更多的机器资源 |
时效性 | ms级 | ms级 | ms级 |
可用性 | 高,根据主从架构实现高可用 | 十分高,分布式架构 | 十分高,分布式一个数据多个副本,少数机器宕机,不会丢掉数据,不会导致不可用 |
消息可靠性 | 有较低概率丢掉数据 | 通过参数优化装备能够做到0丢掉 | 通过参数优化装备能够做到0丢掉 |
功用支撑 | MQ范畴功用完善 | MQ功用较为完善,根本分布式,扩展性好 | 功用较简略,首要支撑简略的MQ功用,在大数据范畴的实时计算以及日志收集被大规模运用 |
其他 | 起步早,并发场景经验少 | 社区活跃度高 | 阿里开发开源,社区活跃度高 |
实践
咱们带着几个问题去动手实践,加深印象。
- 注册
- nameserver
- topic、broker和queue之间的联系
- 设计风格、架构设计理念
1、从github下载RocketMQ 压缩包,github地址:github.com/apache/rock…
2、解压压缩包到opt目录下
unzip rocketmq-all-4.9.4-bin-release.zip -d /opt
3、进入到解压目录下的bin文件夹
cd /opt/rocketmq-4.9.4/bin
[root@centos rocketmq-all-4.9.4-bin-release]# ls
cachedog.sh dledger mqadmin.cmd mqbroker.numanode0 mqbroker.numanode3 mqshutdown play.cmd runbroker.cmd runserver.sh tools.cmd
cleancache.sh export.sh mqbroker mqbroker.numanode1 mqnamesrv mqshutdown.cmd play.sh runbroker.sh setcache.sh tools.sh
cleancache.v1.sh mqadmin mqbroker.cmd mqbroker.numanode2 mqnamesrv.cmd os.sh README.md runserver.cmd startfsrv.sh
[root@centos bin]#
4、发动nameserver
[root@centos bin]# ./mqnamesrv
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
5、发动broker
[root@centos bin]# ./mqbroker -n localhost:9876
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /opt/rocketmq-all-4.9.4-bin-release/bin/hs_err_pid3228.log
发动的时候报错了,提示内存分配过大,由于本地虚拟机装备的是2G内存,进入runbroker.sh 修正装备,找到内存装备,改为1G
vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"
保存装备后,重新发动broker,发动成功