当前位置: 首页 > article >正文

RocketMQ第5集

一  RocketMQ的工作流程

1.1 生产环节producer

Producer可以将消息写入到某Broker中的某Queue:其中Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求NameServer返回该Topic的路由表及Broker列表简单的说:路由表的key为Topic名称,value则为所有涉及该TopicBrokerName列表。

1.2  MQ的存储

RocketMQ中的消息存储在本地文件系统中,这些相关文件默认在当前用户主目录下的store目录中。

abort:该文件在Broker启动后会自动创建,正常关闭Broker该文件会自动消失。若在没有启动Broker的情况下,发现这个文件是存在的,则说明之前Broker的关闭是非正常关闭。

1.2.1 mq的commitlog

commitlog目录中存放着很多的mappedFile文件,当前Broker中的所有消息都是落盘到这些mappedFile文件中的。需要注意的是,一个Broker中仅包含一个commitlog目录,所有的mappedFile文件都是存放在该目录中的。

mappedFile文件是顺序读写的文件,所有其访问效率很高

1.2.2 mq的consumequeue

consumequeue文件是commitlog的索引文件,可以根据consumequeue定位到具体的消息,consumequeue文件名也由20位数字构成,表示当前文件的第一个索引条目的起始位移偏移量

1.2.3 mq的存储读写流程

1.3 rocketmq与kafka性能比较*

首先,RocketMQ对文件的读写操作是通过mmap零拷贝进行的,将对文件的操作转化为直接对内存地址进行操作,从而极大地提高了文件的读写效率。

其次,consumequeue中的数据是顺序存放的,还引入了PageCache的预读取机制,使得对consumequeue文件的读取几乎接近于内存读取,即使在有消息堆积情况下也不会影响性能。

RocketMQ中的commitlog目录与consumequeue的结合就类似于Kafka中的partition分区目录。 mappedFile文件就类似于Kafka中的segment段。

Kafka中消息存放的目录结构是:topic目录下有partition目录,partition目录下有segment文件

Kafka中无需索引文件。因为生产者是将消息直接写在了partition中的,消费者也是直接从partition中读取数据的。

1.4 rocketmq的消费方式

消费者从Broker中获取消息的方式有两种:pull拉取方式和push推动方式。消费者组对于消息消费的模式又分为两种:集群消费Clustering和广播消费Broadcasting

Pull拉取方式:

由于拉取时间间隔是由用户指定的主动权自己掌控所以在设置该间隔时需要注意平稳:间隔太短,空请求比例会增加;间隔太长,消息的实时性太差

Push方式:

该模式下Broker收到数据后会主动推送给Consumer。该获取方式一般实时性较高。而这些都是基于Consumer与Broker间的长连接的。长连接的维护是需要消耗系统资源的。

集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊同一个Topic的消息。即每条消息只会被发送到Consumer Group中的某个Consumer。

 


http://www.kler.cn/a/281983.html

相关文章:

  • html 图片转svg 并使用svg路径来裁剪html元素
  • 极速入门数模电路
  • 主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程
  • 机器学习(基础2)
  • pytest | 框架的简单使用
  • 工厂模式-工厂方法模式实现
  • Oracle使用手册
  • 【C#】静态成员(static)与实例成员(非静态成员)的理解
  • 为什么 PageHelper 不需要配置而 MP 需要?
  • 浅谈Kafka(二)
  • 一元四次方程求解-【附MATLAB代码】
  • blender修改材质时出现颜色丢失的问题
  • 基于单片机的一氧化碳报警系统的设计与实现
  • 算法笔记|Day37动态规划X
  • k8s探针详细学习笔记
  • day42 代码随想录 | 子序列问题 面试高频题
  • 【Material-UI】Slider 组件中的 Range Slider 详解
  • 【mysql】mysql之数据查询语言
  • 【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondScale.cs
  • 爬取数据时,如何避免违法问题
  • 文件包含之session.upload_progress的使用
  • IO进程day05(线程、同步、互斥、条件变量、进程间通信IPC)
  • pypcap、libpcap和pcap-ct的区别是什么
  • ShenNiusModularity项目源码学习(2:登录页面验证码)
  • 前端面试手撕题收集(自用)
  • 推荐2024年新手友好的4款音乐剪辑软件!