rocketmq3.5.8 原理和集群安装

简介:

阿里的rocketmq

RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:

1、支持严格的消息顺序;

2、支持Topic与Queue两种模式;

3、亿级消息堆积能力;

4、比较友好的分布式特性;

5、同时支持Push与Pull方式消费消息;


https://github.com/alibaba/RocketMQ/releases 最新版本

在生产环境部署Broker,请参考以下软硬件要求

https://github.com/alibaba/RocketMQ/wiki/system_requirements


rabbit不知道,但是rocket的性能是(万条每秒),并且能够横向无限扩展,单机topic数量在256时,性能损失较小。

rocket可以说是kafka的变种,是阿里在充分reviewkafka代码后,开发的metaQ。在不断更新,修补以后,阿里把metaQ3.0更名为rocket,并且rocket是java写的易于维护。

另外就是rocket和kafka有类似无限堆积的能力。想想,断电不丢消息,积压两亿条消息毫无压力,niubility

kafka和rocket性能根本不是你需要考虑的问题


导入本地包

mvn install:install-file -DgroupId=net.java.dev.jna -DartifactId=jna -Dversion=4.2.2 -Dpackaging=jar -Dfile=/root/jna-4.2.2.jar


以下文章非常有用

http://blog.csdn.net/zknxx/article/details/52974189

http://blog.csdn.net/crazyxq/article/details/52870502 


rocketmq3.5.8 编译好的包,自己编译太坑了

http://download.csdn.net/download/zknxx/9668351


生产一般都主主吧

RocketMQ-3.5.8双主双从配置及部署说明  

http://download.csdn.net/download/coffeelifelau/9667849


mkdir -p /var/log/rocketmqlogs

mkdir -p /data/rocketmq/store/commitlog  /data/logs

nohup sh mqnamesrv > /var/log/rocketmqlogs/namesrv.log 2>&1 &


a服务器

nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties  >/dev/null 2>&1 &


b服务器

nohup sh mqbroker -c ../conf/2m-noslave/broker-b.properties  >/dev/null 2>&1 &


配置文件参考

http://sofar.blog.51cto.com/353572/1540874


配置权限

chown -Rnobody.nobody Application

a.启动NameServer[master-a,master-b]

cd /data/Application/rocketmq/bin

sudo -u nobody nohup sh/data/Application/rocketmq/bin/mqnamesrv &

b.启动BrokerA[master-a]

sudo -u nobody nohup sh/data/Application/rocketmq/bin/mqbroker -c/data/Application/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null2>&1 &

c.启动BrokerB[master-b]

sudo -u nobody nohup sh/data/Application/rocketmq/bin/mqbroker -c/data/Application/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null2>&1 &


关闭nameserver或broker

sh ./mqshutdown

Useage: mqshutdown broker | namesrv


注意:

运行sh os.sh,会发现swap会占用一半,而内存会占用很少。

如果需要恢复成开始的样子,修改os.sh

sudo sysctl -w vm.extra_free_kbytes=0

sudo sysctl -w vm.min_free_kbytes=67584

sudo sysctl -w vm.overcommit_memory=0

sudo sysctl -w vm.drop_caches=0

sudo sysctl -w vm.zone_reclaim_mode=0

sudo sysctl -w vm.max_map_count=65530

sudo sysctl -w vm.dirty_background_ratio=10

sudo sysctl -w vm.dirty_ratio=20

sudo sysctl -w vm.dirty_writeback_centisecs=500

sudo sysctl -w vm.page-cluster=3

sudo sysctl -w vm.swappiness=60

然后重启后者用网上的swap.sh脚本找到占用swap的进程,重启之。

具体os.sh参数的作用

1.控制内存回收 grep low /proc/zoneinfo

这个参数值用来强制linux虚拟内存保留最小值的空闲

vm.extra_free_kbytes

vm.min_free_kbytes  

2.vm.max_map_count 虚拟内存使用

3.vm.swappiness

执行这个脚本出现内存占用的少的原因,估计就是调了控制内存回收

应该是控制broker同步的频率,这样做之后,只有很多的数据,才会同步。


测试

export NAMESRV_ADDR=ip1:9876\;ip2:9876

bash tools.sh com.alibaba.rocketmq.example.quickstart.Producer

bash tools.sh com.alibaba.rocketmq.example.quickstart.Consumer


要解决的问题

1.主主还是多主多从

http://blog.csdn.net/a19881029/article/details/34446629


2.如何顺序消费

RocketMQ消费并行度分两种情况

顺序消费方式并行度同Kafka完全一致

乱序方式并行度取决于Consumer的线程数,如Topic配置10个队列,10台机器消费,每台机器100个线程,那么并行度为1000


rocketmq 顺序消费理解

http://blog.csdn.net/u011686226/article/details/53465357


https://github.com/alibaba/RocketMQ/search?utf8=%E2%9C%93&q=sequence

3.

你是集群消费还是广播消费,集群消费的话每个消费者都会收到对应的消息,广播则不会,另外即使是集群环境下,也有可能重复消费消息,消费者自己要做到幂等

