RocketMQ源码学习:一、概述与部署启动

浅浅的花香味﹌ 2024-03-31 15:21 163阅读 0赞

背景

随着业务的快速发展,业务越来越复杂,服务之间相互调用形成复杂的控制关系、调用关系和数据传递关系。服务联系越多,耦合性越强。为了使服务高内聚低耦合,提高服务的高可用性,就需要对服务进行异步解耦。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地址:https://github.com/apache/rocketmq

2、解压压缩包到opt目录下

  1. unzip rocketmq-all-4.9.4-bin-release.zip -d /opt

3、进入到解压目录下的bin文件夹

  1. cd /opt/rocketmq-4.9.4/bin
  2. [root@centos rocketmq-all-4.9.4-bin-release]# ls
  3. cachedog.sh dledger mqadmin.cmd mqbroker.numanode0 mqbroker.numanode3 mqshutdown play.cmd runbroker.cmd runserver.sh tools.cmd
  4. cleancache.sh export.sh mqbroker mqbroker.numanode1 mqnamesrv mqshutdown.cmd play.sh runbroker.sh setcache.sh tools.sh
  5. cleancache.v1.sh mqadmin mqbroker.cmd mqbroker.numanode2 mqnamesrv.cmd os.sh README.md runserver.cmd startfsrv.sh
  6. [root@centos bin]#

4、在第一个服务器节点启动nameserver

  1. [root@centos bin]# ./mqnamesrv
  2. 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
  3. OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
  4. The Name Server boot success. serializeType=JSON

5、在第一个服务器节点启动broker

  1. [root@centos bin]# ./mqbroker -n localhost:9876
  2. 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
  3. OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
  4. #
  5. # There is insufficient memory for the Java Runtime Environment to continue.
  6. # Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
  7. # An error report file with more information is saved as:
  8. # /opt/rocketmq-all-4.9.4-bin-release/bin/hs_err_pid3228.log

启动的时候报错了,提示内存分配过大,因为本地虚拟机配置的是2G内存,进入runbroker.sh 修改配置,找到内存配置,改为1G

  1. vim runbroker.sh
  2. JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"

保存配置后,重新启动broker,启动成功

THE END.

发表评论

表情:
评论列表 (有 0 条评论,163人围观)

还没有评论,来说两句吧...

相关阅读