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

Github地址:https://github.com/killme2008/Metamorphosis

为了使大家对MetaQ有进一步的了解,本期我们采访了MetaQ的核心开发者庄晓丹。

ITeye期待并致力于为国内优秀的开源项目提供一个免费的推广平台,如果你和你的团队希望将自己的开源项目介绍给更多的开发者,或者你希望我们对哪些开源项目进行专访,请告诉我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。

先来个自我介绍吧! Top

我叫庄晓丹,工作5年左右,工作经历比较杂,在创业公司呆过,在大公司呆过。目前在AVOS的中国分公司工作,我们的主要产品是美味书签(delicious.com和中文版的meiweisq.com)、美味爱读(readwise.net)等。我的主要工作语言是Clojure/Java,编程既是我的工作,也是兴趣爱好。

MetaQ是什么?能做什么? Top

MetaQ(全称为Metamorphosis)是一个淘宝开源的分布式的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。这个产品是我在淘宝中间件团队发起并作为核心开发者的一个项目。第一个版本的完整代码包括完整的单元测试是我在两周内(印象中是,可能更短)写出来的。

MetaQ既然是一个消息中间件,那么消息中间件能做的事情,MetaQ都是可以做到的。消息中间件作为分布式系统可扩展、可伸缩性的关键一环,MetaQ可以起到很好的作用。

MetaQ项目的由来? Top

