【数据中台建设系列之二】数据中台-数据采集

​ 【数据中台建设系列之二】数据中台-数据采集

上篇文章介绍了数据中台的元数据管理,相信大家对元数据模块的设计和开发有了一定的了解,本编文章将介绍数据中台另一个重要的模块—数据采集。

一、什么是数据采集

数据采集简单来说就是从各种数据源中抓取、捕获和传输数据的一个过程。数据采集的质量和效率直接影响到数据的可用性和及时性,进而影响到组织的决策制定和业务运营,因此数据采集是数据中台建设的关键一环,也是数据中台建设不可或缺的一部分。

二、数据采集的基本架构设计

在讨论数据采集模块的架构设计时,我们需要清楚的了解公司的具体业务场景有哪些,数据来源有哪些,对数据的时效性要求有哪些。基于此,构建出来的数据采集架构才能符合每个公司降本增效的目标,毕竟数据采集是数据中台建设中资源开销很大的一块。因此,下图数据采集架构设计是基于本公司的实际生产场景来给大家展现的,供大家参考。
在这里插入图片描述
整体数据采集架构有点类Lambda架构,没有把离线和实时同步放在一起,而是单独来处理的。数据主要分为日志数据,埋点数据,业务数据库数据等,我们的数仓采用的是Apache Doris构建的实时数仓。

  • 针对日志数据,采用Flume的方式将数据Sink到Kafka
  • 针对埋点和一些其他业务数据,是直接让业务将数据写入到Kafka中;
  • 针对业务数据库增量数据,采用的是CanalFlinkCDC将数据写入到Kafka中;
  • 对于同步离线数据库数据,采用的利用DolphineSchedule里面的Datax来直接抽取,然后写入到Doris中;
  • 所有实时数据写入到Kafka以后,通过Flink-ETL来处理数据,最后再采用DorisStreamLoad将数据写入到Doris中;

看到这问题很多的小明可能会有疑问:

  • 为什么用把FlinkCDC采集到的数据写入Kafka中?

其实这样做的目的就是通过Kafka做一层缓冲,Flink消费Kafka中的数据,利用滚动窗口定期攒批,通过StreamLoad将数据写入Doris中。了解Doris的同学可能会知道这是因为Doris数据存储格式类似于LSM Tree结构,如果数据写入过于频繁,可能会引起文件频繁合并,导致机器CPU消耗过高,而通过攒批的方式,可以减少数据导入次数,增大导入条数,对Doris的稳定性有很大的提升。

看到这相信你对这个技术架构已经有了了解了,那整体的功能改怎么设计呢?请继续往下看。

三、基本设计流程

我们既然要设计数据采集模块,那终极目标肯定就是实现零代码入仓。下面就是一个零代码入仓功能设计方案:
在这里插入图片描述

  • 首先需要创建数据源,这个数据源在元数据管理模块创建,创建完成后,需要手动同步元数据,将元数据中的库表和字段信息全部同步到数据中台侧;

  • 新建接入任务时,首先选择数据源,数据库和数据表,选择完整之后再次选择目标数据源,目标数据库和目标数据表;

  • 当把源和目标都选择以后,点击表字段映射,字段会通过字段名相等的关系进行映射,如果源字段名和目标表字段名一致,且目标字段的字段长度大于源字段长度时,则会映射成功;如果源字段名和目标字段名不一致,则需要手动指定映射关系。如下图所示,一键映射后,只有dish_name自动映射成功,其他字段由于字段名不一致,无法成功映射;
    在这里插入图片描述

  • 字段映射完成以后,需要补充一点基本信息,比如子任务的任务名,注释信息,子任务的的Flink的窗口大小,窗口最大条数等,同时可以启动动态清洗功能,需要编辑动态清洗脚本,如下图所示:
    在这里插入图片描述

  • 子任务配置完成以后,可以创建一个组任务,将子任务添加到组任务下面,同时配置组任务中Flink的jobmanager和taskmanager的内存大小。合并任务的目的也是为了提高资源利用率,如下图所示:
    在这里插入图片描述

  • 当组任务创建成功以后,就可以提交任务了,我们采用的是FlinkYarn application模式,所有Flink相关的jar包和依赖都放在了HDFS上,当提交任务时,在页面的所有配置信息会生成一个JSON文件,发送给Flink的jar包,FlinkYarn集群上启动一个任务,开始实时同步任务;

当任务停止后重启时,提供了"根据指定时间启动"和"从上次停止位置启动"两种方式:

在这里插入图片描述

  • 根据指定时间启动

选择指定时间后,你需要选择一个时间戳,Flink任务将会按照你选定的时间点重新消费Kafka中的数据,这主要是依赖于Flink Source 消费Kafka时,可以指定时间戳的功能来实现的;

  • 从上次停止位置启动

该功能依赖于Flink的 savepoint实现。当你上次停止任务时,通过yarncClient接口,获取到Flink任务的一个savepoint地址,下次再重新启动时,将savepoint地址传给Flink任务,Flink会自动从savepoint位置开始重新消费;

四、总结:

本篇文章主要介绍了数据采集功能的架构设计和功能设计,其实在实际开发过程中,远远比当前文档描述的要复杂的多,但大致思路就是这样,希望能够给大家提供一点灵感和思路。

功能的架构设计和功能设计,其实在实际开发过程中,远远比当前文档描述的要复杂的多,但大致思路就是这样,希望能够给大家提供一点灵感和思路。

最后,有兴趣的朋友,欢迎私信交流。

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

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

相关文章

2021年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列程序运行的结果是? s hello print(sworld)A: sworld B: helloworld C: hello D: world 答案&#xff1a…

Java练习题-输出斐波那契(Fibonacci)数列

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

被邀请为期刊审稿时,如何做一个合格的审稿人?官方版本教程来喽

