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

RocketMQ负载均衡特性

Producer生产者

  1. ProducerGroup
    用来表示一个发送消息应用,一个 Producer Group 下包含多个 Producer 实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个 Producer 对象。一个 Producer Group 可以发送多个 Topic 消息。

    Producer Group 作用如下:

    (1)标识一类 Producer

    (2)可以通过运维工具查询返个収送消息应用下有多个 Producer 实例

    (3)发送分布式事务消息时,如果 Producer 中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。

  2. Producer 连接 NameServer

    Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取到Topic路由信息(Broket注册的IP地址),并向提供Topic服务的Master建立长连接,并且定时(默认30秒)向Master 发送心跳。

  3. Producer 发送消息负载均衡

    发送消息通过轮询队列的方式发送,每个队列接收平均的消息量。通过增加机器,可以水平扩展队列容量。另外也可以自定义方式选择发往哪个队列。注:另外多个队列可以部署在一台机器上,也可以分别部署在多台不同的机器上。

图片描述

Consumer消费者

  1. Consumer Group

    用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊 方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

  2. Consumer 连接 NameServer

    Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取到Topic 路由信息,并向提供Topic服务的Master、Slave建立长连接,并定时向Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

  3. Consumer 订阅消息负载均衡

    假设有5个队列,2 个Consumer,那举第一个Consumer消费3个队列,第二Consumer 消费2个队列。这样即可达到平均消费的目的,可以水平扩展Consumer来提高消费能力。但是Consumer 数量要小于等于队列数量,如果Consumer超过队列数量,那举多余的Consumer将不能消费消息。

图片描述

  1. 消费并行度

    修改消费并行度方法:

    (1)同一个Consumer Group下,通过增加Consumer实例数量来提高并行度,超过订阅队列数的Consumer实例无效。可以通过加机器,或者在已有机器启动多个进程的方式。

    (2)提高单个 Consumer 的消费并行线程,通过修改设置 consumeThreadMin最小并发线程数和consumeThreadMax最大并发线程数来提高消费能力。

    (3)通过设置Consumer的consumeMessageBatchMaxSize这个参数,默认是1,即一次只消费一条消息,例如设置为N,那么每次消费的消息数小于等于N。这样即可大幅度提高消费的吞吐量。

Tag消息过滤
最后讲解一些Tag,Tag是用于消息分类时使用的!但是只能做简单的过滤。那么能不能消费端A订阅这个Tag1就能确定Tag1消息发送到消费端A呢?答案是不能!根据前面的Consumer负载均衡策略,一个消息不能确定被发送到具体的某个消费者,所以只能做简单的过滤数据分类。

相关文章:

  • 方法缓存与查找
  • 《Android和PHP开发最佳实践 》一3.2 PHP开发环境
  • bzoj3668[Noi2014]起床困难综合症
  • 《Oracle达人修炼秘籍:Oracle 11g数据库管理与开发指南 》一3.1 安装预处理
  • Spark读取mysql数据
  • OPM数据泄露:生物识别可以信任吗?
  • notepad++添加Compare插件
  • Python新型字符串格式漏洞分析
  • SQL优化|Java面试题
  • RFID技术并非大企业专用技术
  • Spring Cloud微服务分布式云架构 - spring cloud集成项目
  • Web性能优化:What? Why? How?
  • 使用ConcurrentMap实现高效可靠的原子操作
  • 岂止于大:大数据这个词已经过时了
  • mysql基本命令
  • hexo+github搭建个人博客
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【面试系列】之二:关于js原型
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS 提示工具(Tooltip)
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP那些事
  • Js基础——数据类型之Null和Undefined
  • LeetCode29.两数相除 JavaScript
  • PHP变量
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • 突破自己的技术思维
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 赢得Docker挑战最佳实践
  • 正则表达式小结
  • 转载:[译] 内容加速黑科技趣谈
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ***通过什么方式***网吧
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core Web APi类库如何内嵌运行?
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .skip() 和 .only() 的使用
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @SpringBootApplication 包含的三个注解及其含义
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...