中间件 MetaQ

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共享。

相关推荐
SunnyRivers6 天前
LangChain中间件详解
中间件·langchain
金刚猿7 天前
06_虚拟机中间件部署_xxl-job 部署
中间件·xxl-job·xxl-job-admin
Loo国昌8 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
键盘鼓手苏苏8 天前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
Coder_Boy_9 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
CN-David9 天前
CentOS搭建Mycat中间件
linux·mysql·中间件·centos·mariadb
三水不滴10 天前
消息队列消费性能优化:批量消费 + 手动 ACK 提升吞吐量
经验分享·笔记·中间件·性能优化
nix.gnehc10 天前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang
金刚猿11 天前
05_虚拟机中间件部署_ubuntu 系统 安装 Redis 7.0.15
redis·ubuntu·中间件
GEM的左耳返11 天前
Java面试深度剖析:从JVM到云原生的技术演进
jvm·spring boot·云原生·中间件·java面试·分布式架构·ai技术