RocketMQ Streams详解

news2024/12/22 16:01:56

一、RocketMQ Streams 概览

RocketMQ Streams是基于RocketMQ的轻量级流计算引擎。能以SDK方式被应用依赖,无须部署复杂的流计算服务端即可获得流计算能力。 因此具有资源消耗少、扩展性好、支持流计算算子丰富的特点。

1、整体架构​

总体架构

数据从RocketMQ中被RocketMQ-streams消费,经过处理最终被写回到RocketMQ。

总体架构

数据被RocketMQ Consumer消费,进入处理拓扑被算子处理,如果流处理任务中含有算子keyBy,则需要将数据按照Key进行分组,将分组数据写入shuffle topic。后续算子从 shuffle topic消费。如果还涉及count之类有状态算子,那么计算时需要读写state topic,计算结束后,将结果写回到RocketMQ中。

2、消费模型​

img_2.png

计算实例实质上是依赖了Rocket-streams SDK的client,因此,计算实例消费的MQ依赖RocketMQ rebalance分配, 计算实例总个数也不能大于消费总MQ个数,否则将有部分计算实例处于等待状态,消费不到数据。

一个计算实例可以消费多个MQ,一个实例内也只有一张计算拓扑图。

3、状态​

img_3.png

对于有状态算子,比如count,需要先对count算子进行分组,然后才能求和。分组算子keyBy会将数据按照分组的key重新写回RocketMQ,并且使相同key写入同一分区(这一过程称作shuffle), 保证这个含有相同key的数据被同一个消费者消费。 状态本地依赖RocksDB加速读取,远程依赖RocketMQ做持久化。

4、扩缩容​

img.png

当计算实例从3个缩容到2个,借助于RocketMQ集群消费模式下的rebalance功能,被消费的分片MQ会在计算实例之间重新分配。Instance1上消费的MQ2和MQ3被分配到Instance2和Instance3上, 这两个MQ的状态数据也需要迁移到Instance2和Instance3上,这也暗示,状态数据是根据源数据分片MQ保存的;扩容则是刚好相反的过程。

二、RocketMQ Streams 核心概念

1、领域模型​

StreamBuilder​

img_2.png

  • 一个StreamBuilder实例,有1到N个pipeline,pipeline表示一个数据处理路径;
  • 一个pipeline可以含有1到N个处理节点GroupNode;
  • 一个StreamBuilder实例,有一个TopologyBuilder,TopologyBuilder可构建出数据处理器processor;
  • 一个JobId对应一个StreamBuilder实例。

RocketMQStream​

img_2.png

  • 一个RocketMQStream实例,有一个拓扑构建器TopologyBuilder;
  • 一个RocketMQStream实例,可实例化1到N个worker线程;
  • 每个线程WorkerThread实例,包含一个engine;
  • 一个engine包含执行数据处理的所有逻辑,包含一个consumer实例、一个producer实例、一个StateStore实例;

流处理实例​

流处理实例表示一个运行RocketMQ Streams的进程;

  • 一个流处理实例包含一个StreamBuilder,一个RocketMQStream,一个拓扑图,一到多个pipeline;

2、StreamBuilder​

  • StreamBuilder(jobId) 构建实例;
  • <OUT> RStream<OUT> source(topicName, deserializer) 定义source topic 和反序列化方式;

3、RStream​

  • <K> GroupedStream<K, T> keyBy(selectAction) 按照特定字段分组;
  • <O> RStream<O> map(mapperAction) 对数据进行一对一转化;
  • RStream<T> filter(predictor) 对数据进行过滤
  • <VR> RStream<T> flatMap(mapper)对数据进行一对多转化;
  • <T2> JoinedStream<T, T2> join(rightStream) 双流Join;
  • sink(topicName, serializer) 将结果输出到特定topic;

3、GroupedStream​

