中间件 MetaQ

embedded/2025/1/19 5:32:35/

MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,其思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy。以下是关于MetaQ的详细介绍:
基本特性
•  高性能:具有消息存储顺序写、吞吐量大等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景。
•  高可用:基于其物理部署架构实现高可用性。生产者为消息定义topic后,消费者可以订阅该topic,消息就有了从生产到消费的路由指向。
•  可扩展:能够根据业务需求进行水平扩展,以应对不断增长的消息处理量。


架构原理
•  生产者-消费者模型:采用典型的生产者-消费者模型,核心作用是解耦。生产者负责产生消息并发送到MetaQ服务器,消费者则负责接收消息并处理,使得生产者和消费者彼此没有直接依赖,从而实现了同步到异步的转换。
•  消息传递方式:消息传递是通过发布-订阅的方式进行的。生产者将消息发布到一个或多个主题(Topic)上,消费者则订阅这些主题,并从MetaQ服务器拉取数据并解析成消息进行消费,可实现一对多、多对多的消息传递模式。
•  物理架构:
•  Producer:消息生产者,与NameServer随机一个节点建立长连接,定时从NameServer获取topic路由信息,与master broker建立长连接,定时发送心跳,只与master建立连接产生通信,不与slave建立连接。
•  Consumer:消息消费者,与NameServer随机一个节点建立长连接,定时从NameServer获取topic的路由信息,并获取想要消费的queue。可以和提供服务的master或slave建立长连接,定时向master和slave发送心跳,既可以从master订阅消息,也可以从slave订阅消息。
•  消息存储:将消息存储(持久化)到位于生产者和消费者之间的一个消息代理(Message Broker)上。消息模型包括Message(单位消息)、Topic(消息的类型,生产者对应消费者的分区标识)、Tag(消息在相同Topic时的二级分类标识,可用于消息的筛选)、Queue(物理分区,一个Topic对应多个Queue)、Group(生产者或消费者的逻辑分组,同一个Group的生产者/消费者通常生产/消费同一类消息,并且生产/消费的逻辑一致)、Offset(偏移值,表示消费到的位置或待消费的消息位置)。


消息机制
•  消息分发:生产者发送的每一个消息会对应到某个Topic下,对于该Topic,可以有若干个Group进行订阅。当某条消息发送到某个Topic下时,所有订阅该Topic的group都会收到该消息的一个复制消息。而当消息从Group下发到某个机器时,会根据负载等其他机制选择该group下的某台机器进行处理。对于Group下的多台机器,只会有一台机器收到对应消息的复制消息。
•  消息消费:消费者通过指定Consume queue的位点来读取消息,通过提交Consume queue的位点来维护消费进度。Consume queue每个条目长度固定,单个ConsumeQueue文件默认最多包括30万个条目。这样做的好处是队列非常轻量级,且在消费过程中都是顺序读取,速度非常快。
•  消息过滤:当某台机器得到消息时,可以根据其Tag来进行选择不同的处理器进行处理,主要是用来对消息进行处理过滤。例如,对于带有标签“newuser”的消息,可以选择对应的“newuser”处理器进行处理。


应用场景
•  异步解耦:将耗时的任务异步化,通过消息队列缓存任务,从而实现消息发送方和接收方的解耦,使得任务的处理能够异步、并行,提高系统或集群的吞吐量和可扩展性。
•  Mysql数据复制:可用于实现数据库的数据复制功能。
•  日志收集:可以收集日志数据,便于进行后续的日志分析和处理。
•  削峰填谷:在流量高峰期间,控制服务器处理的QPS,防止大流量打挂数据库等导致服务器宕机,让服务处理请求更加平缓,节省服务器资源。同时,将阶段性的大流量请求缓存起来,在流量平缓的时候慢慢处理,防止过多的请求被拒绝后的重试导致更大的流量。


其他特点
•  支持本地和XA事务:能够满足不同业务场景下的事务需求。
•  通信协议:通信组件直接使用Netty,在其上做了简单的封装。Netty是一个事件驱动的网络编程框架,具备高性能、高可靠性。
•  数据存储结构:消息存储是由CommitLog和ConsumeQueue配合完成的,CommitLog真正存储消息,ConsumeQueue存储消息在CommitLog上的索引。每个Topic下的每个Queue都有一个ConsumeQueue文件,每个Broker上的CommitLog被该机器上的所有Queue共享。

 


http://www.ppmy.cn/embedded/155148.html

相关文章

前端——换行

大家都知道<br />和\n是有换行的作用 很多时候&#xff0c;有些区分不开<br />和\n的区别&#xff0c;他俩各自在什么情形下使用呢 一、<br /> 在浏览器中&#xff0c;<br /> 会强制文本在当前位置换行。 适用于需要在特定位置插入换行的场景。 二、…

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…

WEB攻防-通用漏洞_XSS跨站_绕过修复_http_only_CSP_标签符号

目录 1、关卡361 - 反射型xss 2、关卡317 - 过滤标签 3、关卡318 319 - 过滤标签 4、关卡320--326 - 过滤空格和尖括号 5、关卡327 - 存储型跨站 6、关卡328 7、关卡329 - 失效凭据需1步完成所需操作 8、关卡330 - 存储型-借助修改密码URL重置管理员密码&#xff08;GE…

【Grasshopper】【Python】点集排序:带索引的Z字形排序算法

Grasshopper Python点集排序&#xff1a;带索引的Z字形排序算法 1. 功能介绍 这段代码实现了一个在Grasshopper中的点集排序功能&#xff0c;不仅可以将空间中的点按照Y坐标分组并在每组内按X坐标排序&#xff0c;还能追踪每个点的原始索引位置。 2. 输入输出参数 输入参数&…

Unreal Engine 5 C++ Advanced Action RPG 八章笔记

第八章 Boss Enemy 2-Set Up Boss Character 创建Boss敌人流程 起始的数据UI战斗能力行为树 这集新建Boss敌人的蓝图与动画蓝图和混合空间,看看就行巨人在关卡中,它的影子被打破,更改当前项目中的使用的阴影贴图就可以解决 从虚拟阴影贴图更改为阴影贴图即可 3-Giant Start…

vscode——如何让标点总是成对出现

vscode——如何让标点总是成对出现&#xff1a; 打开vscode&#xff0c;在设置中输入editor.autoClosing 将设置参数全部改成always

《Keras 3 在 TPU 上的肺炎分类》

Keras 3 在 TPU 上的肺炎分类 作者&#xff1a;Amy MiHyun Jang创建日期&#xff1a;2020/07/28最后修改时间&#xff1a;2024/02/12描述&#xff1a;TPU 上的医学图像分类。 &#xff08;i&#xff09; 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 简介 设置 本教程将介…

MyBatis执行一条sql语句的流程(源码解析)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MyBatis执行一条sql语句的流程&#xff08;源码解析&#xff09; MyBatis执行sql语句的流程加载配置文件加载配置文件的流程 创建sqlsessionFactory对象解析Mapper创建sqlses…