MetaQ调研及安装部署文档

时间:2022-07-04 03:07:53

博客公告:

 (1)本博客所有博客文章搬迁至《博客虫http://blogchong.com/

                     (2)文章对应的源码下载链接参考博客虫网站首页的“代码GIT”;

                      (3)更多的相关文章更新,以及代码等,请关注博客虫网站,网站中有技术Q群,以及代码共享链接。

                 (4)该博客内容还会继续更新,不过会慢一些。


该文档为实实在在的原创文档,转载请注明:

http://blog.sina.com.cn/s/blog_8c243ea30101iyqo.html

类型

详细

备注

该文档为MetaQ调研及安装部署文档,增加对MetaQ的理解,指导MetaQ的安装部署,在部署完MetaQ环境后,会把MetaQ集成到项目代码中,有兴趣的请继续关注。

 

 

相关描述

²  其他相关文档请参考新浪博客http://blog.sina.com.cn/huangchongyuan

² 

²  部分文档涉及到源码,有需要的博客留言

² 欢迎加入storm-分布式-IT技术交流群(191321336,群中有详细的资料),一起讨论技术,一起分享代码,一起分享设计。

 

目录

MetaQ调研及安装部署文档... 1

1 文档说明... 2

2 MetaQ调研... 2

2.1 开源项目来源及简介... 2

2.2 相关术语... 2

2.3 MetaQ与Kafka的区别... 4

2.4 MetaQ的应用... 4

3 安装部署... 4

3.1 MetaQ服务器安装... 4

3.2 关闭启动服务器... 5

3.3 配置集群模式... 5

3.3.1 配置zookeeper. 5

3.3.2 启动服务... 5

  

1 文档说明

该文档MetaQ的调研文档及安装部署文档。对一个新的开源项目进行学习,个人喜欢对其先进行详细的调研,虽然网上关于MetaQ的资料众多,但个人喜欢将其以自己习惯的方式整理出来,方便以后查询。

关于写该文档的目的,首先是想要了解更多关于MetaQ应用方面的技术,以前接触过一点点MetaQ,如今想要更加系统的学习一下它。

个人想在自己的电脑环境中部署一个MetaQ的环境,用于Storm与MetaQ的接口研究。

本文档大部分资料参考自Github的相关文档及其他网络上的资料。

2 MetaQ调研

2.1 开源项目来源及简介

Metamorphosis是淘宝开源项目的一个消息中间件,多数人又简称其为MetaQ。该项目据闻是当年淘宝的伯岩大神(庄晓丹)与无花大神大神等开发出来的。至今在Github有相关的开源代码及相关的搭配文档。

METAQ是一款完全的队列模型消息中间件,服务器使用Java语言编写,可在多种软硬件平台上部署。客户端支持Java、C++编程语言。单台服务器可支持1万以上个消息队列,通过扩容服务器,队列数几乎可任意横向扩展。每个队列都是持久化、长度无限(取决于磁盘空间大小)、并且可从队列任意位置开始消费。

基本概括:

(1) MetaQ是一个队列模式的消息中间件;

(2) 消费者、生产者及队列都可以分布式;

(3)生产者向一些队列轮流发送消息,队列集合称为Topic,消费者如果做一个广播消费,则一个消费者实例消费这个Topic对应的所有队列,如果做集群消费,则多个实例平均消费Topic对应的队列集合。

PS:在Github上找到无花大神写的metaq与storm接口及http接口的相关源码,顿时让我泪牛满面啊~~!

2.2 相关术语

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属于同一个ConsumerGroup,消息也会被组中的每一个Consumer消费一次。

集群消费:

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

主动消费:

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

被动消费:

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

顺序消息:

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

普通顺序消息:

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

严格顺序消息:

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

Message Queue:

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

Messaging System:

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

 

2.3 MetaQ与Kafka的区别

 

MetaQ与Kafka的相似度还是挺高的,具体区别见下图:

MetaQ调研及安装部署文档

总体来说,MetaQ的设计参照了Kafka,但又在这个基础上作了很多改进(开发者的原话)。

 

2.4 MetaQ的应用

 

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

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

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

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

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

 

3 安装部署

 

3.1 MetaQ服务器安装

 

MetaQ的安装比较简单,只需要将服务器包下载下来解压到指定位置就行。

例如,下载metaq-server-1.4.6.2.tar.gz

使用tar –zxvf metaq-server-1.4.6.2.tar.gz即可。

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

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

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

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

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

 

3.2 关闭启动服务器

 

启动服务器:

Opt/bin/metaServer.sh start local //本地模式

关闭服务器:

Opt/bin/metaServer.sh stop

查看服务器状态:

Opt/bin/metaServer.sh status

 

3.3 配置集群模式

 

3.3.1 配置zookeeper

 

关于ZK集群安装请查看个人文档《storm调研及安装部署》,在那个文档中由于storm安装部署用到了ZK,所有有相关的内容。

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

;zk的服务器列表

zk.zkConnect=zookeeperHost:2181

;zk心跳超时,单位毫秒,默认30秒

zk.zkSessionTimeoutMs=30000

;zk连接超时时间,单位毫秒,默认30秒

zk.zkConnectionTimeoutMs=30000

;zk数据同步时间,单位毫秒,默认5秒

zk.zkSyncTimeMs=5000

注:如果ZK部署成一个集群,在只需要写一个zookeeper路径即可,且每一个MetaQ集群节点都如上配置。

以上为基本配置,其他配置可以参考conf/server_sample.ini示范文件。

 

3.3.2 启动服务

 

在MetaQ集群的每一个节点上启动服务,如下:

metaServer.sh start

//后面不添加local则为集群模式启动。