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.中台业务 前台业务 快车.专车.顺风车,在滴滴这些业务线叫做前台服务,他们有一些共同的特性,都有司机信息,订单的状态,收银,账号等等这些业务逻辑,我们会把专门的业务逻辑集合起来,形成专职的 ...
随机推荐
- 超详细 HarmonyOS 开发教程之开发环境搭建指南
HarmonyOS开发环境搭建指南:DevEco Studio安装教程 一.系统要求 操作系统:Windows 10 64位或更高版本 RAM:至少8GB,推荐16GB 硬盘空间:至少10GB可用空间 ...
- a标签与Blob下载文件的区别和获取文件下载进度
文件下载的几种方式. 大家都做过文件下载,无非就是通过a标签给定一个href. 用户点击下载按钮. 或者使用Blob的方式进行下载. 这两种是很常见的,也是我们平时做使用最多的方式. 那么我们知道这2 ...
- Java Playwright 浏览器最大化
Playwright 是一个用于自动化 Web 应用测试的现代工具,支持多种语言(包括 Java)及多个浏览器(如 Chromium.Firefox 和 WebKit).它提供了一致的 API 来控制 ...
- 【Amadeus原创】wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法。
两种报错方式: 1.此响应不是合法的JSON响应. 2.从服务器收到预料之外的响应.此文件可能已被成功上传.请检查媒体库或刷新本页. 情况:媒体服务器上传小文件没问题,大一点的文件报这个错误. 原因: ...
- RabbitMQ, Windows Server 上服务总线的替代品
RabbitMQ, Windows Server 上服务总线的替代品 https://www.robfox.io/2017/04/17/rabbitmq-alternative-service-bus ...
- 使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API
使用 ASP.NET Core 5 Web API 创建可发现的 HTTP API https://devblogs.microsoft.com/aspnet/creating-discoverabl ...
- 中电金信:云原生时代IT基础设施管理利器——基础设施即代码(IaC)
在数字化转型.零售业务快速发展.信创建设驱动下,应用架构.技术架构.基础架构都已向云原生快速演进,银行业IT基础设施管理产生了非常大的变化,当前银行业,正在开展新一轮的核心应用系统重构.基础平台统一 ...
- 技术实践|Redis基础知识及集群搭建(上)
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享 ...
- T 语言语法设计(预审稿)
欢迎吐槽 一. 字面量 1. 数字字面量 0, 0xff, 0b10_01, .1 2. 字符串字面量 'x', "x\n\uffff\Uffffffff", `x{1}y` 3. ...
- shell脚本实现Base64加解密
暂时不支持中文字符 脚本: #!/bin/bash # ##################################################################### # ...