与业界众多出名的消息队列(Kafka、RocketMQ、Pulsar等)一样,QMQ也走上了基于文件存储的分布式消息系统自研之路(详细设计请关注QMQ开源:https://github.com/qunarcorp.../qmq)。...后文的介绍, QMQ均指基于文件存储的版本。 在携程落地的过程中,我们主要和两类问题打交道:网络和磁盘IO。...在有一次QMQ单边机房演练中(关闭单边机房的QMQ服务)就触发了上述场景。 ?...QMQ的作者刀刀给出了一种解决方案:如何用不到两千块大幅度提升QMQ性能,即尝试对消息文件进行排序,能缓解堆积消息拉取对系统带来的冲击。本文不做过多介绍,感兴趣的同学可以跳转至刀刀的文章阅读。
简介 去哪儿网近日宣布开源其内部广泛使用的消息中间件 QMQ 。QMQ 自 2012 年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。.../releases 下载安装包,目前最新版qmq-dist-1.0.0-bin.tar.gz 解压后目录 ?...:68) at qunar.tc.qmq.startup.ServerWrapper.register(ServerWrapper.java:103) at qunar.tc.qmq.startup.ServerWrapper.start...:68) at qunar.tc.qmq.startup.ServerWrapper.register(ServerWrapper.java:103) at qunar.tc.qmq.startup.ServerWrapper.start...qunar.tc.qmq.netty.NettyServerHandler.channelRead0(NettyServerHandler.java:50) at qunar.tc.qmq.netty.NettyServerHandler.channelRead0
去哪儿网近日宣布开源其内部广泛使用的消息中间件 QMQ 。QMQ 自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。...QMQ 主要提供以下特性: 异步实时消息 延迟/定时消息 基于 Tag 的服务端过滤 Consumer 端幂等处理支持 Consumer 端 filter 死信消息...使用的简单 API 提供丰富的监控指标 接入 OpenTracing 分布式事务(即将开源) 消息投递轨迹(即将开源) 历史消息的自动备份(即将开源) 架构概览 下图是 QMQ
8 qmq https://github.com/qunarcorp/qmq Star 1171 QMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景
background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL...url里面的内容复制到浏览器地址栏 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL
在业界中有事务消息功能比较有代表性的就是阿里开源的RocketMQ和去哪儿开源的QMQ,他们两个消息队列都实现了事务消息功能,但是实现的方式却各有不同,接下来也会分别剖析这两个消息队列是如何实现事务消息...那么怎么去接下来讲一下QMQ的事务消息的解决方案,看看这种方案能否解决我们所说的这种问题呢? 3....QMQ事务消息 QMQ的事务消息没有RocketMQ那么的复杂,对于消息中间件的本身改造是很小的,其依赖了数据库自身的本地事务,比如一个创建订单,需要发送两种消息,分别是A和B,那么有如下的伪代码:...改造成本,只需要改造一次Client,在QMQ中重写了spring的TransactionSynchronization,可以直接把代码简化成如下面所示: begin transaction; createOrder...事务消息带来的问题基本可以解决,但是其同样也有缺点,因为其引入了额外的数据库写,如果事务消息较多,那么就会多出很多写数据库的操作,对于响应时间比较敏感的服务需要仔细考虑 4.总结 介绍了两种事务消息,对于我个人而言,QMQ
QMQ QMQ提供任意时间的延时/定时消息,你可以指定消息在未来两年内(可配置)任意时间内投递。 把 QMQ 放到最后,是因为我觉得 QMQ 是目前开源 MQ 中延时消息设计最合理的。...QMQ的延时/定时消息使用的是两层 hash wheel 来实现的。...第一层位于磁盘上,每个小时为一个刻度(默认为一个小时一个刻度,可以根据实际情况在配置里进行调整),每个刻度会生成一个日志文件(schedule log),因为QMQ支持两年内的延时消息(默认支持两年内,
—6— QMQ QMQ提供任意时间的延时/定时消息,你可以指定消息在未来两年内(可配置)任意时间内投递。 把 QMQ 放到最后,是因为我觉得 QMQ 是目前开源 MQ 中延时消息设计最合理的。...如果对时间轮不熟悉的可以阅读笔者的这篇文章 从 Kafka 看时间轮算法设计 QMQ的延时/定时消息使用的是两层 hash wheel 来实现的。...第一层位于磁盘上,每个小时为一个刻度(默认为一个小时一个刻度,可以根据实际情况在配置里进行调整),每个刻度会生成一个日志文件(schedule log),因为QMQ支持两年内的延时消息(默认支持两年内,
9 qmq https://github.com/qunarcorp/qmq Star 1171 QMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景
基于以上这些问题,新系统希望在数据处理过程中能提升数据处理的时效性同时满足业务灵活性的要求,对于数据处理逻辑,数据更新逻辑,可以通过系统动态配置规则的方式来消费消息数据(Kafka或者QMQ)动态更新标签...为了解决以上问题,我们设计开发了一套“实时动态标签处理系统”,业务方只需要按照基本算子规则配置提交任务,系统就会自动解释执行规则,按照配置要求执行数据处理操作,目前支持的基本算子有Stream(流式数据接入目前支持QMQ...为了解决实时流式数据处理,我们引入了类似于Kappa架构的数据处理方式,做了一些调整,采用主动Push方式,因为这个场景的数据主要是应用于Push/EDM等主动触达的场景,结果数据不需要落地,我们直接通过QMQ...关于规则引擎所涉及的一些基本概念描述如下: Stream 消息源接入,主要是Kafka和QMQ,结构化Json数据,所有的接入消息源的数据结构、数据类型、来源都需要录入管理,借用公司的Kafka和QMQ...Sink 计算结果输出,支持配置化方式,目前支持消息队列模式(QMQ),数据库(TiDB、MySQL等等)。
基于以上这些问题,新系统希望在数据处理过程中能提升数据处理的时效性同时满足业务灵活性的要求,对于数据处理逻辑,数据更新逻辑,可以通过系统动态配置规则的方式来消费消息数据(Kafka 或者 QMQ)动态更新标签...,我们设计开发了一套“实时动态标签处理系统”,业务方只需要按照基本算子规则配置提交任务,系统就会自动解释执行规则,按照配置要求执行数据处理操作,目前支持的基本算子有Stream(流式数据接入目前支持 QMQ...关于规则引擎所涉及的一些基本概念描述如下: Stream 消息源接入,主要是 Kafka 和 QMQ,结构化 Json 数据,所有的接入消息源的数据结构、数据类型、来源都需要录入管理,借用公司的 Kafka...和 QMQ 消息注册管理机制,实现全流程打通。...Sink 计算结果输出,支持配置化方式,目前支持消息队列模式(QMQ),数据库(TiDB、MySQL 等等)。
QMQ QMQ提供任意时间的延时/定时消息,你可以指定消息在未来两年内(可配置)任意时间内投递。 把 QMQ 放到最后,是因为我觉得 QMQ 是目前开源 MQ 中延时消息设计最合理的。...“如果对时间轮不熟悉的可以阅读笔者的这篇文章 从 Kafka 看时间轮算法设计 QMQ的延时/定时消息使用的是两层 hash wheel 来实现的。...第一层位于磁盘上,每个小时为一个刻度(默认为一个小时一个刻度,可以根据实际情况在配置里进行调整),每个刻度会生成一个日志文件(schedule log),因为QMQ支持两年内的延时消息(默认支持两年内,
组件可监控化:Redis/Memcache、Mybatis 、Lock 、QMQ 、 EventBus 、DataSource 、JobScheduler 监控面板自动化生成:Python自动化生成脚本...a)读写负载均衡 b)多动态源 c)多库动态源读负载均衡 2.4 异步化使用 servlet3异步:释放出http线程提高系统整体吞吐量,可隔离开不同业务的工作线程 qmq:使用最广泛也更灵活的异步 dubbo...:对于服务提供者响应比较慢的情况 servlet异步和qmq结合的场景如下图所示。...交易系统则根据扣款规则以qmq的方式驱动扣款,直至走完所有流程为止(成功,失败,部分支付)。每次扣款结束将结果放入cache中供http服务查询。
对于MQ我们使用携程开源消息中间件QMQ 和 Kafka,在公司内部QMQ和Kafka也做了异地机房的互通。...单一触发源有可能出现问题,比如消息类的触发依赖业务系统、中间件canel、中间件QMQ和Kafka,扫表任务依赖分布式调度平台、MySQL等。...(2)QMQ和Kafka互备 缓存更新流程通过MQ来驱动,虽然公司的MQ中间件服务由专人维护,但是万一出现问题长时间不能恢复,对我们来说将是致命的。...所以我们决定同时采用Kafka和QMQ两种中间件来作为互备方案。默认情况下对于全表扫描任务和binlog消费这类大批量消息场景使用Kafka来驱动,而其他场景通过QMQ来驱动。...所有的场景都可以通过开关来控制走Kafka或者QMQ。目前该功能可通过配置管理平台来实现快速切换。
解决方案 CDP 希望在数据处理的过程中能提升数据处理时效性,同时满足业务灵活性的要求,对于数据处理逻辑、数据更新逻辑,可以通过系统动态配置规则的方式来消费消息数据(Kafka 或 QMQ)动态更新标签...增量数据业务应用以消息形式发送到 Kafka 或 QMQ 消息队列,将数据按照标签持久化的逻辑规则处理完成,增量写入到持久化存储引擎 TiDB,以此解决数据的时效性问题。
全局组件初始化 对于组件的全局的初始化,可以使用前面所说的ImportBeanDefinitionRegistrar这个方法来指定初始化方法,以开源的队列QMQ的源码为例: @EnableQmq实现方式
一、背景 QMQ延迟消息是以服务形式独立存在的一套不局限于消息厂商实现的解决方案,其架构如下图所示。 QMQ延迟消息服务架构 延迟消息从生产者投递至延迟服务后,堆积在服务器本地磁盘中。...参考文档 QMQ开源地址: https://github.com/qunarcorp/qmq Pulsar官网: https://pulsar.apache.org/ BookKeeper官网: https
QMQ: 去哪儿 MQ,读盘使用 MMAP,写盘使用 FileChannel。...再回过头看看 MQ 的实现者们,似乎只有 QMQ 是 这么做的。当然,RocketMQ 也提供了 FileChannel 的写选项。
印象深刻的bug:近期的一个项目,x发单n是发qmq消息,调用发单服务自动发单,测试过程中,我给开发提议加个手动发单–作为发单失败或者未发单的补偿,开发力争 生产不会出现发单失败的情况,但后来还是被我说服...上线第二天,公司qmq框架出现问题,产生消息消费的延迟,导致一段时间内的订单不能自动发单,这时候大家手动发单,解决部分订单,事情过后,开发更加肯定了 我当时的提的bug修复是正确的 在你以往的经历中,解决过的最困难的问题是什么
领取专属 10元无门槛券
手把手带您无忧上云