笔者最近在业务上需要使用到MetaQ,也借此阅读了MetaQ的相关源码,准备分享MetaQ源码分析。先扫扫盲,如果读者对MetaQ已经较为熟悉,可以跳过下一段落。
一、MetaQ简介
MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,,MetaQ具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,METAQ在阿里巴巴各个子公司被广泛应用,每天转发250亿+条消息。主要应用于异步解耦,Mysql数据复制,收集日志等场景。
主要特点
- 生产者、服务器和消费者都可分布
- 消息存储顺序写
- 性能极高,吞吐量大
- 支持消息顺序
- 支持本地和XA事务
- 客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据
- 支持消费端事务
- 支持消息广播模式
- 支持异步发送消息
- 支持http协议
- 支持消息重试和recover
- 数据迁移、扩容对用户透明
- 消费状态保存在客户端
- 支持同步和异步复制两种HA
二、MetaQ的总体架构
消息中间件消费消息有两种方式,推送消息和拉取消息,一般对于实时性要求非常高的消息中间件,会更多的采用推送的模式,如ActivitiQ,而MetaQ采用的主动拉取消息的模式,通过Zookeeper进行协调,MetaQ分为三部分:Server、Client(包括消息产生者和消费者)以及协调者Zookeeper,总体结构如下:
三、工程结构分析
MetaQ的源码可以从以下链接获取:https://github.com/killme2008/Metamorphosis (本序列基于MetaQ 1.4.5进行分析),下载工程到本地,我们发现主要有如下几个工程,先大致介绍一下工程的划分:
- metamorphosis-client,生产者和消费者客户端
- metamorphosis-client-extension,扩展的客户端。用于将消费处理失败的消息存入notify(未提供),和使用meta作为log4j appender,可以透明地使用log4j API发送消息到meta
- metamorphosis-commons,客户端和服务端一些公用的东西
- metamorphosis-dashboard, metaq的Web信息展示
- metamorphosis-example,客户端使用的例子
- metamorphosis-http-client,使用http协议的客户端
- metamorphosis-server,服务端工程
- metamorphosis-server-wrapper,扩展的服务端,用于将其他插件集成到服务端,提供扩展功能,支持高可用的同步异步复制
- metamorphosis-storm-spout,用于将meta消息接入到twitter storm集群做实时分析
- metamorphosis-tools,提供服务端管理和操作的一些工具
工程依赖图大致如下:
源码分析也将以分Server和Client两阶段进行,将优先进行Server的分析,下一篇将正式带大家进入MetaQ的世界。
相关推荐
metamorphosis(metaq) 服务端1.4.3版本 包括客户端 发送一个序列化对象
整理后的Metaq原理应用文档,欢迎大家看看。
metaQ向spark传数据
metaq-server-1.4.6.2服务端+客户端+javadoc文档,打包于一个压缩包
Metaq在JDk 7下的异常及解决方案,希望可以帮助学习者!
metaq-server-1.4.6.2.tar.gz
Metamorphosis是淘宝开源的一个Java消息中间件,他类似apache-kafka,但不是一个简单的山寨拷贝,而是做了很多改进和优化,项目的主页在淘蝌蚪上。服务端、客户端、javadoc都包含在内。
metaQ的安装包
metaq--1.4.6.2.zip 和原版一样就是换了个名字,方便大家一起学习.
Memorphosis是一个消息中间件,它是linkedin开源MQ——kafka的Java版本,针对淘宝内部应用做了定制和优化。Metamorphosis的设计原则 • 消息都是持久的,保存在磁盘 • 吞吐量第一 • 消费状态保存在客户端 • ...
MetaQ 分布式消息服务中间件.pdf
Metamorphosis(MetaQ)是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在...
Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,...
Metamorphosis, 一种高可用高性能的分布式 #新闻MetaQ 1.4.6.2 发布。更新日志MetaQ 1.4.6.1 发布。更新日志MetaQ 1.4.5.1 发布。更新日志MetaQ 1.4.5发布。更新日志meta: 一个用于的ruby 客户端。 源代码
rocketMQ
软件(阿里),其对应的许多技术文档还是比较容易看的,并且Github提供了许多的应用实例,所以使用MetaQ作为Storm的消息源之一是必须掌握的。该模拟项目中,使用MetaQ作为storm的消息源,MetaqSpout从指定的...
分享一下 RocketMq的文档RocketMQ运维指令 rocketmq在阿里内部叫metaq
RocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改为 RocketMQ。