对含有相同Key的数据进行操作

  • <OUT> GroupedStream<K, Integer> count(selectAction) 统计含有某个字段数据的个数;
  • GroupedStream<K, V> min(selectAction) 对某个字段统计最小值;
  • GroupedStream<K, V> max(selectAction) 对某个字段统计最大值;
  • GroupedStream<K, ? extends Number> sum(selectAction) 对某个字段统计和;
  • GroupedStream<K, V> filter(predictor) 对某个字段进行过滤;
  • <OUT> GroupedStream<K, OUT> map(valueMapperAction) 对数据进行一对一转化;
  • <OUT> GroupedStream<K, OUT> aggregate(accumulator) 对数据进行聚合操作,且聚合支持二阶聚合,例如在窗口未触发时添加数据,在窗口触发时计算结果这类算子;
  • WindowStream<K, V> window(windowInfo) 对窗口划定window;
  • GroupedStream<K, V> addGraphNode(name, supplier) 底层接口,向流处理拓扑中增加自定义算子;
  • RStream<V> toRStream() 转化为RStream,只是在接口形式上转化,对数据无任何操作;
  • sink(topicName, serializer) 按照自定义序列化形式将结果写出到topic;

4、WindowStream​

对被划分window的数据进行操作

  • WindowStream<K, Integer> count() 统计窗口内数据个数;
  • WindowStream<K, V> filter(predictor) 过滤窗口内数据;
  • <OUT> WindowStream<K, OUT> map(mapperAction) 对窗口内数据一对一转化;
  • <OUT> WindowStream<K, OUT> aggregate(aggregateAction) 对窗口内数据多对一转化;
  • <OUT> WindowStream<K, OUT> aggregate(accumulator) 对数据进行聚合操作,且聚合支持二阶聚合,例如在窗口未触发时添加数据,在窗口触发时计算结果这类算子;
  • void sink(topicName, serializer) 按照自定义序列化形式将结果写出到topic;

 

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

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

相关文章

「X」Embedding in NLP|神经网络和语言模型 Embedding 向量入门

在「X」Embedding in NLP 进阶系列中&#xff0c;我们介绍了自然语言处理的基础知识——自然语言中的 Token、N-gram 和词袋语言模型。今天&#xff0c;我们将继续和大家一起“修炼”&#xff0c;深入探讨神经网络语言模型&#xff0c;特别是循环神经网络&#xff0c;并简要了解…

【postgresql】ERROR: INSERT has more expressions than target columns

执行下面sql insert into apply_account_cancellation3 select * from pply_account_cancellation; 返回下面错误信息 insert into apply_account_cancellation3 select * from apply_account_cancellation > ERROR: INSERT has more expressions than target colu…

ShardingSphereJDBC简单入门

ShardingSphere 介绍ShardingSphere-JDBCSharding-Sphere-ProxyShardingSphere-Sidecar混合架构运行模式DistSQL可拔插架构ShardingSphere的发展路线 主从复制ShardingSphere-JDBC功能SQL解析SQL支持程度SQL稳定支持SQL实验性支持 MySQL不支持SQL清单分页 数据分片垂直分片水平…

世界5G大会

会议名称:世界 5G 大会 时间:2023 年 12 月 5 日-12 月 8 日 地点:河南郑州 一、会议简介 世界 5G 大会,是由国务院批准,国家发展改革委、科技部、工 信部与地方政府共同主办,未来移动通信论坛联合属地主管厅局联合 承办,邀请全球友好伙伴共同打造的全球首个 5G 领域…

KITTI数据集处理为COCO数据集格式

KITTI作为自动驾驶常用数据集&#xff0c;被广泛的应用于自动驾驶目标检测等过程中。 首先是数据集类别合并&#xff0c;原始的KITTI数据集有九个类别&#xff0c;分别是&#xff1a; Car Van Truck Pedestrian Person_sitting Cyclist Tram Misc而我们在使用过程中&#xff0…

使用@ApiModel和@ApiModelProperty的技巧

在现代软件开发中&#xff0c;提供清晰全面的 API 文档 至关重要。ApiModel 和 ApiModelProperty 这样的代码注解在此方面表现出色&#xff0c;通过增强模型及其属性的元数据来丰富文档内容。它们的主要功能是为这些元素命名和描述&#xff0c;使生成的 API 文档更加明确。 Api…

Python Flask-Admin: 构建强大的 Flask 后台管理