MetaQ的起源是我从对Linkedin的开源MQ(现在转移到Apache kafka的学习开始的,这是一个设计很独特的MQ系统,它采用pull机制,而不是一般MQ的push模型,它大量利用了zookeeper做服务发现和offset存储,它的设计理念我非常欣赏并赞同,强烈建议有兴趣的同学阅读一下它的设计文档,总体上说MetaQ的设计跟它是完全一致的。

可不可以说MetaQ是Apache Kafka的Java实现 & 功能增强版本? Top

可以这样说,因为总体的设计是一致的,但是我们做了很多优化和改进。

可以简单概括下我们重新写metaq的原因:

  • Kafka是scala写的,我对scala不熟悉,并且在当时kafka整个社区的发展太缓慢了。
  • 有一些功能是kakfa没有实现,但是我们却需要,比如事务、多种offset存储、高可用方案(HA)等
Meta相对于kafka特有的一些功能:

  • 文本协议设计,非常透明,支持类似memcached stats的协议来监控broker
  • 纯Java实现,从通讯到存储,从client到server都是重新实现。
  • 提供事务支持,包括本地事务和XA分布式事务
  • 支持HA复制,包括异步复制和同步复制,保证消息的可靠性
  • 支持异步发送消息
  • 消费消息失败,支持本地恢复
  • 多种offset存储支持,数据库、磁盘、zookeeper,可自定义实现
  • 支持group commit,提升数据可靠性和吞吐量。(目前kafka已实现)
  • 支持消息广播模式
  • 一系列配套项目:Python/Ruby/C/C++客户端、Twitter Storm的Spout、Tail4j等。

与其他消息系统(如ActiveMQ、HornetQ)相比,MetaQ有哪些优势或特点? Top

ActiveMQ和HornetQ都是符合Java EE中JMS规范的MQ实现,两者都是很优秀的开源MQ。同时两者也不局限在JMS规范,同时也支持其他一些MQ协议,如stomp协议、AMQP协议等。相比来说,就我当时了解的情况来看,HornetQ的性能会比ActiveMQ更强,因为HornetQ使用JNI基于异步IO做了更多优化,而对于MQ来说,最终的瓶颈都是落在IO存储上。MetaQ的性能是远远超过这两个MQ的,有一个网友做的比较可以说明一定问题(http://www.blogjava.net/livery/articles/391595.html),但是这不能说MetaQ比它们就更优秀,因为这跟它们的实现,和面对的场景有很大关系。

ActiveMQ和HornetQ,这两个MQ从诞生起就是为了企业应用而设计的,JMS规范本身也是企业应用系统的规范。这一套东西,我个人认为并不适合互联网应用。互联网应用通常面对的是海量的数据,并且通常对事务一致性的要求相对较弱,而企业应用对事务一致性的要求就相对很高。互联网应用为了处理大量请求,通常采用集群处理的方式,而JMS规范并不重视分布式应用。我说的这个集群不仅仅是服务端broker的集群,还包括生产者和消费者都可能是一个又一个集群,而传统的JMS规范是没有明确处理这些情况的。互联网应用还有一个问题是异构系统特别多,而JMS规范只是Java EE这个平台上的规范,对异构系统的接入也是一个比较麻烦的地方,不同的实现有很大的差异。

综合来讲,HornetQ和ActiveMQ是为了企业级应用设计的消息中间件,而MetaQ从一开始就是为了大规模互联网应用设计的消息中间件,两者面对的场景和需求不同。开发者可根据实际的需求,选择合适的产品。

从MQ的发展来看,我们可以看到,出现了越来越多特定领域的消息中间件,例如memcacheq、kestrel、beanstalkd甚至redis,它们很轻量级,并且不想做到全能,而只是解决一个领域的问题,我觉得这是未来的趋势。

MetaQ的内部是如何实现的? Top

从实现角度看,MetaQ充分利用zookeeper这个优秀的服务中心,作为服务注册和查找中心、客户端负载均衡和数据偏移量的分布式存储使用。Zookeeper在MetaQ整个集群中扮演非常关键的角色。

MetaQ的存储实现与kafka是一致的,充分利用传统磁盘顺序读写非常高效的特点,并且利用group commit、sendfile系统调用等技术来充分提高IO效率。

MetaQ的事务实现跟ActiveMQ是类似的,采用redo日志的方式,并遵循JTA协议规范来实现分布式事务。

MetaQ的网络协议跟memcached文本协议类似,因为我本人非常熟悉memcached(开源的xmemcached客户端是我开发的),但是MetaQ的协议引入了opaque的映射字段,提高请求的并行度。正因为采用文本协议,为MetaQ编写其他语言客户端是相对容易,并且管理MetaQ服务器也变的很容易,比如MetaQ提供了stats协议,通过telent就可以获取服务器的运行状况。

关于更多的实现细节可以看Wiki上的文档:

MetaQ适合的场景? Top

  • 日志传输,高吞吐量的日志传输,这本来也是kafka的强项。
  • 消息广播功能,如广播缓存配置失效。
  • 数据的顺序同步功能,如MySQL binlog复制。
  • 分布式环境下(broker、producer、consumer都为集群)的消息路由,对顺序和可靠性有极高要求的场景。
  • 作为一般MQ来使用的其他功能。

MetaQ的性能如何? Top

关于性能,可以看wiki上的性能测试页面 https://github.com/killme2008/Metamorphosis/wiki/performance

总体来说,MetaQ的性能还是很优秀,但是很大程度上取决于使用的存储磁盘的性能。

MetaQ目前的应用情况? Top

MetaQ在淘宝每日有十亿级别的消息流转,在支付宝有百亿级别的消息流转(作为storm的spout源),在阿里B2B也有部分应用。

在我目前的AVOS.com我们也在使用它作为后端系统的消息中间件。就我所知还有部分公司在尝试使用,例如腾讯、京东等。

目前MetaQ的主要维护者?有其他开发者参与贡献吗? Top

MetaQ还有一位主要开发者是我在淘宝的前同事无花(花名),以及一位非常热心的网友netcomm,贡献了不少的文档。

使用MetaQ应注意哪些事项? Top

MetaQ作为一个分布式的消息中间件,需要依赖zookeeper,对于一些规模不大、单机应用的场景,我个人并不是特别支持尝试用MetaQ,因为多一个依赖系统,其实就是多一份风险,在这些简单场景下,可能类似memcacheq、kestrel甚至redis等轻量级MQ就非常合适。而MetaQ一开始就是为大规模分布式系统设计的,如果不当使用,可能没有带来好处,反而多出一堆问题。开发者需要根据自己面对的场景,团队的技术能力,做出一个合适的选择。

MetaQ采用的开源协议?该项目的后续开发计划? Top

MetaQ采用宽松的、对商业友好的Apache 2.0开源协议。

新版本1.4.4一直在开发过程中,但是因为我个人工作重心的转移,整体进展不是特别理想。1.4.4主要想解决易用性和消费者负载均衡的问题。

特别希望有兴趣的朋友参与这个项目的发展,共同学习和促进。

Github地址:https://github.com/killme2008/Metamorphosis/
  • 大小: 40.2 KB


评论 共 20 条
20 楼 wangguo 2013-01-18 10:45
Jen 写道
dennis_zane 写道
warren0827 写道
magic4u 写道
和RabbitMQ比较有什么优缺点呢?

同问,你说METAQ比activeMQ, hornetQ性能好很多,和rabbitmq比过吗?

rabbitmq没有比较过,不过我个人估计超过rabbitmq是没有悬念的,因为AMQP的模型摆在那里。有兴趣可以测试对比看看。


我前段时间测过,1k消息metaq tps 1w多的时候,rabbitmq只有4k左右,rabbitmq消耗cpu较多,metaq消耗io较多,在我的特定机型下也说明不了问题。

亲,无花的博客链接错了,是这个啊http://jen.iteye.com/

sorry,已经改过来了
19 楼 Jen 2013-01-18 10:17
dennis_zane 写道
warren0827 写道
magic4u 写道
和RabbitMQ比较有什么优缺点呢?

同问,你说METAQ比activeMQ, hornetQ性能好很多,和rabbitmq比过吗?

rabbitmq没有比较过,不过我个人估计超过rabbitmq是没有悬念的,因为AMQP的模型摆在那里。有兴趣可以测试对比看看。


我前段时间测过,1k消息metaq tps 1w多的时候,rabbitmq只有4k左右,rabbitmq消耗cpu较多,metaq消耗io较多,在我的特定机型下也说明不了问题。

亲,无花的博客链接错了,是这个啊http://jen.iteye.com/
18 楼 javalinjx 2013-01-11 16:50
liuwenjun05101 写道
我测试了一下   总是报线程错误


是不是你自己在配置有问题啊。
17 楼 liuwenjun05101 2013-01-10 11:47
我测试了一下   总是报线程错误
16 楼 vision2000 2013-01-08 10:27
我正需要一个这样的应用,目前用的ActiveMQ
METAQ是否解决以下问题:
1、是否支持动态topic,因为我的应用是交互式数据,一个点既是生产者也是消费者
2、数据的可靠性如何?因为涉及账务往来,数据丢失要降到最低
3、互联网中使用,对于网络延迟是否可以正常运行,我的点分布在全国各地
4、是否支持掉线重连,如机房网络故障,客户端是否可以自动重连
5、集群是否能自动切换其他cluster
15 楼 SANTOS 2013-01-04 16:03
是美味书签的程序猿啊,膜拜~~技术上面你们家公司确实很不错,这个专家分享做的不错
14 楼 dennis_zane 2013-01-04 13:30
melin 写道
值得学习的牛人。

HA可以实现自动切换吗? 当master挂了,能够自动切换到slave上来?不需要人工干预!

抱歉,目前不支持自动切换,不是不能做,而是怕遇到“脑裂”问题。
13 楼 dennis_zane 2013-01-04 13:30
warren0827 写道
magic4u 写道
和RabbitMQ比较有什么优缺点呢?

同问,你说METAQ比activeMQ, hornetQ性能好很多,和rabbitmq比过吗?

rabbitmq没有比较过,不过我个人估计超过rabbitmq是没有悬念的,因为AMQP的模型摆在那里。有兴趣可以测试对比看看。
12 楼 dennis_zane 2013-01-04 13:29
warren0827 写道
能做到实时吗? real time?一般情况LATENCY是多少?

实时可以设置拉取的平均间隔,服务端的刷盘时间等等参数,可以做到毫秒级别的延迟。
11 楼 first_eye 2013-01-04 13:26
之前朋友给了个美味爱读的邀请码 用了一个月了,感觉真的不错 经常看到高质量文章:)晓丹加油!
10 楼 warren0827 2013-01-03 21:12
能做到实时吗? real time?一般情况LATENCY是多少?
9 楼 warren0827 2013-01-03 21:11
magic4u 写道
和RabbitMQ比较有什么优缺点呢?

同问,你说METAQ比activeMQ, hornetQ性能好很多,和rabbitmq比过吗?
8 楼 magic4u 2013-01-03 12:51
和RabbitMQ比较有什么优缺点呢?
7 楼 how8586 2012-12-31 10:29
值得学习
6 楼 FQ_kevin 2012-12-30 23:32
5 楼 lintghi 2012-12-29 21:00
4 楼 melin 2012-12-29 18:45
值得学习的牛人。

HA可以实现自动切换吗? 当master挂了,能够自动切换到slave上来?不需要人工干预!
3 楼 javalinjx 2012-12-29 17:19
一直有关注晓丹,一直在学习着。。
2 楼 Arbow 2012-12-29 13:36
顶老庄,迟点我们也要考虑用它了
1 楼 jitabc 2012-12-29 12:56
这个要顶,庄庄

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 星际战甲结合扫描目标位置

    瑟玛里斯日常任务——结合扫描 任务领取地点:水星-亚兰达中继站 领取方式:ESC - 快速移动 - 智能核心瑟玛里斯(俗称大黄脸) 从大黄脸右边的蓝色圆球处购买“结合扫描器”和“动能吸收陷阱”。 从大黄脸后边的蓝色圆球领取扫描目标任务。 目标位置: 远古干扰者:水星 - M主星(交叉火力歼灭) 天蝎:谷神星 - 莱克斯(捕获) ...

  • warframe怒焚者结合目标_warframe哪些地图有结合目标 | 手游网游页游攻略大全

    发布时间:2015-10-21[故事背景] 刀锋女皇消失后,虫群分崩离析.吉姆·雷诺将莎拉·凯莉根偷偷带离查尔星,把这个星球留给沃菲尔将军和自治联盟.与此同时,威力强大的萨尔纳加神器消失无踪. 在尤摩捷护卫军的秘密基地里,雷诺和维勒安王子对凯莉根进行 ...标签:发布时间:2016-07-26中上分升段一直是游戏的重要主题,下面小编带来的是幸存者地图流上分攻略,想要飞快升段的幸存者玩家,可以来参考...

  • warframe怒焚者结合目标_Warframe中文维基:403

    WARFRAME中文wiki(灰机wiki)遭到了大量来路不明爬虫骚扰,由于爬虫已经严重影响了其他托管站点的用户和访问者平等访问、使用灰机平台的权利,我们只能对Warframe站点进行暂时性隔离并限制访问隔离期间我们会积极分析日志,加强对非法爬虫、QQbot的反制措施,并收集必要的证据,保留对滥用wiki开放机制,抄袭剽窃wiki内容者采取进一步措施的可能性。隔离治疗期间玩家和用户可以使用狗头人A...

  • 星际战甲堕落轰击者结合目标_warframe星际战甲新手必备mod分享

    warframe星际战甲中有很多不同效果的mod,下面给大家推荐一些从初期到毕业都比较强力的mod,下面一起来看看吧。一.战甲篇A:暗影套mod:完成牺牲后黑咖喱自带,如不慎出售,任意中继站simaris处可用集团声望换取。B:步枪增幅:午夜电波兑换不屈不挠:B轮噩梦任务(15.49%)百折不挠:C轮噩梦任务(15.49%)C:成长之力:无赖魅影(6%)ps:完成系列任务落银树庭后使用夜幕药剂挑战...

  • 星际战甲堕落轰击者结合目标_星际战甲-任务指南

    主要名词介绍星币星币是游戏中常用的一种货币。它们可以用来在商店中购买蓝图、配备和一些武器。在铸造厂中制造物品时,通常也需要花费一定数量的星币。在转化振幅晶体时,根据振幅晶体的稀有程度也会按比例收取一定数量的星币。白金白金是游戏内流通的一种货币,它的主要获得渠道为使用现实货币购买。这种货币可以用来购买战甲、武器、配备、守护以及其他一些物品。购买通常需要在游戏内的商店中进行。铸造厂中的加速制造功能也需...

  • MetaQ安装部署文档

    淘宝分布式消息中间件MetaQ安装部署。

  • 《淘宝消息中间件概述》2015-07-11

    1. 消息中间件简介 目前主要提供了无序事务性高性能消息队列Notify与有序高性能消息队列RocketMQ(MetaQ)两大类产品,目前RocketMQ已经开源(https://github.com/alibaba/RocketMQ),产品被包括核心交易在内的几乎...

  • metaq

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

  • metaq架构原理

    1、metaQ架构原理 2、Metaq原理与应用 ...3、消息中间件Notify和MetaQ-阿里中间件 ...4、中间件学习——metaq ...6、分布式消息中间件 MetaQ 作者庄晓丹专访 7、MetaQ技术内幕——源码分析系列

  • Warframe(星际战甲) 大黄脸结合目标位置

    枪兵 水星 捕获 ELION 或 地球 捕获 逆进恐鸟 欧罗巴 劫持 SORATH 沙漠开膛者 火星 捕获 ARA 远古堕落者 虚空 捕获 HEPIT 德特昂船员 火卫一 歼灭 ROCHE 狂奔者 水星 多方交战歼灭 M PRIME 禁卫军 谷神星 捕获 LEX 以上是所有大黄脸研究项目的目标地点,只统计捕获和歼灭中等级尽可能低的地图 日常任务地点 堕落轰击者 虚空 歼灭 OXOMOCO 开膛者 谷神星 捕获 LEX 病变虫母 阋神星 歼灭 SAXIS 重型机枪手(白富美) 水星 捕获 ELION 疾冲者

  • warframe怒焚者结合目标_【虚荣盒子】设计目标和功能规划

    虚荣盒子预期目标承载的内容其实蛮丰富的。当时我大手一挥,随手就写下了 6 个大版本的重点功能规划。版本规划目录v1.0 战绩查询v2.0 统计排行v3.0 分析聚合v4.0 学院媒体v5.0 社交互动v6.0 社区生态版本具体功能设计v1.0 战绩查询实现最基本的根据角色 id,查询最近对局战绩。查看角色概要信息。查看最近对局战绩。查看某局详细信息。说明:这是初始化的第一个版本,为了将战...

  • Warframe 大黄脸结合目标位置

    枪兵 水星 捕获 ELION 或 地球 捕获 逆进恐鸟 火星 多方交战歼灭 ULTOR 沙漠开膛者 火星 捕获 ARA 远古堕落者 虚空 捕获 HEPIT 德特昂船员 火卫一 歼灭 ROCHE 狂奔者 水星 多方交战歼灭 M PRIME 禁卫军 谷神星 捕获 LEX 以上是所有大黄脸研究项目的目标地点,只统计捕获和歼灭中等级尽可能低的地图 日常任务地点 堕落轰击者 虚空 歼灭 OXOMOCO 开膛...

  • warframe怒焚者结合目标_warframe结合仪式目标有什么用?

    展开全部结合e69da5e6ba9062616964757a686964616f31333366303133仪式目标会给予大量的声望,大概3000+左右,而普通的目标大概100左右。拍摄目标发亮的几个点,拍完后目标消失,兑换声望。这里可以使用圣殿提供的物品牵制住目标,具体的说明看一下圣殿的物品即可。注意事项:1、不能杀死目标,否则结合失败。2、必须拍摄所有点,才算完成。3、拍摄需要一段时间,大概2...

  • 国内外优秀开源项目创始人专访

    分布式消息中间件 MetaQ 作者庄晓丹专访 百度 UEditor 编辑器创始人战毅专访 JavaEE 快速开发框架 Wabacus 作者访谈 HTML5图表组件库ichartjs作者王鹤专访 超敏捷 Java 开发框架 ServiceFramework 作者祝海林专访 ...

  • Redis特性分析

    追溯到Metaq的核心开发人员庄晓丹分布式消息中间件 MetaQ 作者庄晓丹专访 ,为下文将rdis作铺垫 一、Metaq介绍 全称Metamorphosis,是一个高性能、高可用、可扩展的分布式消息中间件,起源于LinkedLn的K

  • 一些大公司的开源项目及代码托管平台

    程序员必须知道的几个Git代码托管平台 ... 阿里 ...有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统)、dubbo(RPC框架)、cobar(数据库中间件),或者是J...

  • 起点小说解锁.js

    起点小说解锁.js

  • 299-煤炭大数据智能分析解决方案.pptx

    299-煤炭大数据智能分析解决方案.pptx

  • 299-教育行业信息化与数据平台建设分享.pptx

    299-教育行业信息化与数据平台建设分享.pptx

Global site tag (gtag.js) - Google Analytics