ps:说反了,不好意思,集群消费,只有一次,广播则多次,


目前rocketmq消费是有集群消费和广播消费,上面的楼主说错了,应该是集群消费只能有一个消费者消费一次,而广播消费则是所有的消费者都会消费一次,至于出现重复消费的问题,一种可能的原因是消费者消费完有没有做确认机制.

即使消费者做出了确认消费的标识,消费者还是可能出现重复消费的情况,那是一般在高并发下的出现的,rocketmq有说明,几乎主流的mq都有这种情况,一般的就是消费幂等


4.推荐Filter Server生产环境部署,为Consumer提供任意的服务器消息过滤能力


5.支持Topic与Queue两种模式  不是默认都同时支持的


6.rocketmq使用大内存是靠mmap堆外内存啊,而不是设置大的jvm堆内存的,java的堆最好不要超过10G,要不然性能不行


7.Producer/Consumer指定Name Server地址

通过代码中指定

producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");

consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");

通过Java启动参数中指定

-Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876

通过环境变量指定

exportNAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876

8.监控

web平台监控

安装tomcat

这里就省略了。

将war放入webapps下,修改vimWEB-INF/classes/config.properties

rocketmq.namesrv.addr=RocketMQ01:9876   #这里只能写一个

throwDone=true

监控需要自己git后,编译,网上csdn有现成的。



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1882756,如需转载请自行联系原作者

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
10月前
|
消息中间件 存储 缓存
RocketMQ原理—4.消息读写的性能优化
本文详细解析了RocketMQ消息队列的核心原理与性能优化机制,涵盖Producer消息分发、Broker高并发写入、Consumer拉取消息流程等内容。重点探讨了基于队列的消息分发、Hash有序分发、CommitLog内存写入优化、ConsumeQueue物理存储设计等关键技术点。同时分析了数据丢失场景及解决方案,如同步刷盘与JVM OffHeap缓存分离策略,并总结了写入与读取流程的性能优化方法,为理解和优化分布式消息系统提供了全面指导。
RocketMQ原理—4.消息读写的性能优化
|
7月前
|
物联网 Linux 开发者
快速部署自己私有MQTT-Broker-下载安装到运行不到一分钟,快速简单且易于集成到自己项目中
本文给物联网开发的朋友推荐的是GMQT,让物联网开发者快速拥有合适自己的MQTT-Broker,本文从下载程序到安装部署手把手教大家安装用上私有化MQTT服务器。
1816 5
|
11月前
|
边缘计算 负载均衡 NoSQL
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
1730 74
|
12月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1646 91
|
10月前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
3136 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
10月前
|
存储 消息中间件 缓存
RocketMQ原理—3.源码设计简单分析下
本文介绍了Producer作为生产者是如何创建出来的、启动时是如何准备好相关资源的、如何从拉取Topic元数据的、如何选择MessageQueue的、与Broker是如何进行网络通信的,Broker收到一条消息后是如何存储的、如何实时更新索引文件的、如何实现同步刷盘以及异步刷盘的、如何清理存储较久的磁盘数据的,Consumer作为消费者是如何创建和启动的、消费者组的多个Consumer会如何分配消息、Consumer会如何从Broker拉取一批消息。
447 11
RocketMQ原理—3.源码设计简单分析下
|
10月前
|
存储 消息中间件 网络协议
RocketMQ原理—1.RocketMQ整体运行原理
本文详细解析了RocketMQ的整体运行原理,涵盖从生产者到消费者的全流程。首先介绍生产者发送消息的机制,包括Topic与MessageQueue的关系及写入策略;接着分析Broker如何通过CommitLog和ConsumeQueue实现消息持久化,并探讨同步与异步刷盘的优缺点。同时,讲解基于DLedger技术的主从同步原理,确保高可用性。消费者部分则重点讨论消费模式(集群 vs 广播)、拉取消息策略及负载均衡机制。网络通信层面,基于Netty的高性能架构通过多线程池分工协作提升并发能力。最后,揭示mmap与PageCache技术优化文件读写的细节,总结了RocketMQ的核心运行机制。
RocketMQ原理—1.RocketMQ整体运行原理
|
10月前
|
消息中间件 Java 数据管理
RocketMQ原理—2.源码设计简单分析上
本文介绍了NameServer的启动脚本、启动时会解析哪些配置、如何初始化Netty网络服务器、如何启动Netty网络服务器,介绍了Broker启动时是如何初始化配置的、BrokerController的创建以及包含的组件、BrokerController的初始化、启动、Broker如何把自己注册到NameServer上、BrokerOuterAPI是如何发送注册请求的,介绍了NameServer如何处理Broker的注册请求、Broker如何发送定时心跳
|
消息中间件 存储 Kafka
RocketMQ 工作原理图解,看这篇就够了!
本文详细解析了 RocketMQ 的核心架构、消息领域模型、关键特性和应用场景,帮助深入理解消息中间件的工作原理。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
RocketMQ 工作原理图解,看这篇就够了!
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
3117 2