文档章节

初识淘宝消息中间件MetaQ(一)

陈小扁
 陈小扁
发布于 2016/09/08 16:38
字数 1694
阅读 660
收藏 4

前言

再说mq之前我们先说说背景吧,MQ(message queue简称消息队列)主要作用不是通讯,主要是用于解除子系统间的耦合,所以异构系统间的通讯实际并不是mq发挥作用的场景,那反而是RPC(remote procedure call)发挥作用的时候, mq更适合于需要更大流量和高并发的大型系统场景,可以将消息队列视为一个可靠的通道,主交易过程在处理时,遇到需时较多同时又已经确定了条件的处理就丢到消息队列里进行后续处理,这样可以将主交易过程划分为一个一个可以异步处理的更小的处理过程,减少了主交易流程的处理时间,可以提供更快的响应速度和并发速度,例如,像淘宝这样的处理逻辑非常多的系统,在处理付款时,就可以将通知买家和卖家、记日志甚至记帐流程都放到消息队列里处理,整个主流程能够快速处理完成,继续处理下一个买家的请求

 

1.MetaQ简介

MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy。MetaQ具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景

 

2.MetaQ使用场景

(1) 日志传输,用于高吞吐量的日志传输;

(2) 消息广播,将消息放入Topic中,供所有的消费者消费;

(3) 数据的顺序同步功能,如mysql binlog复制;

(4) 分布式环境下(broker、producer、consumer都为集群)的消息路由,对顺序和可靠性有极高的要求的应用场景;

(5) 作为一般的MQ来使用其功能

 

原理介绍

3.MetaQ安装部署

