当前位置: 首页 > news >正文

大数据架构演变

一、离线数仓

缺点:

  1. ETL计算、存储、时间成本高
  2. 数据处理链路过长
  3. 无法支持实时、近实时的数据分析
  4. 数据采集对业务库造成影响

二、Lambda架构,离线实时分开

缺点:

  1. 组件多,不方便管理
  2. 很难保证数据一致
  3. 数据探查困难,出现问题很难排查

三、Kappa架构,实时为主

缺点:

  1. kafka无法支持海量存储
  2. kafka无法支持高效的OLAP
  3. 无法复用数据血缘管理体系
  4. kafka不支持update 

四、数据湖,流批一体

数据采集:之前是sqoop,flume,maxwell,datax等各种组件采集,引入组件多,链路复杂,现在是cdc千表入湖

计算引擎:之前spark、impala、presto、flink,现在flink流批一体

即席查询:之前impala、presto、hbase、kudo,现在doris,starrocks

五、实战:Flink+Paimon数据湖架构

Apache Paimon | Apache Paimon

1、Paimon官网基础知识

  1. 采集使用CDC Ingestion,可以同步表、同步库
  2. 常见配置看Maintenance-Configurations,包括了file.format='parquet',flie.block-size等默认参数
  3. 表更日志看Table with PK(主键表)-Changelog Producer
  4. 快照管理看Maintenance-Manage Snapshots
  5. 表引擎看Merge-Engine,包括了部分更新、聚合等

 

2、LSM-Tree 日志结构合并树

关系型数据库:重点是查询,在读性能上有很高的要求, 通过二分查找、hash、B+树等方式虽然数据查询很快,但是底层磁盘造成了大量随机写。同时对表的要求很高,比如结构化、索引、主键等。

因为磁盘随机写慢,顺序写快的特性,想要提高写操作性能,设计成顺序写。顺序写很简单,就是直接将数据追加到文件后面,但是读取/查询是就需要扫描所有数据,很浪费时间。

