美文网首页
RocketMQ菜鸟小结

RocketMQ菜鸟小结

作者: Yorking | 来源:发表于2019-03-01 16:22 被阅读0次

日常工作中使用过RabbitMQ、RocketMQ、Kafka这几个常用的MQ,为了备忘,将RocketMQ相关资料上传这里。


关键概念:

Producer(生产者)


Consumer(消费者)

Producer Group(生产者组)

维护生产组

当某台producer宕机时,broker会向同组其他producer确认事务情况

Consumer Group(消费者组)

负责将consumer分组

根据此会制定消费方式

Broker

消费方式

广播消费(类似于 JMS pub/sub): 所有的consumergoup的所有consumer都会消费到同一条消息

集群消费(同consumergroup内类似于 JMS point-to-point):每个consumergroup都会有一个consumer消费到消息

NameSrv(域名服务)

管理多broker常用

维护broker路由

Topic(主题)

正常TOPIC:需要提前创建

重试队列 RETRY TOPIC:创建ConsumerGroup时自动创建

死信队列 DLQ(Dead Letter Queue) TOPIC:创建ConsumerGroup时自动创建

MessageQueue(消息队列)

可理解为一个不限长的Array,会定期移除过期(超时)的消息数据

topic下存储消息的offset单位(逻辑队列),也是发送的路径

设定topic的时候可以指定 写队列数与读队列数

通过offset概念来维护,offset是long型,理论百年不会溢出

了解kafka的可以按partition理解

Message(消息)

消息,使用MQ发送的消息内容,每次只会向一个Queue发送消息

MsgID,RocketMQ服务器生成

MsgKey,生产者生成

Tag,标签。在消息上的信息,用于隔离消息:隔离可以由消费者过滤,隔离也可以由RocketMQ服务过滤

顺序消息

可以通过业务hash ,将同hash的消息放入同队列,然后使用有序listener去消费


特性策略及方法


Message Priority(优先级)

RocketMQ不支持消息优先级

可以通过指定Broker/Queue的方式来做优先级隔离

Message Filter(过滤)

Broker过滤,通过配置subExpression

Consumer过滤,通过消费代码解析Tag过滤

Message Persistence(持久化)

持久化到MYSQL:Buffer扩展

KV存储系统,Buffer扩展

文件,Buffer扩展

内存镜像,镜像恢复

消息本身存储在内存buffer内

异步刷盘,JVM->PAGECACHE->刷盘

mmap+write(0拷贝),MappedByteBuffer(nio文件读写模型,直接映射到缓冲区pagecache),文件映射到内存上,减少了直接调用os的系统命令,进行从内核空间和用户空间的拷贝操作

Message Reliablity(消息可靠)

RocketMQ消息基本不丢。因此称其可靠。

不丢或少丢的情况:Broker正常关闭,Broker Crash,OS Crash,供电闪断等

非双写模式全丢的情况:无法开机,磁盘损坏等

Low Latency Messaging(低延迟)

RocketMQ使用长轮询pull,较低延迟的将消息获取到消费者服务

Repeat Message(消息重复)

At least Once(消息至少投递一次):Consumer只有消费成功才会ACK,但是不保证广播每个consumer都能收到消息

Exactly Only Once(消息仅一次):业务控制-不能重复生产;业务控制-不能重复消费;

                                                           RocketMQ不能严格保证不重复;当消息状态不可知时,会重复;网络问题;宕机问题等

Consume Again(消息回溯/重新消费)

RockerMQ可以按照时间回溯消费

Store(消息存储)

Consume Queue

~/store/consumequeue/${topic}/${queue}/${file},用于记录位置信息,定位commitlog内位置(offset记录)

Commit Log

消息内容的物理文件(mapped),通过Consume Queue的offset信息指定

config

    consumerOffset    

        consumerOffset.json

       offsetTable(标记所有消息消费offset的数据)

        key:topic@consumergroup

        通常集群会有效维护/广播会在本地再维护一个

    delayOffset

        存储延迟消息数据

        delayOffset.json

    subscriptionGroup

        存储所有消费组的配置信息

        subscriptionGroup.json

    topics

        存储所有的topic信息

        topics.json

    index

        索引结构维护

Send Message(消息发送)

同步、异步、单向


还有物理结构图,逻辑结构图,管理台说明。这些部分绘图需要一定时间,后续抽空补充。

相关文章

  • RocketMQ菜鸟小结

    日常工作中使用过RabbitMQ、RocketMQ、Kafka这几个常用的MQ,为了备忘,将RocketMQ相关资...

  • Redis菜鸟小结

    本文部分资料摘自我曾经读过的文章,具体是谁写的,我也记不清了。这里我只做一个备忘。 如果想要深入了解Redis,建...

  • 菜鸟职场小结(1)

    首先,自我介绍啦我大名Gy,作为一名成绩差的不行混了一个文凭的我来说,工作是我现在最大的难题。目前在上海中华英...

  • 推送菜鸟小结

    这两年有做过关注过一定的推送知识,特此记录备忘 一般,我们做推送,会按照如下流程完成一个基本的iOS推送: 在这个...

  • Redis菜鸟小结(二)

    基本的Redis key的操作都已经熟悉了之后,便可以开始针对Redis提供的各种可操作的数据结构进行学习和了解。...

  • RocketMQ-基础使用(一)

    零、本文纲要 一、RocketMQ基础 MQ特点 RocketMQ安装 测试RocketMQ 二、RocketMQ...

  • RocketMQ

    RocketMQ实战(一)RocketMQ实战(二)RocketMQ实战(三):分布式事务RocketMQ实战(四...

  • 详解RocketMQ的架构设计、关键特性、与应用场景

    内容大纲: RocketMQ的简介与演进 RocketMQ的架构设计 RocketMQ的关键特性 RocketMQ...

  • RocketMQ producer 启动流程

    系列 RocketMQ producer 启动流程 RocketMQ producer 路由同步 RocketMQ...

  • RocketMQ producer 路由同步

    系列 RocketMQ producer 启动流程 RocketMQ producer 路由同步 RocketMQ...

网友评论

      本文标题:RocketMQ菜鸟小结

      本文链接:https://www.haomeiwen.com/subject/qpnduqtx.html