前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ学习与分析

RocketMQ学习与分析

作者头像
devi
发布2021-11-02 16:47:05
3290
发布2021-11-02 16:47:05
举报
文章被收录于专栏:搬砖记录搬砖记录

RocketMQ学习与分析

1. 架构图

在这里插入图片描述
在这里插入图片描述

NameServer

  • 类似注册中心,存储了协调治理Broker所需的所有信息(如<borker:Topic路由信息>,HashMap存储)
  • NameServer集群各节点之间没有信息同步(producer和consumer轮询所有NameServer节点直到拿到所需信息)
  • 通过定期心跳来管理Broker信息,并对外提供接口给producer/consumer访问broker信息。

Broker

  • 消息中枢,持久化消息数据,保存订阅关系、消费进度等。
  • Broker的核心在于消息存储:其通过内存映射、顺序写、索引查询保证效率

Topic: topic就是一个消息主题,是一个逻辑概念,实际包含多个属于同一个topic下的消息。在rocketmq中,一个topic会分片到多个broker上,且在每个broker上继续分片成多个Queue,如下图。

在这里插入图片描述
在这里插入图片描述

分片到多个broker上是为了突破单点的资源限制(CPU、带宽、内存等),从而实现水平扩展。 分片到多个Queue上是为了负载均衡,rockermq限制了对于N个Queue,只允许<N的Consumer来访问,且这些Consumer会均衡到各个Queue上。

此外,topic对应的消息数据并非真的消息数据,而是指向物理数据的消息索引。

Producer: 生产者,主要用于推送数据,并且有一些默认的定时任务(比如定期获取broker)

Consumer: 消费者,拉模式,定期(!while(this.isStopped(){拉消息})从broker上拉取可消费信息。拉取时机由Rebalance均衡器进行平衡控制。

2. 设计

2.1 设计理念

  • 消息中间件的理想状态是,一条消息能且仅能被消费一次,但要做到这一点,必须牺牲性能。RocketMQ的设计思路是,不去解决这一问题,保证消息至少被消费一次(可能被消费者多次消费),消息消费的幂等由消费者自己实现,这样简化了设计内核,提高了整体性能。
  • NameServer极其简单,集群各节点之间互补通信,Topic路由信息无需在集群中保持强一致,只要求最终一致性,且容忍分钟级别的不一致。
  • 高效的IO存储,RocketMQ追求消息发送的高吞吐量, RocketMQ将消息存储文件设计成文件组的概念,组内单个文件大小固定,方便引人内存映射机制,所有topic的消息存储基于顺序写,极大地提供了消息写性能,同时为了兼顾消息消费与消息查找,引入了消息消费队列文件与索引文件。

2.2 设计目标

  • 顺序消息:保证消息消费者按照消息到达存储服务器的顺序消费
  • 消息过滤:消费者只消费自己感兴趣的消息(broker过滤 or 消费者过滤)
  • 消息存储:考量维度(消息堆积能力以及消息存储性能)
  • 高可用:同步刷盘确保消息不丢失,异步复制(同步双写)避免单点故障
  • At-least-once:通过ACK机制确保消息至少被消费一次
  • 消息到达低延迟:通过长轮询的机制实现准实时的消息推送
  • 消息回溯:消费者想要重新消费已经被消费过的消息
  • 消息堆积:削峰的必备能力
  • 定时消息:只有到达某个时间点,才能被消费者看到
  • 消息重试:消费消息时投递失败,重新投递

参考 消息存储详解 概念模型 rocketmq重点记录 《RocketMQ技术内幕》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RocketMQ学习与分析
  • 1. 架构图
  • 2. 设计
    • 2.1 设计理念
      • 2.2 设计目标
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档