RocketMQ笔记

写在前面

本文参考OSChinarocketMQ官方文档整理而成,我也是初学rocketMQ,欢迎各位在评论区指正,
转载请注明来源

rocketMQ架构

转自OSChina

NameServer

可集群,一台NameServer挂掉之后,另一台顶上充当路由表作用,各个NameServer之间没有直接关联,broker集群发送心跳包同时向NameServer集群中的每一个节点发送(意味着各个节点的路由表是实时同步的)
1.主要功能:

  • 路由router,producer和consumer通过NameServer找到对应的Broker(根据topic来查找对应的broker),如果路由表发生更新,NamerServer会及时通知相应的producer和consumer。
  • 包含broker集群的信息,如果broker集群中的任意一台机子发生问题,将通过心跳包及时通知NameServer

producer

  1. 工作机制:
    producer定期从NameServer获取可用的Topic路由信息,并缓存至本地,包括可用的broker列表。当 producer需要发送消息时根据路由表选择一个broker,根据某种发送策略将消息发送至该broker中。如果NamerServer挂掉,producer就使用本地的路由表查找broker,如果在NameServer挂掉的情况下重启producer,那么就没有路由信息,也就无法发送消息了。
    生产者将产生的消息投递到对应的broker上,生产者是无状态的,不可以集群,但可以分组(一个组只允许一个producer实例存在)
  2. 发送方式:
  • 同步发:一直等到broker的响应(返回一个sendResult包含发送状态)
  • 异步发:调用callback函数处理broker的响应(返回一个sendResult包含发送状态)
  • 单向:只发不接受响应,适用于对消息可靠性要求不高的场景(如发送日志)
  1. 发送状态:
  • FLUSH_DISK_TIMEOUT:broker配置了FlushDiskType策略,并且在默认时间内没有完成刷新磁盘返回该状态
  • FLUSH_SLAVE_TIMEOUT:broker配置了SYNC_MASTER,但从服务器没有在规定刷盘时间内与主服务器完成同步
  • SLAVE_NOT_AVAILABLE:broker配置了SYNC_MASTER,但是没有配置从服务器
  • SEND_OK:表示成功,但是并不意味着他可靠,如果想要得到可靠信息,需给broker配置SYNC_MASTER
  1. 关于消息重复发送(Duplication)和消息丢失
    如果获得的sendResult是 FLUSH_DISK_TIMEOUT或者FLUSH_SLAVE_TIMEOUT,那么就意味着broker在那一时刻可能停止运行了,此时有两种做法:1. 什么也不做 2. 消息重发
  2. 超时
    producer发送完消息直到broker返回响应中间等待的时间如果超出等待时间(默认为3秒,支持自定义),会抛出Remoting TimeoutException。并不建议将等待时间调的过短,因为broker需要将消息写入磁盘或者与从从服务器进行同步,

consumer

通过NameServer拿到路由表并缓存至本地
消费者,并发的从消息队列中取消息,随之而来的问题就是消息的顺序问题(比如必须要创建订单之后,才能确认订单,最后支付订单),rocketMQ完美支持消息顺序问题。
消费者也可以成组,但是一组必须订阅相同的topic。

  1. 获取消息的方式:
  • pull consumer: 主动从broker中的消息队列中拉取消息
  • push consumer: 当消息到达时,调用callback函数进行处理
  1. MessageListener
  • Orderly:保证消息被顺序消费
  • Concurrently:不保证消息被顺序消费,并发消费队列中的消息
  1. Consume Status
  • RECONSUME_LATER:Consumer可能正在消费其他队列,稍后再消费当前队列
  • SUSPEND_CURRENT_QUEUE_A_MONENT:保证消费队列中被消费的顺序,告诉Consumer等待当前消息被消费完毕之后再消费其他消息
  1. ConsumeFromWhere
    当一个新的Consumer被加入后,它需要根据如下策略选择性的消费
  • CONSUME_FROM_OFFSET_LAST:只消费producer新产生的消息,Consumer加入之前所产生的消息都不再进行消费
  • CONSUME_FROM_OFFSET_FIRST:将队列中的所有消息从头开始消费一遍
  • CONSUME_FROM_TIMESTAMP:消费在指定时间戳之后产生的消息
  1. 重复消费的问题
    出现场景:
  • 消息重复发送
  • Consumer挂掉但是broker那边并没有更新consumer消费的offset

broker

broker负责存储队列信息,维护消费进度,定时向NameServer上报topic路由信息。

  1. 配置策略:
    ASYNC_MASTER with SLAVE:可以容忍消息丢失,但要保证broker的高可用
    SYNC_MASTER with SLAVE:强制主从服务器同步刷新,这样做会丢失相当一部分性能,但是换来的是消息的绝对可靠性(不会丢失消息)
    ASYNC_MASTER:适合简单上手
  2. 容错机制:
    如果一台broker挂掉,那么producer不会立即感知,而是NameServer发现该broker心跳超时的时候,会将该broker从broker集群中清除并且告知相应的producer该broker已经挂掉,那么producer会重新选择一个broker;如果在broker挂掉这一段时间内producer已经发送消息给broker,由于producer内部有重试机制(如果发送到某个broker失败,那么会重新选择新的broker发送),最终消息还是会发送到一个新的broker上,不会造成消息的丢失。
  3. 磁盘刷新类型:
  • ASYNC_FLUSH:推荐使用该种方式进行刷新,如果需要保证消息可靠性,可配置SLAVE
  • SYNC_FLUSH:每一条producer产生的消息到来之后,先将消息存储到硬盘之后再给producer返回响应,会造成相当一部分性能损失

Topic

producer产生的每个消息都必须指明该消息的Topic,consumer消费消息时就是通过查路由表找到对应的broker来获取消息的。
一个Topic可以被多个consumer group所消费

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容