RocketMQ实战(一)What is RocketMQ?初步理解Producer/Consumer Group install RocketMQ

阿里巴巴有2大核心的分布式技术,一个是OceanBase,另一个就是RocketMQ。在实际项目中已经领教过RocketMQ的强大,本人计划写一个RocketMQ实战系列,将涵盖RocketMQ的简介,环境搭建,初步使用、API详解、架构分析、管理员集群操作等知识。

What is RocketMQ?

RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发展和淘宝双十一的洗礼,在功能和性能上远超ActiveMQ。

1.要知道RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性。 2.RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证! 3.RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟! 4.丰富的消息拉取模式(Push or Pull) Push好理解,比如在消费者端设置Listener回调;而Pull,控制权在于应用,即应用需要主动的调用拉消息方法从Broker获取消息,这里面存在一个消费位置记录的问题(如果不记录,会导致消息重复消费)。 5.在Metaq1.x/2.x的版本中,分布式协调采用的是Zookeeper,而RocketMQ自己实现了一个NameServer,更加轻量级,性能更好! 6.消息失败重试机制、高效的订阅者水平扩展能力、强大的API、事务机制等等(后续详细介绍)

初步理解Producer/Consumer Group

ActiveMQ中并没有Group这个概念,而在RocketMQ中理解Group的机制很重要。

Group机制

想过没有,通过Group机制,让RocketMQ天然的支持消息负载均衡! 比如某个Topic有9条消息,其中一个Consumer Group有3个实例(3个进程 OR 3台机器),那么每个实例将均摊3条消息!(注意RocketMQ只有一种模式,即发布订阅模式。)

install RocketMQ

RocketMQ的Broker集群部署模式还挺多的,比如单Master模式、多Master模式、多Master多Slave模式(异步复制)、多Master多Slave模式(同步双写)等。明确个概念,RocketMQ Slave不可以写,可以读,类似于MySQL的主从机制。 单Master模式: 无需多言,一旦单个broker重启或宕机,一切都结束了!很显然,线上不可以使用。 多Master模式: 全是Master,没有Slave。当然,一个broker宕机了,应用是无影响的,缺点在于宕机的Master上未被消费的消息在Master没有恢复之前不可以订阅。 多Master多Slave模式(异步复制): 多对Master-Slave,高可用!采用异步复制的方式,主备之间短暂延迟,MS级别。Master宕机,消费者可以从Slave上进行消费,不受影响,但是Master的宕机,会导致丢失掉极少量的消息。 多Master多Slave模式(同步双写): 和上面的区别点在于采用的是同步方式,也就是在Master/Slave都写成功的前提下,向应用返回成功,可见不论是数据,还是服务都没有单点,都非常可靠!缺点在于同步的性能比异步稍低。

这里我将采用2个Master的方式进行搭建演示,会了双Master,其他的将很简单。(多Master在实际中也是非常常用的,如果并发非常大,考虑多Master多Slave模式)

双Master模式架构

在192.168.99.121/122机器上各一个NameServer、Master进程。

以192.168.99.121为例:

第一步,修改/etc/hosts文件

hosts配置

确保相互之间可以ping通

第二步,解压并创建存储路径

tar -xvf alibaba-rocketmq-3.2.6.tar.gz mkdir -p alibaba-rocketmq/store/{commitlog,consumequeue,index}

第三步,配置文件

broker-x.properties

配置项

上面已经将实际中常用的配置项给出来了!

第四步,修改日志配置文件

注意到logback.*.xml配置文件中:

需要替换${user.name}

可以使用sed进行替换:

sed -i 's#${user.home}#/software/alibaba-rocketmq#g' *.xml

第五步,修改启动脚本中的JVM参数

vim runbroker.sh/rumserver.sh

注意,在这里我将JVM的堆的初始化和最大大小统一设置为1G,并将新生代大小设置为512M。主要是考虑到我的虚拟机内存,实际上在线上是可以走默认的4G堆内存的。

第六步,启动NameServer

nohup sh mqnamesrv &

NameServer

nameserver启动日志

第七步,启动broker-X

启动broker

注意观察日志:

broker.log

进程与端口

第八步:RocketMQ Console

把rocketmq-console.war部署到Tomcat下即可。

解压WAR包

在解压WAR包后的CLASS下更改config.properties

好久不见,TOM猫

rocketmq管控台

这个管控台实际上还是比较简陋的,我们使用比较多的是mqadmin操作命令,后续会介绍。

OK,到这里,双Master的搭建已经完成了!

本篇博客到此为止,下期再见,晚安!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

关于switchover的流程和补充(r9笔记第4天)

对于Oracle Data Guard中的Switchover一般是计划内的操作,自己其实也处理了不少的故障,也算是轻门熟路。复杂的事情简单做,简单的事情重复做...

2815
来自专栏大数据架构

深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制

2635
来自专栏JAVA烂猪皮

RabbitMQ技术详解

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、A...

1551
来自专栏匠心独运的博客

消息中间件—RocketMQ消息存储(一)一、MQ消息队列的一般存储方式二、RocketMQ消息存储整体架构三、RocketMQ文件存储模型层次结构四、总结

文章摘要:MQ分布式消息队列大致流程在于消息的一发一收一存,本篇将为大家主要介绍下RocketMQ存储部分的架构 消息存储是MQ消息队列中最为复杂和最为重要的...

5702
来自专栏Pythonista

centos7安装rabbitmq

RabbitMQ在全球范围内在小型初创公司和大型企业中进行了超过35,000次RabbitMQ生产部署,是最受欢迎的开源消息代理。

2142
来自专栏MessageQueue

如何在MQ中实现支持任意延迟的消息?

定时消息与延迟消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到 MQ 服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者...

5104
来自专栏大魏分享(微信公众号:david-share)

NGINX的定制化 | API Management学习第四篇

3 SCALE中API gateway,是基于NGINX(OpenResty Web Platform = Nginx + Lua )。

1742
来自专栏架构之美

如何打造高可靠高性能的消息队列(ZZMQ)

互联网公司使用最频繁的服务调用组件是RPC框架,RPC同步调用有些场景并不是很适用,而这些场景刚好是一个可靠MQ的适用场景。

4484
来自专栏Java工程师日常干货

RocketMQ实战(四)前言RocketMQ 3.2.6的事务机制Pull Or PushRocketMQ Filter组件介绍

其实到这里,你可以发现RocketMQ的一个特点,就是将生产者和MQ绑定,而不需要特别处理消费者,这是为什么呢?因为消息只要发往RocketMQ成功,那么就意味...

1532
来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十三)集成 UEditor 百度富文本编辑器

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十三)集成 UEditor 百度富文本编辑器 前情回顾 通过前面系统的学...

3348

扫码关注云+社区

领取腾讯云代金券