Iceberg v2表写入和微批治理冲突,如何保证治理准确性
一、背景
微批治理任务分多个job治理一张表,还有一个Flink程序每5分钟一次写入iceberg表,如治理任务划分了20个job治理一张表,在治理期间存在新的数据更新,如何保证治理准确性


二、治理时写入,快照对应信息
1、治理和写入时快照和文件变化
| snapshot_id | sequence number | manifest_file | 文件类型 | 备注 |
| 1 |
1
|
file_1
|
新增 | 数据(id=5,值=123) |
| 2 | 1 | file_1 | 旧文件 | 数据(id=5,值=123) |
| 2 | 2 | file_2 | 新增 | 新增数据(id=6) |
| 2 | 2 | file_3 | 新增 | 新增数据(id=7) |
|
3(未运行的微批治理,job2) |
2 | file_3 |
旧文件
|
数据(id=7)
|
|
3(微批治理任务,job1) |
3 | file_4(合并file_1、 file_2) |
新增
|
新增数据文件(id=5,值=123)(id=6)
分多个job治理一张表,如分两个job治理一张表。此快照为治理job1生成
|
| 4 | 2 | file_3 |
旧文件 |
数据(id=7) |
| 4 | 3 | file_4 | 旧文件 | 数据(id=5,值=123)(id=6) |
| 4 |
4
|
file_5
|
新增 | 新增数据文件(id=5,值=456) |
| 4 |
4
|
delete_file_1
|
新增 | 新增删除文件(id=5) |
| 5 |
3
|
file_4
|
旧文件 | 数据(id=5,值=123)(id=6) |
| 5 |
4
|
file_5
|
旧文件 | 数据(id=5,值=456) |
| 5 |
4
|
delete_file_1
|
旧文件 | 删除文件(id=5) |
| 5(微批治理任务,job2发现有更新,重试) |
5
|
file_6(合并file_3)
|
新增 |
提交时判断在本次治理期间有数据写入,在commit时重新拿最新快照信息,使用治理前的sequence number,然后合并后提交新快照,不会覆盖flink更新的数据。 如果微批治理期间有数据更新,则从更新之后的治理job开始,数据文件不会在合并,但是删除文件会做合并,如果历史删除文件较多,后面的治理任务会把删除文件合并。直到下次治理时小的数据文件才可以合并 |
|
|
|
|||
|
|
|
腾讯云技术小姐姐解答
微批写入时分多个job(如10个)治理一张表,在运行5个 job后有一个实时任务更新了数据,从第6个job开始会有重试。
(1)重试的机制是什么样的
重试时会refresh获取当前最新元数据metadata,在这个基础上把新的元数据manifest files等元数据整合,然后commit
(2)如何保证更新的数据不被旧数据覆盖
如何保证增量写入的更新的数据不被微批治理的旧数据覆盖: use-starting-sequence-number=true, 默认,会使得微批治理会使用治理前本身的sequence number,从而不会覆盖flink增量写入的新数据。




Iceberg v2表写入和微批治理冲突,如何保证治理准确性的更多相关文章
- 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈
物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ...
- SWUST OJ 1012哈希表(链地址法处理冲突)
哈希表(链地址法处理冲突) 1000(ms) 10000(kb) 2676 / 6911 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法.建立链表的时候采用尾插法 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- 微服务---Eureka注册中心(服务治理)
在上一篇的初识SpringCloud微服务中,我们简单讲解到服务的提供者与消费者,当服务多了之后,会存在依赖与管理之间混乱的问题,以及需要对外暴露自己的地址,为了解决此等问题,我们学习Eureka注册 ...
- python操作mysql数据库读取一个数据库的表写入另一个数据库
写这个肯定是工作需要了,不啰嗦,直接说事 我现在有两台主机,一台是公司主机,一台是客户主机,要求把公司主机上的三个表同步到客户主机上的数据库 注意是同步,首先就得考虑用linux定时任务或者主从复制, ...
- 注册表写入自定义协议,网页打开exe
新建文件:Register.reg,写入代码: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\exe1] @="exe1 P ...
- C语言操作注册表 写入 读取信息
#include <stdio.h>#include <windows.h>int main(void){char regname[]="Software\\Micr ...
- [置顶] 【VB.NET2010】注册表写入方法
这里,以添加启动项为例: Imports Microsoft.Win32 Imports System.Reflection.Assembly Private Sub SetAuto_Click( ...
- spring cloud微服务三:Eureka服务治理之注册服务提供者及服务的发现和消费
当服务注册中心成功建立以后,就需要有服务的注册和消费,否则这个服务注册中心就没有了存在的意义,而实际上,一个简单的服务注册也是非常简单的,仅仅需要实现四部曲就好. 首先,还是建立一个基本的spring ...
- 治理Go模块 服务治理 中台业务 Golang的net.Conn接口,double close
小结: 1.中台业务 前台业务 快车.专车.顺风车,在滴滴这些业务线叫做前台服务,他们有一些共同的特性,都有司机信息,订单的状态,收银,账号等等这些业务逻辑,我们会把专门的业务逻辑集合起来,形成专职的 ...
随机推荐
- Jenkins篇-安装与使用
Jenkins是一个开源自动化服务器,可以自动执行持续集成和交付软件所涉及的重复技术任务.Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序存档(WAR ...
- 数据库管理软件之DataGrip
DataGrip 是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2.Derby.H2.MySQL.Oracle.PostgreSQL.SQL ...
- nginx之常见错误
在此只介绍源码安装nginx的时候,发生的一些常见的错误 1. nginx访问出现File not found 1) php-fpm找不到SCRIPT_FILENAME中执行的PHP文件 更改配置文件 ...
- docker 下载镜像配置
现在docker 安装镜像的时候,会发现下载不了镜像. 有网友提供了一些可用的镜像,亲测可用. { "registry-mirrors": [ "https://dock ...
- ae基于面要素生成柱状图
IFeatureLayer fl = axMapControl1.get_Layer(0) as IFeatureLayer; IGeoFeatureLayer pGeoFeatLyr = fl as ...
- AI产品落地的多角度探索与实践
AI产品落地的多角度探索与实践是一个复杂而多维的过程,它涉及技术创新.行业应用.人机协作等多个方面.在构建多智能体平台Agent Foundry的基础上,我们可以将其应用于制造业.教育.政府.跨境电商 ...
- elementui多选框部分禁用
直接上代码 <el-table-column type="selection" :selectable="selectable" align=" ...
- Dapper.SimpleCRUD:Dapper的CRUD助手
我们在项目开发中,面对一些高并发.大数据量等业务场景,往往对SQL语句的性能要求比较高,这个时候为了方便灵活控制,我们一般就会编写原生的SQL. Dapper就是一个非常高性能的轻量级ORM框架,Da ...
- AI 与数据的智能融合丨大模型时代下的存储系统
WOT 全球技术创新大会2024·北京站于 6 月 22 日圆满落幕.本届大会以"智启新纪,慧创万物"为主题,邀请到 60+ 位不同行业的专家,聚焦 AIGC.领导力.研发效能.架 ...
- 中电金信:数字经济时代,AI+金融技术应用与未来发展