消息中间件之RocketMQ源码分析(八)

RocketMQ中的消息过滤

RocketMQ设计了消息过滤,来解决大量无意义流量的传输:即对于客户端不需要的消息,
Broker就不会传输给客户端,以免浪费宽带,RocketMQ4.2.0支持Tag过滤、SQL92过滤、Filter Server过滤

Tag过滤

在这里插入图片描述

  • 第一步:用户发送一个带Tag的消息
  • 第二步:用户订阅一个Topic的Tag,RocketMQ Broker会保存订阅关系
  • 第三步:在Broker端做Tag过滤。消费者在Pull消息时,RocketMQ Broker会根据Tag的HasCode进行对比,如果不满足条件,消息不会返回给消费者,以节约带宽也许你们会问,为什么不直接用字符串进行对比和过滤呢?原因是HashCode对比存在Hash碰撞而导致过滤失败,字符串比较的速度相较HashCode慢。HashCode对比是数字比较,Java底层可以直接通过位运算进行对比,
    而字符串对比需要按照字符顺序比较,相比位运算更加耗时。由于HashCode对比有Hash碰撞的危险,所以才引出第四步
  • 第四步:客户端Tag过滤。Hash碰撞相信大家都有所了解,就是不同的Tag计算出来的Hash值可能是一样的,在这种情况下过滤的消息是错误的,所以RocketMQ设计了客户端字符串对比功能,用来做第二次Tag过滤
  • Tag过滤为什么设计成Broker端使用Hash过滤,而客户端使用Tag字符串进行对比过滤呢?
    Broker端使用Hash过滤可以快速过滤海量消息,即使偶尔有"漏网之鱼",在客户端字符串
    过滤后也能被成功过滤。这种层次设计 的过滤方式在做系统时可以参考

SQL过滤流程

在这里插入图片描述

  • 第一步:消费订阅Topic,上传过滤SQL语句,RocketMQ Broker编译SQL保存
  • 第二步:消费者Pull消息
  • 第一次过滤:使用Bloom过滤器的isHit()方法做第一次过滤。Bloom过滤器效率高,但是也存在
    缺陷,即只能判断不需要的消息,过滤后的消息也不保证都是需要消费的。
  • 第二次过滤:执行编译后的SQL方法evaluate()即可过滤出最终的结果
    在使用SQL过滤前,需要在启动Broker时配置如下几个参数:
enableConsumeQueueExt=true
filterSupportRetry=true
enablePropertyFilter=true
enableCalcFilterBitMap=true

FilterServer过滤流程

在这里插入图片描述
这是一种不常用但是非常灵活的过滤方式,要使用Filter Server过滤必须在启动Broker时,添加如下配置:filterServerNums=大于0的数字.这样就可以启动一个或多个过滤服务器,每个过滤服务在启动时会自动注册到Namesrv中

  • 第一步:用户消费者从Namesrv获取Topic路由信息,同时上传自定义的过滤器实现类源代码到FilterServer中,FilterServer编译并实例化过滤器类
  • 第二步:用户发送拉取消息请求到FilterServer,FilterServer通过Pull consumer从Broker拉取消息,
    执行过滤类中的过滤方法,返回过滤后的消息

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

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

相关文章

蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】

文本阴影 text-shadow 属性 给文本内容添加阴影的效果。 文本阴影的语法格式如下: text-shadow: x-offset y-offset blur color;• x-offset 是沿 x 轴方向的偏移距离,允许负值,必须参数。 • y-offset 是沿 y 轴方向的偏移距离&#xff0c…

Swift Combine 管道 从入门到精通三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据,操作符对该数据做出响应并有可能更改它,订阅者请求并接收这些数据。 这…

LoveWall v2.0Pro社区型校园表白墙源码

校园表白墙,一个接近于社区类型的表白墙,LoveWall。 源码特色; 点赞, 发评论, 发弹幕, 多校区, 分享页, 涉及违禁物等名词进行检测! 安装教程: 环境要求;…

一文读懂|Apollo自动驾驶平台9.0全面解读

2023年12月19日,百度正式推出了Apollo开放平台的全新升级版本--Apollo开放平台9.0,面向所有开发者和生态合作伙伴,以更强的算法能力、更灵活易用的工具框架,以及更易拓展的通用场景能力,继续构筑自动驾驶开发的领先优势…

极限的反问题【高数笔记】