MetaQ的安装比较简单,只需要将服务器包下载下来解压到指定位置就行。下载metaq-server-1.4.6.2.tar.gz(https://github.com/killme2008/Metamorphosis/wiki/ReleaseNotes)

使用下面命令进行解压

tar –zxvf metaq-server-1.4.6.2.tar.gz

一般情况下,我们需要用到的是其bin下的几个服务器脚本。

(1)     Bin目录下有metaServer.sh脚本,该脚本是主要的执行脚本;

(2)     Logs目录下有相关的MetaQ日志信息;

(3)     Conf目录下有主要的配置文件server.ini;

(4)     Lib目录下是相关的依赖包

启动服务器:

software/bin/metaServer.sh start;

关闭服务器:

software/bin/metaServer.sh stop

查看服务器状态:

software/bin/metaServer.sh status

 

注意点

需要先配置zookeeper,否则会启动失败

首先安装ZK

其次在software/metaq/conf 目录下打开server.ini文件,配置如下关联的ZK信息:

;zk的服务器列表 
zk.zkConnect=192.168.66.78:2181 
;zk心跳超时,单位毫秒,默认30秒 
zk.zkSessionTimeoutMs=30000 
;zk连接超时时间,单位毫秒,默认30秒 
zk.zkConnectionTimeoutMs=30000
;zk数据同步时间,单位毫秒,默认5秒 
zk.zkSyncTimeMs=5000

启动成功以后在浏览器中输入http://192.168.66.78:8120/,会显示MetaQ主页面

 

4.项目中如何应用MetaQ

项目中的使用可以参照我在github上面的例子:https://github.com/xiaobianchen/arch-message/

metaq里面的代码

 

5.MQ术语介绍

Producer:

消息生产者,负责产生消息,一般由业务系统负责产生消息。

Consumer:

消息消费者,负责消费消息,一般是后台系统负责异步消费。

Consumer Group:

一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。

Topic:

消息的主题,由用户定义并在服务器端配置。Producer发送消息到某个Topic下,Consumer从Topic下消费消息。

Broker:

消息中转角色,负责存储消息,转发消息,一般也称为Server,在JMS规范中称为Provider。

分区(partition):

同一个topic下面还分为多个分区,如meta-test这个topic我们可以分为10个分区,分别有两台服务器提供,那么可能每台服务器提供5个分区,假设服务器id分别为0和1,则所有分区为0-0、0-1、0-2、0-3、0-4、1-0、1-1、1-2、1-3、1-4。

Offset:

消息在broker上的每个分区都是组织成一个文件列表,消费者拉取数据需要知道数据在文件中的偏移量,这个偏移量就是所谓offset。Offset是绝对偏移量,服务器会将offset转化为具体文件的相对偏移量。

广播消费(典型的朋友圈发微博):

一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被组中的每一个Consumer消费一次。

集群消费:

一个Consumer Group中的Consumer实例平均分摊消费消息。

主动消费:

Consumer主动向Broker发起获取消息请求,控制权完全在于Consumer应用。

被动消费:

Consumer注册一个Callback接口,由MetaQ后台自动从Broker接收消息,并回调Callback接口。

顺序消息:

消费消息的顺序要同发送消息的顺序一致,在MetaQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列中。

普通顺序消息:

顺序消息中的一种,正常情况下保证消息的顺序,但发生异常后,例如Broker重启,队列发生变化,产生短暂的消息顺序不一致。

严格顺序消息:

顺序消息的一种,无论什么情况下都能保证消息的顺序,牺牲了分布式的Failover的特性。

Message Queue:

在MetaQ中,所有的消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用Offset来访问,Offset为java long类型,64位,理论上在100年内不溢出,所以认为是长度无限,队列中只保留几天的数据,之前的数据会被定时删除。

Messaging System:

消息中间件的统称,但不局限于消息中间件,与消息传输相关的类似系统。

 

metaq集群

http://www.iteye.com/magazines/107

http://blog.csdn.net/wych1981/article/details/45166769

http://www.linuxidc.com/Linux/2014-02/97299.htm

http://linuxblind.blog.51cto.com/7616603/1266752

https://my.oschina.net/MrMichael/blog/528196

https://github.com/killme2008/Metamorphosis/wiki/%E5%A6%82%E4%BD%95%E5%BC%80%E5%A7%8B

© 著作权归作者所有

陈小扁

陈小扁

粉丝 53
博文 87
码字总数 71417
作品 0
浦东
高级程序员
私信 提问
消息中间件metaq理解

Java Message Service (JMS)Java的消息中间件. metaq作为i额消息中间件,应该是在这个范畴中.二者范围有一定差异. jms应该说是一种规范. metaq是一种框架,用于实现消息推送的功能. 1.metaq的消...

最爱肉肉
2016/11/17
44
0
Metamorphosis 1.4.4 发布,分布式消息中间件

Metamorphosis(MetaQ) 1.4.4 发布了,该版本做了很多改变和性能的提升,完整的改进记录请看发行说明。 Metamorphosis (MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于Linke...

oschina
2013/03/11
1K
0
支付宝钱包系统内部架构图,架构设计

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

洋哥6
2016/02/02
771
0
最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

天天顺利
2015/06/09
470
0
阿里中间件——消息中间件Notify和MetaQ

3.1、Notify Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用。消息系统的核心作用就是三点:解耦,异步和并行。下面让...

Eller
2016/10/27
590
0

没有更多内容

加载失败,请刷新页面

加载更多

Echars鼠标点击事件多次触发

本文转载于:专业的前端网站➭Echars鼠标点击事件多次触发 gChart.on('click', function (params) { if (params.componentSubType == "bar" && params.componentType == "serie......

前端老手
14分钟前
3
0
springboot2.0.6(附) 解析META-INF/spring.factories通过系统加载类获取对应的 class 的全限定名称

在 SpringBoot中是通过getSpringFactoriesInstances(Class<T> type)方法获取所有classpath下面的META-INF/spring.factories文件,然后根据type值找到对应的 class 的全限定名称列表。下面我来...

小亮89
15分钟前
3
0
zk工厂方法实现NIOServerCnxnFactory

NIOServerCnxnFactory类 内部类 AbstractSelectThread AcceptThread SelectorThread 属性 ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT 10s session过期时间 ZOOKEEPER_NIO_NUM_SELECTOR_THREADS......

writeademo
19分钟前
3
0
天猫精灵业务如何使用机器学习PAI进行模型推理优化

作者:如切,悟双,楚哲,晓祥,旭林 引言 天猫精灵(TmallGenie)是阿里巴巴人工智能实验室(Alibaba A.I.Labs)于2017年7月5日发布的AI智能语音终端设备。天猫精灵目前是全球销量第三、中国...

阿里云官方博客
26分钟前
5
0
BJL技巧之大路馆擦法—《利辰逸》

很多朋友刚玩百佳时间不长,不知道如何看路,今 天我就来简单的讲下看大路的方法。 都是前辈教的,这里我只是简单复述一下。 大路的观察方法有以下几种: 先从庄闲的数量变化说起。 庄闲的强...

那女孩对我说
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部