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的搭建已经完成了!




來源:http://www.jianshu.com/p/3afd610a8f7d
 

 

转载于:https://www.cnblogs.com/master-yao/p/7764576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C面试总结文档

最近很多人有参加面试,面试就避免不了笔试,嵌入式面试的话,避免不了C语言,所以给大家准备了两份pdf C语言面试总结的文档。在本公众号回复 「C面试」获取pdf下载链接推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语…

linux下根据端口查进程,linux根据进程查端口,根据端口查进程

[roottest_environment src]# netstat -tnllup 能显示对应端口和进程Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemdtcp 0 0 0.0.0.0:6000 0.0.0.0:*…

程序员到底怎么了

我们是这样的一群人:每天都在“努力”的工作着,每天都和计算机打交道,泡在网上,打游戏,查资料,发微博。可是有一天,突然意识到,我们的未来在哪里,每个月那点可怜的工资&a…

SQLServer查询表结构

SELECT 表名case when a.colorder1 then d.name else end, 表说明case when a.colorder1 then isnull(f.value,) else end, 字段序号a.colorder, 字段名a.name, 标识case when COLUMNPROPERTY( a.id,a.name,IsIdentity)1 then √else end, 主键case when exists(SELECT 1 F…

来看看比尔盖茨当年写的BASIC解释器源代码吧,你就知道泰勒级数有什么用了...

几年前当我刚上大学那会,我曾经问过我一位学计算机同学的一个问题:计算机是如何计算诸如 或者 这种运算的?当初这个问题曾经困扰了我好长时间,这个问题并非是我当年在微积分课堂上解决的,而是直到我后来接触编程后才彻…

linux查看进程ppid,pidof命令从运行的进程中以名称查找出进程号PID/PPID横向大到小展示...

1.释义从运行的进程中以名称查找出进程号PID/PPID横向大到小展示2.系统帮助PIDOF(8) Linux System Administrators Manual PIDOF(8)NAMEpidof -- find the process ID of a running program.SYNOPSISSYNOPSISpidof [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]] [-o omit…

语言的本地化支持

Support channels on IRC and mailing lists exist for Ubuntu users whose first language is not English. You are welcome to join one of these or start your own. 对于母语不是英语的Ubuntu用户来说,已经有相应的邮件列表和IRC频道提供支持。欢迎你加入它们…

手机可以连接多少个蓝牙设备?

这是一个课题研究,蓝牙的东西我们可以先不说,我们讨论一个产品需求。我经常遇到一个场景,就是我用我的手机连上TWS蓝牙耳机听音乐,然后呢,我没有开车,我下地铁的时候,我需要打开我的手机&#x…

Spring简洁总结

Spring简洁总结 要的对象不是自己建的,而是IOC容器(XML文件)给的,我们通过getbean来调用。 依赖注入的话就是对象(bean)的成员的赋值不是我们手动完成,而是容器(XML文件)…

linux 网络 守护进程 禁止,Linux守护进程基础

1 守护进程中涉及到的基本概念1.1进程组1.1.1 进程组基本概念进程组是一个或多个进程的集合,可以接收来自同一个终端的各种信号。每运行一个程序或是命令都将产生一个进程组。每个进程属于一个进程组,而每个进程组都存在一个领头进程(或是叫组长进程)&am…

抽象工厂的应用

抽象工厂的应用本文是描述了自己对设计模式的工厂的了解.肯定有错误和不足的地方,希望大家能给予支持和建议. 1.问题的引出在前面的Post中,我描述了.NET的反射在软件设计中的应用.当这篇Post发表之后,有人认为用工厂来实现更合理一些。在这篇Post里&…

一口气搞懂「文件系统」,就靠这 25 张图了

前言不多 BB,直接上「硬菜」。正文文件系统的基本组成 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可…

linux里没有grub文件,linux – 安装Ubuntu后没有grub菜单,直接启动...

我有两个独立的SSD.其中一个安装了Windows 10 Pro,另一个安装了Ubuntu 14.04.3 LTS.当我的计算机启动时,我没有选择grub菜单来选择我要启动的操作系统,它会直接自动启动到Ubuntu.当将SSD设置为BIOS中引导顺序中的第一个SSD时,我可以启动进入Windows的问题.我有第三个2TB硬盘,我…

Samba远程代码执行漏洞(CVE-2017-7494)复现

简要记录一下Samba远程代码执行漏洞(CVE-2017-7494)环境搭建和利用的过程,献给那些想自己动手搭建环境的朋友。(虽然已过多时) 快捷通道:Docker ~ Samba远程代码执行漏洞(CVE-2017-7494) 演 示:服务器版“永恒之蓝”高危预警 &#xff0…

mac 终端登陆linux,Mac终端自动登录服务器

效果输入命令,选择一个序号登录服务器$ aoel(1) first 192.168.1.1(2) 第二台机器 192.168.1.2配置文件1. 填写服务器信息 computerInfo.ini#ip port user password description192.168.1.1 22 root 123456 first machine192.168.1.2 22 root 123456 第二台机器2. 使…

你说,辽宁输在哪了?

今晚看完了整场比赛,比赛很激烈,有完美的地方,也有不完美的地方看完比赛后,我一个刚从美国回来,现在在凤凰山脚下隔离的同学发消息给我说 「怎么才打三场就拿了总冠军了」?说下比赛整场比赛,辽宁…

[导入]Gemini翻譯為中文時的注意事項

1. 一般檔案 *.aspx, *.ascx 在翻譯為繁體中文或簡體中文後都要儲存為ANSI格式,不可用UTF-8,不然會亂碼,繁體轉簡體也有問題 2. Template中信件的樣版檔案 *.vm ,反而要另存為 UTF-8 格式,不然收到的信會是亂…

linux cocos环境变量,Linux开发cocos2dx程序环境搭建

安装linux系统,ubuntu 14.04 64位linux安装支持软件sudo apt-get updatesudo apt-get install git ssh vim ctags qt-sdk build-essential libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev libglfw-dev libzip-dev libcurl4-gnutls-dev libfontconf…

答应了好久的camera资料

之前是在知识星球上,有好几个同学问了camera的资料,我简单的说了下,也送了些资料,然后微信好友又有人问,我觉得camera这个,应该是要发一次资料了。之前写过的关于camera的文章安卓camera总体框架Camera摄像…

[新功能]删除团队文章

现在团队管理员可以删除团队中的文章。操作方法:在团队管理中,选择“文章管理”,然后可以在列出的文章标题旁点击“移出”,或者手动输入文章地址进行移出。转载于:https://www.cnblogs.com/dudu/archive/2005/05/16/156674.html