RocketMQ在数据异构系统的应用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 老胡身在南方“鹏城(深圳)”,除写代码啥都不会,全栈技术专家,RocketMQ 多语言client贡献者。技术方面专注中间件,分布式,存储,AI软件领域的解决方案。

老胡身在南方“鹏城(深圳)”,除写代码啥都不会,全栈技术专家,RocketMQ 多语言client贡献者。技术方面专注中间件,分布式,存储,AI软件领域的解决方案。


场景


数据的时代已经到来,数据的价值越来越重要,面对无处不在的数据,为了把数据利用起来,于是出现了数据中台。


数据中台大致有六大功能:


  1. 数据收集
  2. ETL
  3. 数据计算
  4. 存储
  5. 数据分析
  6. 数据展示


本文讲解RocketMQ在数据中台的数据收集,ETL,数据计算中发挥核心作用


选择


业界已经存在了许多数据同步的解决方案,这些同步解决方案存以两方面为主


  1. 点对点同步
  2. 离线同步


而业界大部分同步方案的架构与下图类似:


1.png


作为一个工业级的组件不会做选择题。点对点同步要,多对多同步也要。离线同步不可以少,同时实时同步也是必须的。异构与同步数据组件,组件架构如下:


2.png


基于消息中间件的异构同步组件与一下优势


多种类型的source


从上图可以观察到,source的类型是很多种的。


gather/sdk:主要是外部数据,比如客户的数据,APP采集数据的来源

RPC: 主要是内部业务系统产生的有价值的数据

agent:收集日志,系统与硬件运行信息

数据源:从各种存储读取数据


削峰填谷


3.png


source的读取速度与slink的写入数据都是无法控制的。在普遍情况下source的效率往往是sink的好几倍,可能致使gather服务不可用,造成严重的事故。什么时候出现峰没有人知道,这样不可预知的事情对于整个系统的稳定性与高可用性会造成极大的威胁。于是引入消息中间件作为缓冲区


多数据源异构


4.png


客户存在上线与下线两套商品体系,规划两套体系的推荐行为可以共享。需要同时采集客户两套体系的商品数据,同步五个存储。基于消息中间件的异构解决方案,才能非常优雅的处理问题。


更优的资源调配


5.png


第一个流程表示的一个source多个sink的架构,第二个流程多个source一个sink的架构。在异构架构设计下source与sink的个数与是否运行都是可以灵活搭配的。这样大大的节约了服务器资源。


深入


在众多消息中间件为什么选择RocketMQ,因为RocketMQ的许多特性帮我们解决许多问题。具体问题如下:


6.png


数据安全


在数据同步的组件里面有一个基本原则就是数据不能丢失。对于saas平台这种场景,有非常多的不确定因素与许多不可预知的情况下,数据恢复是一件非常麻烦的事情,如果在实时场景中同步数据与客户内部数据出现差异,可能出现非常致命的事情。对比其他消息中间件,所以数据安全是一件最重要的事情。RocketMQ以下特性在保证数据不丢失


  1. RocketMQ的整体架构师设计保证了数据安全。主从同步复制,broker同步落盘

  2. 当消费失败之后的消息重试

  3. 死信队列:

     1)不需要另外维护消息失败后的存储点的

     1)异常操作造成队列不存在等异常,可以发送到私信队列


并行消费与同步消费


数据同步分为添加,修改,删除三种行为。表(结果集)可以分类为:追加表与修改表

追加表只有添加行为,适合并行消费


修改表有添加,修改,删除三种行为。在大数据高并发多线程的情况数据中台很容易没有按照业务的数据行为执行,造成数据中台的数据与业务数据不一致性。为了保证执行循序与业务操作循序一致,与选择了RocketMQ的同步消费的特性,用于保证操作执行循序不变


7.png


上图演示了并行消费情况下数据不一致的情况。在理想情况下 source的循序是1234,那么sink的执行循序是6785。但是实际执行的循序是5678。于是使用RocketMQ的循序消息特性保证了数据的一致性


8.png


顺序消息实际是只让一个消费者消息消息,其他消费者会一直去抢消费权


分类并行