LSM-Tree:日志结构合并树,是一种分层,有序,面向磁盘的数据结构,其核心思想就是充分利用了磁盘批量顺序写要远比随机写性能快很多,对读和写性能做了权衡。

  1. 保证写操作性能:发挥磁盘特性,一次性地读取或写入固定大小的一批数据,尽可能减少随机寻道操作。(写入LSM树的新记录将首先缓存在内存中。当内存缓冲区满时,内存中的所有记录将被排序并刷新到磁盘,也就是批量写入
  2. 保证读操作性能:
    1. 通过划分内存+磁盘的多层合并结构,及各种优化尽量保证读操作性能,按照时间顺序来存储数据,最新的数据存放在内存中,方便实时计算;
    2. LSM树把文件分成多个sorted run(分成很多批),一个sorted run包含多个文件,每个文件中的数据按主键排序,实现了磁盘的分批顺序写入,查询的时候需要将所有Sorted Run合并起来,并根据时间戳合并相同主键的数据;
    3. 太多Sorted Run合并将导致查询性能较差,甚至内存不足。为了限制Sorted Run的数量,我们必须偶尔将多个Sorted Run合并为一个大的Sorted Run。这个过程称为Compaction

但是过于频繁的Compaction可能会导致写入速度变慢,这是查询和写入性能之间的权衡。

HBase、MongoDB等存储引擎都是LSM树,kafka用到了磁盘顺序读写。

3、Paimion写入流程

  1. 写操作触发,首先将数据记录在写前日志(Write Ahead Log)(相当于checkpoint),以便故障时恢复数据。
  2. 把数据追加到内存中的C0层
  3. 当C0层数量达到一定大小,就把C0和C1层以归并的方式合并覆盖C1,这个过程称为Compaction。合并出来的新文件会顺序写入磁盘,替换掉旧文件。当C1层达到一定大小,会继续和下层合并,合并之后所有旧文件都可以删除。
  4. 需要注意,写入可能重复,新版本会覆盖老版本,比如a老版本已经来到Ci层了,C0层来了个新版本,这个时候不会去更新下层老文件,而只是在C0层写入一个新的数据,等待后面合并自动覆盖。

参考视频:011.精通Paimon—大数据环境概览_哔哩哔哩_bilibili

相关文章:

大数据架构演变

一、离线数仓 缺点: ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构,离线实时分开 缺点: 组件多,不方便管理很难保证数据一致数据探查困难,出现…...

Bash语言的软件工程

Bash语言的软件工程 1. 引言 Bash(Bourne Again SHell)是一个Unix Shell和命令语言解释器,最初由Brian Fox为GNU项目编写。Bash不仅是Linux和macOS等现代操作系统的标准Shell,同时也是很多开发者和系统管理员进行自动化任务、开…...

OpenGL —— 流媒体播放器 - ffmpeg解码rtsp流,opengl渲染yuv视频(附源码,glfw+glad)

效果 说明 FFMpeg和OpenGL作为两大技术巨头,分别在视频解码和图形渲染领域发挥着举足轻重的作用。本文将综合两者实战视频播放器,大概技术流程为:ffmpeg拉取rtsp协议视频流,并经过解码、尺寸格式转换为yuv420p后,使用opengl逐帧循环渲染该yuv实时视频。 核心源码 vertexSh…...

CE中注册的符号地址如何通过编程获取

我的方式是先执行lua申请共享内存,内存名称是进程id,这样多开也不受影响,然后通过共享内存的名字就可以读到地址了。之后的人造指针的地址也都可以放这里集中管理。 -- 申请内存 local size 1024 -- 申请 1024 字节(1 KB&#…...

Math Reference Notes: 积分因子

在求解一阶线性微分方程时,积分因子(Integrating Factor)是一个非常重要的工具,它能够将复杂的微分方程转化为一个可以直接积分的形式。通过使用积分因子,我们可以简化微分方程的结构,使得求解过程更加直接…...

解决7-Zip图标更换问题

手动美化7-Zip图标,告别Win95风格 之前下载的7z压缩的文件图标都是软件的黑白图形,但是电脑重置了默认应用后再改回7z,压缩的文件就变成黄色的图标了,试过很多问题,尝试过手动更改图标,或者代码更改&#…...

Java 性能监控工具详解:JConsole、VisualVM 和 Java Mission Control

在 Java 应用程序的开发和维护过程中,性能监控和故障诊断是至关重要的。本文将详细介绍三款常用的 Java 性能监控工具:JConsole、VisualVM 和 Java Mission Control(JMC),并探讨它们的功能和使用方法。 1 JConsole 1…...

浏览器报错:您的连接不是私密连接,Kubernetes Dashboard无法打开

问题描述 部署完成Kubernetes Dashboard后,打开HTTPS的web页面,Chrome和Edge浏览器都无法正常加载页面,会提示您的连接不是私密连接的报错。 ​​​​​​​​​​​​ 原因: 浏览器不信任这些自签名的ssl证书,为了…...

用Python进行大数据处理:如何使用pandas和dask处理海量数据

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着数据量的爆炸式增长,大数据处理成为现代数据科学和工程领域的核心挑战。Python作为数据分析的重要工具,其生态系统中的pandas和dask库…...

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…...

基于Springboot + vue实现的校园失物招领系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

关于C语言初步的一些基础知识整理(2)

“本篇是对于C语言初步中一些基础知识的简单整理,内容较为琐碎,但实用” 在C语言中,格式控制符是用于指定数据输出格式的特殊字符,不同的数据类型有着其对应的格式控制符。具体的: %f 用于输出浮点型数据&#xff08…...

Linux驱动开发:深入理解I2C时序(二)

在Linux驱动开发中,I2C时序的理解和正确处理是保证I2C设备正常工作和通信的关键。I2C协议的时序特性决定了数据的有效传输和设备间的协作。因此,掌握I2C的时序细节,以及如何在Linux内核中进行时序处理,能够让开发者更好地处理设备通信问题。 本文将继续深入探讨I2C通信协议…...

逆向安卓抓包

打开Mumu网易,打开设置,打开其他,开启root权限 打开Mumu网易,找到apk安装藏航准备网.apk charles配置:proxy setting 端口9888 查看当地IP:help--->local IP address SSL Proxying Setting--->Add---->IP…...

Spring源码分析之事件机制——观察者模式(一)

目录 事件基类定义 事件监听器接口 事件发布者接口及实现 事件广播器实现 小小总结 Spring源码分析之事件机制——观察者模式(一)-CSDN博客 Spring源码分析之事件机制——观察者模式(二)-CSDN博客 Spring源码分析之事件机制…...

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件,功能为暂停扫描,并在暂停后显示继续按钮,点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…...

SHViT模型详解

模型简介 SHViT是一种创新的 单头视觉Transformer ,旨在优化计算效率和内存使用。它的核心设计理念围绕着消除传统视觉Transformer架构中的冗余元素,特别关注宏观和微观设计层面的问题。 SHViT采用了 1616的大跨度patchify stem 和 3阶段结构 ,这种独特的设计不仅有效减少…...

QGIS Server安装部署教程

一、QGIS 安装部署 1、下载安装QGIS链接如下图,选择最新的安装包文件QGIS-OSGeo4W-3.34.14-1.msi,下载完成后运行安装。 2、安装时选择QGIS安装路径不要带空格,此处会影响QGIS Server安装运行。 3、安装过程省略,安装完成后打…...

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化 1. 输出关键信息的代码示例 日志记录方法 使用以下代码记录连接池的关键信息,帮助分析连接池的状态和性能瓶颈: import org.apache.commons.pool2.impl.GenericO…...

【C语言】

目录 第一个C语言程序题目实际应用程序要求输入描述输出描述示例 程序实现三级目录 第一个C语言程序 打开VS创建项目&#xff08;视图-解决方案管理器&#xff09;创建源文件&#xff08;后缀.c&#xff09;.c会按照C的语言编译代码 c #include <stdio.h> //std-标准 //…...

PubNub C-Core嵌入式实时通信库深度解析

1. Pubnub C-Core 库概述Pubnub C-Core 是 PubNub 实时消息平台面向嵌入式与资源受限环境提供的轻量级 C 语言客户端核心库。其设计目标明确&#xff1a;在无标准 libc 环境&#xff08;如裸机、FreeRTOS、Zephyr、ThreadX&#xff09;或极简 libc 环境&#xff08;如 newlib-n…...

SPIRAN ART SUMMONER应用场景:虚拟偶像运营团队的内容视觉统一生成方案

SPIRAN ART SUMMONER应用场景&#xff1a;虚拟偶像运营团队的内容视觉统一生成方案 1. 引言&#xff1a;虚拟偶像的视觉挑战与机遇 想象一下&#xff0c;你是一个虚拟偶像运营团队的负责人。每天&#xff0c;你需要为偶像的社交媒体账号更新头像、发布宣传海报、制作直播背景…...

Jmeter压测实战—Jmeter二次开发之自定义函数

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、前言 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具&#xff0c;具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳…...

keil工程点击build报错FCARM - Output Name not specified, please check ‘Options for Target - Utilities‘

kile工程链接时报错FCARM - Output Name not specified, please check ‘Options for Target - Utilities’ 问题&#xff1a;拷贝了一个keil模板例程&#xff0c;对其中地一些代码文件路径做了调整&#xff0c;并重新添加了代码文件。编译没报错&#xff0c;点击buile链接时报…...

【青少年CTF S1·2026 公益赛】时间胶囊留言板

解题步骤F12 查看源代码。 发现接口&#xff1a;在 JavaScript 代码中发现数据请求接口 get_content.php?id&#xff0c;同时在 HTML 列表中发现未解封的 flag 留言对应的 ID 为 content-2&#xff08; id2&#xff09;。 构造请求&#xff1a;后端并没有验证当前时间是否到达…...

什么是本体:从概念体系到形式化建模

在知识图谱、语义网和知识表示中&#xff0c;本体&#xff08;Ontology&#xff09;是一个核心概念。初学者常把本体理解为术语表、分类表&#xff0c;或若干概念名称的集合&#xff0c;但这种理解并不完整。本体真正关心的&#xff0c;不只是“有哪些概念”&#xff0c;而是“…...

从曝光三要素到图像亮度:深入解析ISP中的AE算法核心

1. 从摄影三要素到数字图像处理 第一次拿起单反相机时&#xff0c;师傅教我的第一课就是"曝光三角"&#xff1a;光圈、快门、ISO。这三个参数就像魔法旋钮&#xff0c;转动它们就能让照片变亮或变暗。但当我后来接触手机摄像头开发时&#xff0c;才发现这些物理参数在…...

C语言内存释放:何时需要手动释放内存

c语言为什么要释放内存 释放内存是什么意思 C语言&#xff1a;什么情况下需要释放内存&#xff1f;C管理内存大致可以理解为两种&#xff0c;一种是在堆栈上分配的&#xff0c;另一种是在堆上分配的。临时变量&#xff0c;动态变量&#xff0c;分布在堆栈上&#xff0c;运行时…...

从几何视角理解Givens旋转:为什么它能完美解决QR分解?

几何动画拆解Givens旋转&#xff1a;QR分解的视觉化通关指南 想象你手里握着一根倾斜的多节天线&#xff0c;如何通过最简单的旋转操作让它完全竖直&#xff1f;这个看似简单的物理问题&#xff0c;恰恰揭示了Givens旋转在矩阵分解中的核心思想——通过一系列精心设计的平面旋…...

AIAgent黑盒变透明:5步实现高可信度可解释架构设计(附NASA/医疗级验证标准)

第一章&#xff1a;AIAgent黑盒变透明&#xff1a;可解释性设计的范式革命 2026奇点智能技术大会(https://ml-summit.org) 传统AI代理&#xff08;AIAgent&#xff09;长期受限于“决策不可见、推理不可溯、错误不可修”的三重黑盒困境。当Agent在金融风控中否决一笔贷款、在医…...