【转】RocketMQ的一些特性(生产者消费者配置参数的含义)

一 nameserver

相对来说,nameserver的稳定性非常高。原因有二:

1 nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即使全部挂掉,也不影响业务系统使用,这点类似于dubbo的zookeeper。

2 nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。

二 broker

1 与nameserver关系

  • 连接

     单个broker和所有nameserver保持长连接

  • 心跳

     心跳间隔:每隔30秒(此时间无法更改)向所有nameserver发送心跳,心跳包含了自身的topic配置信息。

     心跳超时:nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的broker连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则断开连接。

  • 断开
     时机:broker挂掉;心跳超时导致nameserver主动关闭连接

     动作:一旦连接断开,nameserver会立即感知,更新topic与队列的对应关系,但不会通知生产者和消费者

 

2 负载均衡

  • 一个topic分布在多个broker上,一个broker可以配置多个topic,它们是多对多的关系。
  • 如果某个topic消息量很大,应该给它多配置几个队列,并且尽量多分布在不同broker上,减轻某个broker的压力。
  • topic消息量都比较均匀的情况下,如果某个broker上的队列越多,则该broker压力越大。

 

3 可用性

   由于消息分布在各个broker上,一旦某个broker宕机,则该broker上的消息读写都会受到影响。所以rocketmq提供了master/slave的结构,salve定时从master同步数据,如果master宕机,则slave提供消费服务,但是不能写入消息,此过程对应用透明,由rocketmq内部解决。

这里有两个关键点:

  • 一旦某个broker master宕机,生产者和消费者多久才能发现?受限于rocketmq的网络连接机制,默认情况下,最多需要30秒,但这个时间可由应用设定参数来缩短时间。这个时间段内,发往该broker的消息都是失败的,而且该broker的消息无法消费,因为此时消费者不知道该broker已经挂掉。
  • 消费者得到master宕机通知后,转向slave消费,但是slave不能保证master的消息100%都同步过来了,因此会有少量的消息丢失。但是消息最终不会丢的,一旦master恢复,未同步过去的消息会被消费掉。

 

4 可靠性

  • 所有发往broker的消息,有同步刷盘和异步刷盘机制,总的来说,可靠性非常高
  • 同步刷盘时,消息写入物理文件才会返回成功,因此非常可靠
  • 异步刷盘时,只有机器宕机,才会产生消息丢失,broker挂掉可能会发生,但是机器宕机崩溃是很少发生的,除非突然断电

5 消息清理

  • 扫描间隔

     默认10秒,由broker配置参数cleanResourceInterval决定

  • 空间阈值

     物理文件不能无限制的一直存储在磁盘,当磁盘空间达到阈值时,不再接受消息,broker打印出日志,消息发送失败,阈值为固定值85%

  • 清理时机

     默认每天凌晨4点,由broker配置参数deleteWhen决定;或者磁盘空间达到阈值

  • 文件保留时长

     默认72小时,由broker配置参数fileReservedTime决定

 

 

6 读写性能

  • 文件内存映射方式操作文件,避免read/write系统调用和实时文件读写,性能非常高
  • 永远一个文件在写,其他文件在读
  • 顺序写,随机读
  • 利用linux的sendfile机制,将消息内容直接输出到socket管道,避免系统调用

7 系统特性

  • 大内存,内存越大性能越高,否则系统swap会成为性能瓶颈
  • IO密集
  • cpu load高,使用率低,因为cpu占用后,大部分时间在IO WAIT
  • 磁盘可靠性要求高,为了兼顾安全和性能,采用RAID10阵列
  • 磁盘读取速度要求快,要求高转速大容量磁盘

 

三 消费者

1 与nameserver关系

  • 连接

     单个消费者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,消费者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。

  • 心跳

与nameserver没有心跳

  • 轮询时间

默认情况下,消费者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,客户端最多要30秒才能感知。该时间由DefaultMQPushConsumer的pollNameServerInteval参数决定,可手动配置。

 

2 与broker关系

  • 连接

单个消费者和该消费者关联的所有broker保持长连接。

  • 心跳

默认情况下,消费者每隔30秒向所有broker发送心跳,该时间由DefaultMQPushConsumer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费

  • 断开

