消息中间件rocketmq学习总结.pdf_第1页
消息中间件rocketmq学习总结.pdf_第2页
消息中间件rocketmq学习总结.pdf_第3页
消息中间件rocketmq学习总结.pdf_第4页
消息中间件rocketmq学习总结.pdf_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

异步解耦 实现分布式系统之间的异步交互和数据交换功能 RocketMQ是淘宝消息中间件组开发和维护的 一款分布式 基于队列模型 的消息中间件产品 具备的功能特性主要有 是 一个队列模型的消息中间件 具有 高性能 高可靠 高实时 分布式 特点 Producer Consumer 队列都可以分布式 Producer 向 一些队列轮流发送消息 队列集合称为Topic Consumer如 果做 广播消费 则 一个 consumer实例消费这个Topic对应的所有队列 如 果做集群消费 则多个Consumer实例平均消费这个topic对应的队列集 合 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者 水平扩展能 力 实时的消息订阅机制 亿级消息堆积能 力 RocketMQ的部署结构 消息中间件RocketMQ学习总结 消息中间件的主要职责 RocketMQ简介 RocketMQ结构 RocketMQ的结构分为四个部分 Producer 消费者 Nameserver Brokerserver NameServer 是 一个 几乎 无状态节点 可集群部署 节点之间 无任何信息 同步 Broker部署相对复杂 Broker分为Master与Slave 一个Master可以对应 多个Slave 但是 一个Slave只能对应 一个Master Master与Slave的对应 关系通过指定相同的BrokerName 不同的 BrokerId来定义 BrokerId为0 表 示Master 非0表 示Slave Master也可以部署多个 每个Broker与 NameServer集群中的所有节点建 立 长连接 定时注册Topic信息到所有 NameServer Producer与NameServer集群中的其中 一个节点 随机选择 建 立 长连 接 定期从NameServer获取Topic路由信息 并向提供Topic服务的 Master建 立 长连接 且定时向Master发送 心跳 Producer完全 无状态 可集群部署 Consumer与NameServer集群中的其中 一个节点 随机选择 建 立 长连 接 定期从NameServer 取Topic路由信息 并向提供Topic服务的 Master Slave建 立 长连接 且定时向Master Slave发送 心跳 Consumer既可以从Master订阅消息 也可以从Slave订阅消息 订阅规 则由Broker配置决定 Consumer消费消息过程 使 用了零拷 贝 RocketMQ选择使 用了mmap write RocketMQ存储特点 的 方式 因为有 小块数据传输的需求 效果会 比sendfi le更好 RocketMQ选择Linux Ext4 文件系统 因为Ext4 文件系统删除1G 大 小的 文 件通常耗时 小于50ms 而 Ext3 文件系统耗时约1s左右 且删除 文件时 磁盘IO 压 力极 大 会导致IO写 入超时 RocketMQ的存储结构 所有数据单独存储到 一个Commit Log 完全顺序写 随机读 对最终 用户展现的队列实际只存储消息在CommitLog的位置信息 并且串 行 方式刷盘 随机访问 Commit Log 磁盘数据 系统 IO 调度算法设置为 NOOP 方式 会在 一定程度上将完全的随机读变成顺序跳跃 方式 而顺序跳跃 方式读较完全的 随机读性能会 高5倍以上 Commit Log中存储了所有的元信息 包含消息体 类似于Mysql Oracle的 redolog 所以只要有 Commit Log在 Consume Queue即使数据丢失 仍然可 以恢复出来 RocketMQ的消费队列 RocketMQ的所有消息都是持久化的 先写 入系统 PAGECACHE 然后刷盘 可以保证内存与磁盘都有 一份数据 访问时 直接从内存读取 RocketMQ采 用异步刷盘的 方式 同步刷盘与异步刷盘的唯 一区别是异步刷盘写完PAGECACHE直接返回 而 同步刷盘需要等待刷盘完成才返回 Message Id组成 MsgId总共16字节 包含消息存储主机地址 消息Commit Log offset 从 MsgId中解析出Broker的地址和Commit Log 的偏移地址 然 后按照存储格式所在位置消息buffer解析成 一个完整的消息 RocketMQ的刷盘策略 RocketMQ的消息结构 RocketMQ的消息过滤 方式有别于其他消息中间件 是在订阅时 再做过滤 先 来看下Consume Queue 的存储结构 在Broker端进 行Message Tag 比对 先遍历Consume Queue 如果存储 的Message Tag与订阅的Message Tag不符合 则跳过 继续 比对下 一 个 符合则传输给Consumer 注意 Message Tag是字符串形 式 Consume Queue中存储的是其对应的hashcode 比对时也是 比对 hashcode Consumer收到过滤后的消息后 同样也要执 行在Broker端的操作 但是 比对的是真实的Message Tag字符串 而不是Hashcode 采 用这种在Broker端 根据hashcode过滤 和Consumer端 根据 Message Tag内容过滤 同时进 行消息过滤的优点是 Message Tag存储Hashcode 是为了在Consume Queue定 长 方式 存储 节约空间 过滤过程中不会访问Commit Log数据 可以保证堆积情况下也能 高效过滤 即使存在Hash冲突 也可以在Consumer端进 行修正 保证万 无 一 失 发送消息负载均衡 比如5个队列可以部署在 一台机器上 也可以分别部署在5台不同的机器 上 发送消息通过轮询队列的 方式发送 每个队列接收平均的消息量 通 过增加机器 可以 水平扩展队列容量 另外也可以 自定义 方式选择发往 哪个队列 RocketMQ的消息过滤 RocketMQ发送和订阅消息的负载均衡 订阅消息负载均衡 如果有5个队列 2个consumer 那么第 一个Cons

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论