0%

延迟或者定时消息在使用场景上有两种:消息消费失败重试;业务直接发送定时消息。
这两种场景broker上的实现可能不同,如果开启了时间轮的配置(timerWheelEnable,默认开启),业务上的延迟消息发送时只要设置了DeliveryTimestamp字段,消息的定时服务就会使用时间轮;消费失败的重试则依然使用老的实现方式,不同的延迟等级对应不同的内部延迟队列。
下面我们分着两种场景来看下具体的实现逻辑。

阅读全文 »

“谁让你读了那么些书,又知道了双水村以外还有一个大世界… …如果你从小就在这个天地里日出而作,日落而息,那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个满意的媳妇,生个胖儿子,加上你的体魄,会成为一名相当出色的庄稼人。不幸的是,你知道得太多了,思考得太多了,因此才有了这种不能为周围人所理解的苦恼… …” --《平凡的世界》路遥

年终的生活和工作压力很大,这种时候会再温故《平凡的世界》中的人生百态,巨变的年代,不变的底层生活,人物向上的生活态度和面对苦难的韧性,给当下的自己一些精神支持,这本伟大的巨著将伴随我的余生。

阅读全文 »

前言

最近在了解HBase,作为一个HBase小白,迫切的想对HBase有一个较为直观的认识,但大部分文章切入的角度喜欢和RDMS做比较,看下来千篇一律,没有清晰形象的解释清楚HBase的基本数据模型。HBase官方手册中推荐了两篇博客,个人认为写的醍醐灌顶,比较适合我这种愚钝的人,决定用蹩脚英文稍加翻译记录,方便下次快速回忆。


开篇

学习Hbase(谷歌BigTable的开源实现)最困难的部分是HBase它实际是个什么。

非常不幸的是,Hbase和BigTable这两个伟大的系统在名称中都包含table和base这两个词,这往往导致和RDBMS(例如我自己)产生混淆。

这篇文章旨在从概念角度描述这些分布式数据存储系统。相信在你读完后会对何时使用HBase和传统数据库有更明智的决定。

阅读全文 »

前言

之前有转载过一篇关于分布式事务最终一致的MQ实现的文章,当时也是碰到了分布式事务的情形,最后按照文章的思路利用rmq实现了数据的最终一致。不太清楚分布式事务的,可以先看下这边文章了解下。

PS:本篇默认你已经了解rmq的一些基础并看过部分源代码,建议在看该篇时,先看下官方的文档RocketMQ事务消息

牵涉到的分布式的话题一般都会提到CAP,从知乎上打捞来一份比较好解释。

阅读全文 »

背景

项目中存在以下场景需要延迟触发一些事件:

  1. 订单在未支付状态下30分钟后自动关闭;
  2. 订单超过15天未主动确认收货需要自动确认收货;
  3. 商品价格需要在不同的时间段生效不同的价格方案等。

以上场景下需要有一个相对平台化的服务来满足,而不必每个项目自己做定时任务去进行轮询。

阅读全文 »

对比看两种消费方式的实现:顺序消费与并发消费。这里对顺序消费只关注消费端,不关心producer与broker怎么处理顺序消息,假设架构及策略已保证消息的全局或者局部顺序性。通过构建假定前提,我们可以忽略本次讨论的非重点内容。以下仍以Push方式为例。

消费方式

宏观上看rmq自身是一个生产-消费模式,在他各个角色的具体实现中也不乏生产-消费模式的使用。DefaultMQPushConsumerImpl中消息的拉取及拉取成功后的消费均采用生产-消费的方式进行组织(PullRequestConsumeRequest),消费的流程在之前rocketmq-消息重复分析一文中记录的很清楚,不再展开。

阅读全文 »

场景描述

有两个namesrv(namesrv1与namesrv2),某个topic分别在两个master上均分队列1,2,3。

当broker-ba的主从与namesrv1网络出现问题,namesrv2正常,此时namesrv出现不一致,当两个从属相同consumerGroup的消费者分别从两个namesrv获取broker信息时,按照均分的策略就会出现c1订阅队列1和2,c2订阅队列2。此时,消息便会重复被消费,而且出现了一个队列被多个消费者订阅现象。

出现这种情况是不是正常的呢?出现这种情况是否可以自动恢复呢?尝试从以下几个角度来分析,部署结构见下图(图中未给出namesrv)。

阅读全文 »

一直在用rocketmq,对他的功能和大概流程略知一些,但是比较浮,经不起稍微的推敲。是时候进一步了解下这个NB的中间件了。

这里不再赘述它的那些特性,网上一大堆,这里主要按照自己想了解的一些方面作整理,贴出部分核心代码,意图通过表现各个角色间的交互,勾画大致架构,方便以后对每个要点各个深入。如果想要引导来阅读源代码,推荐rmq源码系列,写的很有诚意,本笔记中也部分参考引用其文章。

部署结构(逻辑结构/物理结构)

消息中间件的整体看起来像我们相互邮寄明信片。李雷(Producer)通过邮局公告(Namesrv)找到邮局的地址,然后去邮局(Broker)把明信片(Message)发送给韩梅梅(Consumer)。

阅读全文 »

看开源项目时,时不常遇到一个叫做benchmark的目录,此时脑子停滞,一眼带过,最近一次看到就顺手问了下谷大哥,发现benchmark还是个挺有意思的东西。

基准测试是什么

基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。
例如,对计算机CPU进行浮点运算、数据访问的带宽和延迟等指标的基准测试,可以使用户清楚地了解每一款CPU的运算性能及作业吞吐能力是否满足应用程序的要求;再如对数据库管理系统的ACID(Atomicity, Consistency, Isolation, Durability, 原子性、一致性、独立性和持久性)、查询时间和联机事务处理能力等方面的性能指标进行基准测试,也有助于使用者挑选最符合自己需求的数据库系统。

阅读全文 »

失眠这件事已经扰了我很久,看样子还要随我走很长时间。翻到以前失眠时随手拼凑的梦话,觉得有意思,原来失眠逼得我作文不写谎话,想起那些年为完成作文编的故事,唉!实在是对不起小明、小红等等这些素未谋面的伙伴,原谅我吧。

阅读全文 »