时机:消费者挂掉;心跳超时导致broker主动关闭连接

动作:一旦连接断开,broker会立即感知到,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费

 

3 负载均衡

集群消费模式下,一个消费者集群多台机器共同消费一个topic的多个队列,一个队列只会被一个消费者消费。如果某个消费者挂掉,分组内其它消费者会接替挂掉的消费者继续消费。

4 消费机制

  • 本地队列

        消费者不间断的从broker拉取消息,消息拉取到本地队列,然后本地消费线程消费本地消息队列,只是一个异步过程,拉取线程不会等待本地消费线程,这种模式实时性非常高。对消费者对本地队列有一个保护,因此本地消息队列不能无限大,否则可能会占用大量内存,本地队列大小由DefaultMQPushConsumer的pullThresholdForQueue属性控制,默认1000,可手动设置。

  • 轮询间隔
     消息拉取线程每隔多久拉取一次?间隔时间由DefaultMQPushConsumer的pullInterval属性控制,默认为0,可手动设置。
  • 消息消费数量

     监听器每次接受本地队列的消息是多少条?这个参数由DefaultMQPushConsumer的consumeMessageBatchMaxSize属性控制,默认为1,可手动设置。

 

5 消费进度存储

     每隔一段时间将各个队列的消费进度存储到对应的broker上,该时间由DefaultMQPushConsumer的persistConsumerOffsetInterval属性控制,默认为5秒,可手动设置。

 

6 如果一个topic在某broker上有3个队列,一个消费者消费这3个队列,那么该消费者和这个broker有几个连接?

     一个连接,消费单位与队列相关,消费连接只跟broker相关,事实上,消费者将所有队列的消息拉取任务放到本地的队列,挨个拉取,拉取完毕后,又将拉取任务放到队尾,然后执行下一个拉取任务

 

 

四 生产者

1 与nameserver关系

  • 连接

     单个生产者者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,生产者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。

  • 轮询时间

默认情况下,生产者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,生产者最多要30秒才能感知,在此期间,发往该broker的消息发送失败。该时间由DefaultMQProducer的pollNameServerInteval参数决定,可手动配置。

  • 心跳

与nameserver没有心跳

 

2 与broker关系

  • 连接

单个生产者和该生产者关联的所有broker保持长连接。

  • 心跳

默认情况下,生产者每隔30秒向所有broker发送心跳,该时间由DefaultMQProducer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接。

  • 连接断开

移除broker上的生产者信息

 

3 负载均衡

     生产者时间没有关系,每个生产者向队列轮流发送消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rational Rose使用笔记】用例图

一 先找例题: 掌握运用Rose工具绘制用例图的基本操作 再学习: UML建模——用例图(Use Case Diagram) 二 下面是笔记: 了解几种关系:依赖、关联、泛化、包含、扩展。 如何区别依赖、关联? 依…

【转】使用IIS做HTTP和WebSocket服务的反向代理

反向代理对于服务器来说是非常实用的功能,可以将毫不相关的网站部署到同一个域名下,对于使用docker的人来说可以免去大量配置上的麻烦。它还能将HTTP流量转换成HTTPS,多个服务只需要一个证书就能解决。 对于nginx和Apache,网上已…

【OSG】基础知识点合集

三大遍历:更新遍历、拣选遍历、绘制遍历

sqlserver获取当前时间_c#获取并显示当前日期时间

主要使用ToLongDateString、ToShortDateString、ToLongTimeString、ToShortTimeString、DayOfWeek等获取日期、时间、星期等数据。MM 两位数月份mm 两位数分钟HH 两位小时,24小时制hh 两位小时,12小时制string br ""; string a1 D…

【考研计算机】AOE关键路径

介绍 数据结构AOE网 计算题专题:关键路径法(CPM) 需要注意的点: 最重要的点,以下图为例: 一个活动有多个入口,这是表示此活动必须在前置的多个入口都完成时,才能开始。 即,开始条件 入口1 &…

【转】.NET程序内存分析工具CLRProfiler的使用

