RocketMQ
帅胖子
深情总是被辜负,总是套路得人心。
展开
-
【RocketMQ】简介
1 前言本文档旨在描述 RocketMQ 的多个关键特性的实现原理,并对消息中间件遇到的各种问题进行总结,阐述 RocketMQ 如何解决这些问题。文中主要引用了 JMS 规范与 CORBA Notification 规范,规范为我们设计系统指明了 方向,但是仍有不少问题规范没有提及,对于消息中间件又至关重要。RocketMQ 并不遵循任何规范,但是参考了 各种规范与同类产品的设计思想。原创 2016-12-06 16:00:24 · 1099 阅读 · 0 评论 -
【RocketMQ】4.消息中间件需要解决哪些问题?
本节阐述消息中间件通常需要解决哪些问题, 在解决这些问题当中会遇到什么困难, RocketMQ 是否可以解决,规范中如何定义这些问题。4.1 Publish/Subscribe发布订阅是消息中间件的最基本功能,也是相对于传统 RPC 通信而言。在此不再详述。4.2 Message Priority规范中描述的优先级是指在一个消息队列中,每条消息都有不同的优先级,一般用整数来原创 2016-12-14 10:19:29 · 956 阅读 · 0 评论 -
【RocketMQ】5.RocketMQ 概述
5.1 RocketMQ 是什么?是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。Producer、Consumer、队列都可以分布式。Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 consumer实例消费这个Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 to原创 2016-12-14 10:34:02 · 603 阅读 · 0 评论 -
【RocketMQ】6.RocketMQ 存储特点
6.1 零拷贝原理Consumer 消费消息过程,使用了零拷贝,零拷贝包含以下两种方式使用 mmap + write 方式优点:即使频繁调用,使用小块文件传输,效率也很高 缺点:不能很好的利用 DMA 方式,会比 sendfile 多消耗 CPU,内存安全性控制复杂,需要避免 JVM Crash问题。 2. 使用 sendfile 方式优点:可以利用 DMA 方式,消耗原创 2016-12-14 10:42:57 · 1324 阅读 · 0 评论 -
【RocketMQ】7.RocketMQ 关键特性之单机支持 1 万以上持久化队列
(1). 所有数据单独存储到一个 Commit Log,完全顺序写,随机读。(2). 对最终用户展现的队列实际只存储消息在 Commit Log 的位置信息,并且串行方式刷盘。这样做的好处如下:(1). 队列轻量化,单个队列数据量非常少。(2). 对磁盘的访问串行化,避免磁盘竟争,不会因为队列增加导致 IOWAIT 增高。每个方案都有缺点,它的缺点如下:(1). 写虽然完全原创 2016-12-14 10:52:32 · 1054 阅读 · 0 评论 -
【RocketMQ】7.RocketMQ 关键特性之刷盘策略
RocketMQ 的所有消息都是持久化的, 先写入系统 PAGECACHE, 然后刷盘, 可以保证内存与磁盘都有一份数据,访问时,直接从内存读取。7.2.1 异步刷盘在有 RAID 卡,SAS 15000 转磁盘测试顺序写文件,速度可以达到 300M 每秒左右,而线上的网卡一般都为千兆网卡,写磁盘速度明显快于数据网络入口速度,那么是否可以做到写完内存就向用户返回,由后台线程刷盘呢?原创 2016-12-14 10:59:44 · 3248 阅读 · 0 评论 -
【RocketMQ】7.RocketMQ 关键特性之消息查询
7.3.1 按照 Message Id 查询消息MsgId 总共 16 字节,包含消息存储主机地址,消息 Commit Log offset。从 MsgId 中解析出 Broker 的地址和Commit Log 的偏移地址,然后按照存储格式所在位置消息 buffer 解析成一个完整的消息。7.3.2 按照 Message Key 查询消息根据查询的key的hashcode原创 2016-12-14 11:13:44 · 1342 阅读 · 0 评论