概要 Flask-Admin 是一个基于 Flask 的后台管理框架&#xff0c;它提供了丰富的功能和灵活性&#xff0c;使得开发者能够轻松构建功能强大的后台管理系统。在本文中&#xff0c;我们将详细介绍 Flask-Admin 的安装、配置和使用&#xff0c;通过深入的示例代码演示其主要特性。…

【改进YOLOv8】生猪胖瘦评价分级系统:可重参化EfficientRepBiPAN优化Neck

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着计算机视觉和深度学习的快速发展&#xff0c;目标检测成为了计算机视觉领域的一个重要研究方向。目标检测的目标是在图像或视频中准确地识别和定…

LiteClient工具箱:降低成本,减少监管风险

​​发表时间&#xff1a;2023年9月14日 BSV区块链协会的工程团队一直在为即将推出的LiteClient而努力工作&#xff0c;这是一套模块化的组件&#xff0c;可使简易支付验证&#xff08;SPV&#xff09;变得更加便利。 借助LiteClient工具箱&#xff0c;交易所可以通过区块头中…

【学习笔记】JavaScript中的GC算法

1、内存管理 内存&#xff1a;由可读写单元组成&#xff0c;标识一片可操作的空间 管理&#xff1a; 认为的去操作一篇空间的申请、使用和释放 内存管理&#xff1a;开发者主动申请空间、使用空间、释放空间 管理流程&#xff1a; 申请-使用-释放 // 申请 let obj {} //使…

【电路笔记】-电容器

电容器 文章目录 电容器1、概述2、电容器的电容单位3、电容4、电容器示例15、电介质6、额定电压7、总结 电容器是简单的无源器件&#xff0c;当连接到电压源时&#xff0c;可以在极板上存储电荷。 1、概述 在本电容器简介文章中&#xff0c;我们将看到电容器是无源电子元件&am…

采埃孚4D成像雷达拆解

1 基本信息 品牌&#xff1a;海外Tier1采埃孚 • 应用&#xff1a;上汽飞凡中高端纯电平台 • 数量&#xff1a;单车2个&#xff0c;安装在前后保内部 • 最远探测距离&#xff1a;350米 拆解来看&#xff0c;4D雷达主要可以分为4个部分&#xff0c;分别为数字接口板及结构件…

从Aspera到这些替代方案,下载大文件再也不用等待了

在过去&#xff0c;下载大文件往往需要漫长的等待时间&#xff0c;甚至可能会超过数小时或数天。为了解决这个问题&#xff0c;IT行业一直在努力研发新的下载技术和工具&#xff0c;以提高下载速度和效率。本文将深入探讨Aspera替代方案&#xff0c;如何让用户在下载大文件时不…

C# WPF上位机开发(网络程序界面开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前我们讨论过&#xff0c;设备之间通讯的方式很多。但是&#xff0c;不知道大家有没有注意&#xff0c;前面谈到的这些通讯方式都需要上位机电脑…

4.electron之create-react-app的桌面应用程序

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

typescript个人学习笔记

https://ts.xcatliu.com/basics/primitive-data-types.html 深受启发 1.剑谱第一页&#xff0c;初始化ts outDir表示把ts编译成js文件&#xff0c;文件编译后存放的位置 2.类型声明 基础数据五种 undefined可以赋值给其他类型引用类型数组对象 //定义数组一 let arr:[][]…

基于SSM的实践项目管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

电商控制台前台整合优化

前台逻辑 显示商品菜单输入id&#xff0c;进入某个商品检测登录和注册 根据登录和注册的状态&#xff0c;订单或者是购物车都需要登录。 登录&#xff1a;生成订单&#xff08;先生成订单表&#xff0c;再生成订单详情表&#xff09; 开发直接购买&#xff0c;加入购物车, …

基于SSM的志愿者管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

多用户商城系统哪种好用

多用户商城系统是一种能快速打造类似京东、天猫的商户入驻型平台系统&#xff0c;它一般有三种模式&#xff1a; 1、招商模式 商户入驻&#xff0c;平台收取入驻费及年费&#xff0c;平台做中介的模式&#xff0c;成交抽取服务佣金&#xff0c;这是一般的多用户商城的模式&…