大家都知道.net有一套自己的内存(垃圾)回收机制,除非有一些数据(方法)长期占有内存不随着垃圾回收功能而释放内存,这样就造成了我们经常说的内存泄露、内存持续增长得不到释放等问题导致APS.net网站或者C/S…

【数据库】关系数据库理论学习

学习资源 关系型数据库的基本理论 关系数据库规范化理论PPT 笔记 三个范式总结: 第一范式:保持列最简,也就是分解列。第二范式:消除非主属性对候选码的部分函数依赖。也就是n:1,有冗余,必须分解成多个表…

sql over函数_SQL 高级函数

今天是高端局,都是超级高大上的内容,惯例上目录今天觉得红黑配色好好看呀今天没有什么具体的栗子合集,大家的应用场景都很不一样,so,到具体知识点,我们再具体举栗子。窗口函数概念: 窗口函数&am…

【转】SVN各种颜色状态

黄色感叹号(有冲突): 这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的…

实现二分归并排序算法_如何实现归并排序?

归并排序归并排序是分而治之的排序算法。划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序。递归写法归并排序递归写法的思想是&…

通俗解释非对称加密

通俗解释 对称加密 对于不了解非对称加密的同学,应该只知道“对称加密”。这个对称是指什么呢? 加密必然要解密。如果加密和解密用的是同一串字符串,也就是密码,那么这就称为对称的。新词汇而已,为了和非对称加密相区…

【转】解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接...

开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决方案都是千篇一律互相转发的,并且没有明确的解决方案或者按照,各个博客中…

【手算】逆序数树形计算方法

计算过程: 给定一列数,从左向右,依次将每个数拿出来,作为一棵树的树根。从剩下的数中,找比此数小的数,作为子节点加入到树中。重复1、2,直到到达最后一个数停止。 数出二级节点,即…

python 惰性_Django中的“惰性翻译”方法的相关使用

使用 django.utils.translation.gettext_lazy() 函数,使得其中的值只有在访问时才会被翻译,而不是在 gettext_lazy() 被调用时翻译。例如:要翻译一个模型的 help_text,按以下进行:from django.utils.translation impor…

【转】SVN冲突出现场景

如今是一个团结协作的时代,开发一个系统,往往会多人协作共同完成。版本管理是必不可少的,常用的软件有Git,SVN等。今天说一下,SVN管理版本时,如果出现冲突后,如何快速解决冲突。 首先说明一个问…

Qt Creator和Visual Studio双环境开发技能攻略

前言 刚接触Qt开发时,大多数同学的第一行Qt代码是在Qt Creator中写下的。 众所周知,Qt Creator是Qt官方提供的Qt集成开发环境1,提供了对Qt应用开发的全过程支持。也就是说,使用Qt Creator做Qt开发是完全够用的。不管是在Windows…

大疆无人机高程不准_大疆消费级无人机快速倾斜摄影测量实践

摘要:分别用 RTK两种测量模式测定像控点,用大疆消费级无人机 Phantom4PRO 开展倾斜摄影测量,最后进行成果检验。结果表明:RTK 电台模式(不做坐标校正,精度低)、RTK-CORS 网络模式测定像控点都能…

【转】CLR Profiler 性能分析工具 (转)

最近关注程序性能的优化方面,本想写篇CLRProfiler的简要文档,看到pengpeng已写好,那就转载好了,偷偷懒。 .Net的尽管拥有非常强大调试器,但也有很多局限性,只限于CLR之上,无法得到CLR的具体细节…

Qt学习资料汇总

1. 在线资源 脚本之家在线手册:Qt 快速入门系列教程W3CSchool:Qt 学习之路 2. 书籍资源 链接:https://pan.baidu.com/s/12zoOQykCA-J8x_1FVahFWA 提取码:关注公众号“Qt未来工程师”,后台回复“书籍”获取提取码。 …

魔百盒哪款型号配置高_松下负离子吹风机怎么样哪款好?推荐型号?2020年9月松下负离子电吹风选购攻略...

先说结论,方便时间不多的朋友,松下(panasonic)负离子吹风机怎么样哪款好?推荐型号?1、EH-ENE2-A405——松下(panasonic)负离子电吹风机推荐EH-ENE2-A405。带负离子功能,1…