1. 什么是极限反问题? 2. 极限反问题分为几类? 3. 每一类极限反问题的具体做法是什么? 4. 每一类极限反问题具体做法是否有前提条件? 5. 例题?

本地安全策略 | 服务器管理 | 配置项

本地安全策略 Windows 本地安全策略是一组在本地计算机上配置的安全设置,用于管理计算机的安全性和访问控制。这些策略是针对单个计算机的,与域策略不同,本地安全策略不通过域控制器进行集中管理。本地安全策略通过本地组策略编辑器进行配置…

Linux---线程

线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在CPU眼中…

数据结构第十二天(队列)

目录 前言 概述 源码: 主函数: 运行结果: 前言 今天和大家共享一句箴言:我本可以忍受黑暗,如果我不曾见过太阳。 概述 队列(Queue)是一种常见的数据结构,遵循先进先出&#…

25、数据结构/二叉树相关练习20240207

一、二叉树相关练习 请编程实现二叉树的操作 1.二叉树的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树各个节点度的个数 6.二叉树的深度 代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h> ty…

UDP是什么,UDP协议及优缺点

UDP&#xff0c;全称 User Datagram Protocol&#xff0c;中文名称为用户数据报协议&#xff0c;主要用来支持那些需要在计算机之间传输数据的网络连接。 UDP 协议从问世至今已经被使用了很多年&#xff0c;虽然目前 UDP 协议的应用不如 TCP 协议广泛&#xff0c;但 UDP 依然是…

提速MySQL:数据库性能加速策略全解析

提速MySQL&#xff1a;数据库性能加速策略全解析 引言理解MySQL性能指标监控和评估性能指标索引优化技巧索引优化实战案例 查询优化实战查询优化案例分析 存储引擎优化InnoDB vs MyISAM选择和优化存储引擎存储引擎优化实例 配置调整与系统优化配置调整系统优化优化实例 实战案例…

Linux学习笔记(centOS)—— 文件系统

目录 一、Linux中的文件 打开方式 二、目录结构​ 三、相关命令 切换目录命令 列出当前目录下的文件和目录命令 一、Linux中的文件 “万物皆文件。” 图1.1 所有文件 打开方式 图形化界面左上角的位置→计算机&#xff0c;打开以后就可以看到Linux全部的文件了&#xf…

C语言:操作符详解

创作不易&#xff0c;给个三连吧&#xff01;&#xff01; 一、算术操作符 C语言中为了方便计算&#xff0c;提供了算数操作符&#xff0c;分别是:,-,*,/,% 由于这些操作符都是有两个操作数&#xff08;位于操作符两边&#xff09;&#xff0c;所以这种操作符也叫做双目操作…

【操作系统】MacOS虚拟内存统计指标

目录 命令及其结果 参数解读 有趣的实验 在 macOS 系统中&#xff0c;虚拟内存统计指标提供了对系统内存使用情况和虚拟内存操作的重要洞察。通过分析这些指标&#xff0c;我们可以更好地了解系统的性能状况和内存管理情况。 命令及其结果 >>> vm_stat Mach Virtu…

查看NodeJs版本和查看NPM版本

Windows10 Dos命令下 查看NodeJs版本和查看NPM版本 NodeJs的命令是&#xff1a;node -v Npm的命令是&#xff1a;npm -v 下图&#xff1a; 记录下&#xff01;~

Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ①

&#x1f4c1; 前情提要&#xff1a; Springboot 整合 Elasticsearch&#xff08;一&#xff09;&#xff1a;Linux下安装 Elasticsearch 8.x Springboot 整合 Elasticsearch&#xff08;二&#xff09;&#xff1a;使用HTTP请求来操作ES 目录 一、Springboot 整合 Elasticsea…

DC-7靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; 由于靶机和kali都是nat的网卡&#xff0c;都在一个网段&#xff0c;我们用arp-scan会快一点&#xff1a; arp-scan arp-scan -I eth0 -l └─# arp-scan -I eth0 -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:dd:ee:6…

【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏

蓝桥杯备赛 | 洛谷做题打卡day29 文章目录 蓝桥杯备赛 | 洛谷做题打卡day29[NOIP2017 提高组] 宝藏题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示题解代码我的一些话[NOIP2017 提高组] 宝藏 题目背景 NOIP2017 D2T2 题目描…

机器人学、机器视觉与控制 上机笔记(2.1章节)

机器人学、机器视觉与控制 上机笔记&#xff08;2.1章节&#xff09; 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要&#xff0c;想同…

51单片机之数码管显示表白数字篇

朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L…