审稿是学术研究中非常重要的环节,它可以确保研究的科学性和严谨性。审稿人的任务是检查文章是否符合学术规范,是否具有创新性,是否具有科学价值,以及是否符合期刊的定位和风格。因此,审稿人需要具有扎实的学术背景和丰…

ThingsBoard的版本控制整合gitee

1、注册gitee账号,创建自己的空间,并且创建一个用于存储ThingsBoard相关的仓库 2、进入ThingsBoard的租户层,然后找到版本控制,进行配置 输入gitee的仓库地址 仓库URL:指定你的gitee的参考地址 仓库分支:master 身份验证:密码、访问令牌 用户名:登录账号 密码/访问令…

深入探究Selenium定位技巧及最佳实践

在使用Selenium进行Web自动化测试时,准确地定位元素是非常重要的一步。Selenium提供了多种元素定位方法,本文将深入探究这八大元素定位方法,帮助读者更好地理解和应用Selenium的定位技巧。 1. ID定位 ID是元素在HTML中的唯一标识符&#xff…

造车先做三蹦子220101--机器学习字符(字母、和数字识别)的“小白鼠”与“果蝇”

“0”数字字符零 的图片(16*16点阵): #Letter23Digital23R231006d.pyimport torch import torch.nn as nn import torch.optim as optim #optimizer optim.SGD(model.parameters(), lr0.01) from PIL import Image from PIL import ImageDraw from PIL import Im…

asp.net企业招聘管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 企业招聘管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net企业招聘管理系统 二、功…

rabbitmq-3.8.15集群、集群镜像模式安装部署

目录 一、环境 1、映射、域名、三墙 2、Erlang和socat安装(三台服务器都实行) 二、部署三台rabbitmq-3.8.15实例 1、rabbitmq官网下载地址 : 2、解压rabbitmq 3、添加系统变量 4、启动web插件、启动rabbitmq 5、在rabbitmq1上添加用…

在keil中debug分析单片机数据和函数调用过程(c51为例),使用寄存器组导致错误原因分析

寄存器参考 参考2 [寄存器组使用using参考](https://blog.csdn.net/weixin_46720928/article/details/110221835) keil中的using关键字参考 官方文档里关于using的说明可参阅2个地方,(1)keil软件菜单栏->Help->…

2023年中国汽车覆盖件模具竞争格局、市场规模及行业需求前景[图]

汽车覆盖件模具是汽车车身生产的重要工艺装备,其设计和制造时间约占汽车开发周期的 2/3,是汽车换型的重要制约因素之一。汽车覆盖件模具具有尺寸大、工作型面复杂、技术标准高等特点,属于技术密集型产品。汽车覆盖件模具按以其冲压的汽车覆盖…

【tg】6: MediaManager的主要功能

【tg】2:视频采集的输入和输出 的管理者是 media manager‘ media 需要 network的支持:NetworkInterface friend class MediaManager::NetworkInterfaceImpl;NetworkInterfaceImpl 直接持有 MediaManager 的指针即可:发送rtp包、rtcp包、设置socket选项?

NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)

NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂) 文章目录 NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂)前言按键输入常用接口pinModedigitalRead 示例代码结论 前言 ESP8266如何检测外部信号的输入,通常…

JVM——一些零散的概念(后续学习深入了再补充)

Native 凡是带了native关键字的,说明Java的作用范围的达不到了,需要调用底层C语言的库 调用native方法,会进入本地方法栈,调用本地接口(JNI) JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用 它在内…

适合在虚拟化环境中部署 Kubernetes 的三个场景

在《虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比》文章中,我们从架构和特性的角度,对比了在虚拟化和裸金属环境部署 Kubernetes 的优劣势,并在文末列举了两者更适合的应用场景。本文,我们将聚焦以虚拟化环境支持 K8…

【LeetCode刷题】1两数之和

为找工作,我的代码都是用的JAVA,慢慢学习中。 LeetCode刷题Day1 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入…

《动手学深度学习 Pytorch版》 10.2 注意力汇聚:Nadaraya-Watson 核回归

import torch from torch import nn from d2l import torch as d2l1964 年提出的 Nadaraya-Watson 核回归模型是一个简单但完整的例子,可以用于演示具有注意力机制的机器学习。 10.2.1 生成数据集 根据下面的非线性函数生成一个人工数据集,其中噪声项 …

如何正确地使用ChatGPT(角色扮演+提示工程)

如何正确地使用ChatGPT(角色扮演提示工程) 一、ChatGPT介绍二、准备工作2.1 获取ChatGPT环境2.2 确定使用ChatGPT的目标和需求 三、重要因素3.1 角色赋予3.2 提示工程 四、正确案例4.1 工作日报4.2 工作总结 一、ChatGPT介绍 可以查阅ChatGPT快速入门 …

【Javascript】运算符(赋值,算术,自增,自减)

目录 赋值 算术 单个变量: 多个变量: 在字符串,数组中充当连接符 自符串与字符串 数组与数组 数组与字符串 自增与自减 前置 自增 自减 后置 自增 自减 赋值 var a 1;算术 单个变量: var a 1;a 1;console.l…

Java算法做题中用到的-数据结构(对应C++的STL)【java中各种集合的api方法】

Java算法做题中用到的-数据结构(对应C的STL) 一、数组List初始化加入元素: add删除元素: remove(参数是角标)获取元素:getindexOf() 返回指定元素下标contains()toArray() 排序方法一&#xff1…

代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

代码随想录算法训练营第三十二天 | LeetCode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II 文章链接:买卖股票的最佳时机 II 跳跃游戏 跳跃游戏 II 视频链接:买卖股票的最佳时机 II 跳跃游戏 跳跃游戏 II 目…