RocketMQ菜鸟小结

2019-03-01  本文已影响0人  Yorking

日常工作中使用过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(消息发送)

同步、异步、单向


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

上一篇 下一篇

猜你喜欢

热点阅读