同步消费的效率对比并行消费实在低太多了,而且sink的写入速度远远低于source读取数据,经常造成了大量的数据累积,导致同步数据与业务数据一致性较差,有时低都业务都无法忍受。


在第一次同步时是全量同步,不存在修改操作。所以使用并行同步。之后改为同步消费。为了提高同步消费的性能。经过深入的分析与研究,发现如果对数据进行分类就可以提高效率,于是基于RocketMQ的queue与tag实现了分类并行。


9.png


观察与运维能力


目前有大量的同步topic,这些topic创建,删除,测试,定位,观察,查找 是一个难题,项目参与的每个开发,测试,产品等都要去观察与运维topic。RocketMQ-console能简单的帮我们解决这些问题,很大程度上提高了整体开发效率与进度


基于消息轨迹,初步实现数据跟踪


10.png


上面是推荐业务场景下,数据在系统内部的流转说明图。这样一个流转,在内部称为“任务”,每个节点是“算子”。某条数据可能因为某个不可抗拒的因素没有产生“任务”的预期结果。在复杂的任务与系统,高并发,高性能的情况下,需要对数据的流转进行监控,及时发现流转的异常,快速的修正数据与问题。于是需要一个能力:数据跟踪


通过观察发现目前所有的算子大部分都从RocketMQ读取数据,于是将计就计基于RocketMQ的消息轨迹,设计完成了第一代数据跟踪能力


RocketMQ-connect


RocketMQ-connect是基于RocketMQ实现的数据异构开源组件,已经支持多种数据源之间的同步。现在越来越多的企业与公司使用RocketMQ支撑起业务平台与数据平台,在各平台的数据是一种流状态。使用RocketMQ-connect在原有的架构下可以简单,快速的构建起一套流数据平台。


RocketMQ-connect架构有两个明显的特征:


  1. 去中心化设计与无依赖架构设计

  2. 基于SPI的可插排的设计


去中心化设计


11.png


connect-cli把异构任务发送到任何一个connect-runtime,runtime把任务信息做了简单处理发送broker。集群内所有connect-runtime都会接受到任务,然后存储到本地,runtime启动运行任务不用直接依赖broker。

在整体的RocketMQ-connect在整体架构设计上没有使用任何的其他组件,保证了整体的简洁与优雅


基于SPI的可插排的设计

json
{
  "connector-class":"org.apache.rocketmq.connect.file.FileSourceConnector",
  "topic":"fileTopic",
  "filename":"/opt/source-file/source-file.txt",
  "source-record-converter":"org.apache.rocketmq.connect.runtime.converter.JsonConverter"
}


connector-class:  source的执行对象

source-record-converter: 数据处理对象

topic:file-source的配置

filename: file-source的配置


从任务信息中可以看出,启动一个任务需要提供任务所需的source或则sink执行类。RocketMQ-connect会在插件目录下找寻启动类。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5天前
|
消息中间件 安全 物联网
MQTT常见问题之新增自定义主题后平台侧收不到发布的数据如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
5天前
|
物联网 网络性能优化 API
MQTT常见问题之单个消息发送数据不能超过64k如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
5天前
|
消息中间件 存储 监控
|
5天前
|
机器学习/深度学习 开发工具
DP活动:HMI-Board以太网数据监视器(二)MQTT和LVGL
DP活动:HMI-Board以太网数据监视器(二)MQTT和LVGL
34 1
|
5天前
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
214 3
|
5天前
|
消息中间件 存储 监控
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
37 1
|
5天前
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
275 2
|
4天前
|
消息中间件 JavaScript Java
MQ产品使用合集之视觉智能平台人脸搜索1:N怎么更新人脸数据
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
10 2
|
5天前
|
消息中间件 网络安全 数据安全/隐私保护
麒麟系统ARM安装rabbitmq
记录下麒麟liunx系统安装rabbitmq的踩坑记录,按照我这个步骤来,100%解决问题。 希望对您有帮助!
麒麟系统ARM安装rabbitmq
|
5天前
|
消息中间件 物联网 关系型数据库
MQTT常见问题之消息对列mqtt的历史数据查看失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:

相关产品

  • 云消息队列 MQ
  • http://www.vxiaotou.com