Flink CDC 详述实时数据湖

2023-10-27

在构建实时数仓的过程中,如何快速、正确的同步业务数据是最先面临的问题,本文主要讨论一下如何使用实时处理引擎Flink和数据湖Apache Iceberg两种技术,来解决业务数据实时入湖相关的问题。

01-Flink CDC介绍

CDC全称是Change Data Capture,捕获变更数据,是一个比较广泛的概念,只要是能够捕获所有数据的变化,比如数据库捕获完整的变更日志记录增、删、改等,都可以称为CDC。该功能被广泛应用于数据同步、更新缓存、微服务间同步数据等场景,本文主要介绍基于Flink CDC在数据实时同步场景下的应用。

Flink在1.11版本开始引入了Flink CDC功能,并且同时支持Table & SQL两种形式。Flink SQL CDC是以SQL的形式编写实时任务,并对CDC数据进行实时解析同步。相比于传统的数据同步方案,该方案在实时性、易用性等方面有了极大的改善。下图是基于Flink SQL CDC的数据同步方案的示意图。

Oracle的变更日志的采集有多种方案,这里采用的Debezium实时同步工具作为示例,该工具能够解析Oracle的changlog数据,并实时同步数据到下游Kafka。Flink SQL通过创建Kafka映射表并指定 format格式为debezium-json,然后通过Flink进行解析后直接插入到其他外部数据存储系统,例如图中外部数据源以Apache Iceberg为例。


下面详细解析一下数据同步过程。首先了解一下Debezium抽取的Oracle的change log的格式,以update为例,变更日志上记录了更新之前的数据和更新以后的数据,在Kafka下游的Flink接受到这样的数据以后,一条update操作记录就转变为了先delete、后insert两条记录。日志格式如下所示,该update操作的内容的name字段从tom更新为了jerry。

{
  "before": {          --更新之前的数据
    "id": 001,
    "name": "tom"
  },
  "after": {           --更新之后的数据
    "id": 001,
    "name": "jerry"
  },
  "source": {...},
  "op": "u",
  "ts_ms": 1589362330904,
  "transaction": null
}

其次再来看一下Flink SQL内部是如何处理update记录的。Flink在1.11版本支持了完整的changelog机制,对于每条数据本身只要是携带了相应增、删、改的标志,Flink就能识别这些数据,并对结果表做出相应的增、删、改的动作,如下图所示changlog数据流经过Flink解析,同步到下游Sink Database。

通过以上分析,基于Flink SQL CDC的数据同步有如下优点:

  • 业务解耦:无需入侵业务,和业务完全解耦,也就是业务端无感知数据同步的存在。

  • 性能消耗:业务数据库性能消耗小,数据同步延迟低。

  • 同步易用:使用SQL方式执行CDC同步任务,极大的降低使用维护门槛。

  • 数据完整:完整的数据库变更记录,不会丢失任何记录,Flink 自身支持 Exactly Once。

02-Apache Iceberg介绍

通常认为数据湖是一种支持存储多种原始数据格式、多种计算引擎、高效的元数据统一管理和海量统一数据存储。其中以Apache Iceberg为代表的表格式和Flink计算引擎组成的数据湖解决方案尤为亮眼。Flink社区方面也主动拥抱数据湖技术,当前Flink和Iceberg在数据入湖方面的集成度最高。

那么Apache Iceberg是什么呢?引用官网的定义是:Apache Iceberg is an open table format for huge analytic datasets。也就是Apache Iceberg是一个大规模数据分析的开放表格式。

Iceberg将数据分为元数据管理层和数据存储层。首先了解一下Iceberg在文件系统中的布局,第一部分是数据文件data files,用于存储具体业务数据,如下图中的data files文件。第二部分是表元数据文件(Metadata 文件),包含Snapshot文件、Manifest文件等。Snapshot表示当前操作的一个快照,每次commit都会生成一个快照,一个快照中包含多个Manifest,每个Manifest中记录了当前操作生成数据所对应的文件地址,也就是data files的地址。基于snapshot的管理方式,iceberg能够进行time travel(历史版本读取以及增量读取)。Iceberg文件系统设计特点如下图所示:

Iceberg的表格式设计具有如下特点:

  • ACID:不会读到不完整的commit数据,基于乐观锁实现,支持并发commit,支持Row-level delete,支持upsert操作。

  • 增量快照:Commit后的数据即可见,在Flink实时入湖场景下,数据可见根据checkpoint的时间间隔来确定的,增量形式也可回溯历史快照。

  • 开放的表格式:对于一个真正的开放表格式,支持多种数据存储格式,如:parquet、orc、avro等,支持多种计算引擎,如:Spark、Flink、Hive、Trino/Presto。

  • 流批接口支持:支持流式写入、批量写入,支持流式读取、批量读取。下文的测试中,主要测试了流式写入和批量读取的功能。

03-Flink CDC打通数据实时导入Iceberg实践

当前使用Flink最新版本1.12,支持CDC功能和更好的流批一体。Apache Iceberg最新版本0.11已经支持Flink API方式upsert,如果使用编写框架代码的方式使用该功能,无异于镜花水月,可望而不可及。本着SQL就是生产力的初衷,该测试使用最新Iceberg的master分支代码编译尝鲜,并对源码稍做修改,达到支持使用Flink SQL方式upsert。

先来了解一下什么是Row-Level Delete?该功能是指根据一个条件从一个数据集里面删除指定行。那么为什么这个功能那么重要呢?众所周知,大数据中的行级删除不同于传统数据库的更新和删除功能,在基于HDFS架构的文件系统上数据存储只支持数据的追加,为了在该构架下支持更新删除功能,删除操作演变成了一种标记删除,更新操作则是转变为先标记删除、后插入一条新数据。具体实现方式可以分为Copy on Write(COW)模式和Merge on Read(MOR)模式,其中Copy on Write模式可以保证下游的数据读具有最大的性能,而Merge on Read模式保证上游数据插入、更新、和删除的性能,减少传统Copy on Write模式下写放大问题。

在Apache Iceberg中目前实现的是基于Merge on Read模式实现的Row-Level Delete。在 Iceberg中MOR相关的功能是在Iceberg Table Spec Version 2: Row-level Deletes中进行实现的,V1是没有相关实现的。虽然当前Apache Iceberg 0.11版本不支持Flink SQL方式进行Row-Level Delete,但为了方便测试,通过对源码的修改支持Flink SQL方式。在不远的未来,Apache Iceberg 0.12版本将会对Row-Level Delete进行性能和稳定性的加强。

Flink SQL CDC和Apache Iceberg的架构设计和整合如何巧妙,不能局限于纸上谈兵,下面就实际操作一下,体验其功能的强大和带来的便捷。并且顺便体验一番流批一体,下面的离线查询和实时upsert入湖等均使用Flink SQL完成。

1,数据入湖环境准备

以Flink SQL CDC方式将实时数据导入数据湖的环境准备非常简单直观,因为Flink支持流批一体功能,所以实时导入数据湖的数据,也可以使用Flink SQL离线或实时进行查询。如下测试是使用Flink提供的sql-client完成的:

第一步,新建Kafka映射表,用于实时接收Topic中的changlog数据:

  id STRING,
  name STRING
  ) WITH (
  'connector' = 'kafka',
  'topic' = 'topic_name',
  'properties.bootstrap.servers' = 'localhost:9092',
  'properties.group.id' = 'testGroup',
  'scan.startup.mode' = 'earliest-offset',
  'format' = 'debezium-json'
);

第二步,新建iceberg结果表,用于存储实时入湖的数据:

CREATE TABLE iceberg_catalog.default.IcebergTable ( id STRING, name STRING );

注:

a)其中省略了配置catalog过程

b)当前iceberg 0.11默认创建表格式版本V1,通过代码更改版本为V2,以支持upsert方式导入数据湖

第三步,启动upsert方式实时入湖的Flink任务:

SET table.dynamic-table-options.enabled=true;

INSERT INTO IcebergTable /*+OPTIONS('equality-field-columns'='id')*/ SELECT * FROM KafkaTable;

注:当前iceberg 0.11不支持Flink SQL形式upsert,通过修改源码达到支持配置指定字段更新功能。

第四步,离线或者实时查询统计IcebergTable表中的数据行数:

a)离线方式

SET execution.type=batch;
SELECT COUNT(*) FROM IcebergTable;

b)实时方式

SET execution.type=streaming;
SELECT COUNT(*) FROM IcebergTable;

2,数据入湖速度测试

数据入湖速度测试会根据环境配置、参数配置、数据格式等不同有所不同,下面是列出主要配置和测试出的数据作为参考。

a)资源配置情况

TaskManager 内存4G,slot:1
Checkpoint 1分钟
测试数据列数 10列
测试数据行数 1000万
iceberg存储格式 parquet

b)测试数据情况

数据入湖分为append和upsert两种方式。append方式只能新增数据,不能对结果数据进行更新操作;upsert方式即能够对结果数据更新。

append方式使用场景是导入数据之前已经明确该表数据不需要更新,如离线数据导入数据湖的场景,append方式下导入数据速度如下:

INSERT INTO IcebergTable SELECT * FROM KafkaTable;

并行度1 12.2万/秒
并行度2 19.6万/秒
并行度4 28.3万/秒

update方式使用场景是既有插入的数据又有对之前插入数据的更新的场景,如数据库实时同步,upsert方式下导入数据速度,该方式需要指定在更新时以那个字段查找,类似于update语句中的where条件,一般设置为表的主键即可,如下:

INSERT INTO IcebergTable /*+OPTIONS('equality-field-columns'='id')*/ SELECT * FROM KafkaTable;

导入的数据 只有数据插入 只有数据更新
并行度1 3.2万/秒 2.9万/秒
并行度2 4.9万/秒 4.2万/秒
并行度4 6.1万/秒 5.1万/秒

c)结论

  • append方式导入速度远大于upsert导入数据速度。在使用的时候,如没有更新数据的场景时,则不需要upsert方式导入数据。

  • 导入速度随着并行度的增加而增加。

  • upsert方式数据的插入和更新速度相差不大,主要得益于MOR原因。

3,数据入湖任务运维

在实际使用过程中,默认配置下是不能够长期稳定的运行的,一个实时数据导入iceberg表的任务,需要通过至少下述四点进行维护,才能使Iceberg表的入湖和查询性能保持稳定。

a)压缩小文件

Flink从Kafka消费的数据以checkpoint方式提交到Iceberg表,数据文件使用的是parquet格式,这种格式无法追加,而流式数据又不能等候太长时间,所以会不断commit提交数据产生小文件。目前Iceberg提供了一个批任务action来压缩小文件,需要定期周期性调用进行小文件的压缩功能。示例代码如下:

Table table = ... 
Actions.forTable(table)
.rewriteDataFiles()
    .targetSizeInBytes(100 * 1024 * 1024) // 100 MB
    .execute();

b)快照过期处理

iceberg本身的架构设计决定了,对于实时入湖场景,会产生大量的snapshot文件,快照过期策略是通过额外的定时任务周期执行,过期snapshot文件和过期数据文件均会被删除。如果实际使用场景不需要time travel功能,则可以保留较少的snapshot文件。

Table table = ... 
Actions.forTable(table)
    .expireSnapshots()
.expireOlderThan(System.currentTimeMillis())
.retainLast(5)
    .execute();

c)清理orphan文件

orphan文件的产生是由于正常或者异常的数据写入但是未提交导致的,长时间积累会产生大量脱离元数据的孤立数据文件,所以也需要类似JVM的垃圾回收一样,周期性清理这些文件。该功能不需要频繁运行,设置为3-5天运行一次即可。

Table table = ...
Actions.forTable(table)
    .removeOrphanFiles()
    .execute();

d)删除元数据文件

  • 每次提交snapshot均会自动产生一个新的metadata文件,实时数据入库会频繁的产生大量metadata文件,需要通过如下配置达到自动删除metadata文件的效果。

Property Description
write.metadata.delete-after-commit.enabled Whether to delete old metadata files after each table commit
write.metadata.previous-versions-max The number of old metadata files to keep

4,数据入湖问题讨论

这里主要讨论数据一致性和顺序性问题。

Q1: 程序BUG或者任务重启等导致数据传输中断,如何保证数据的一致性呢?

Answer:数据一致保证通过两个方面实现,借助Flink实现的exactly once语义和故障恢复能力,实现数据严格一致性。借助Iceberg ACID能力来隔离写入对分析任务的不利影响。

Q2:数据入湖否可保证全局顺序性插入和更新?

Answer:不可以全局保证数据生产和数据消费的顺序性,但是可以保证同一条数据的插入和更新的顺序性。首先数据抽取的时候是单线程的,然后分发到Kafka的各个partition中,此时同一个key的变更数据打入到同一个Kafka的分区里面,Flink读取的时候也能保证顺序性消费每个分区中的数据,进而保证同一个key的插入和更新的顺序性。

04-未来规划

新的技术最终是要落地才能发挥其内在价值的,针对在实践应用中面临的纷繁复杂的数据,结合流计算技术Flink、表格式Iceberg,未来落地规划主要集中在两个方面,一是Iceberg集成到本行的实时计算平台中,解决易用性的问题;二是基于Iceberg,构建准实时数仓进行探索和落地。

1,整合Iceberg到实时计算平台

目前,我所负责的实时计算平台是一个基于SQL的高性能实时大数据处理平台,该平台彻底规避繁重的底层流计算处理逻辑、繁琐的提交过程等,为用户打造一个只需关注实时计算逻辑的平台,助力企业向实时化、智能化大数据转型。

实时计算平台未来将会整合Apache Iceberg数据源,用户可以在界面配置Flink SQL任务,该任务以upsert方式实时解析changlog并导入到数据湖中。并增加小文件监控、定时任务压缩小文件、清理过期数据等功能。

2,准实时数仓探索

本文对数据实时入湖从原理和实战做了比较多的阐述,在完成实时数据入湖SQL化的功能以后,入湖后的数据有哪些场景的使用呢?下一个目标当然是入湖的数据分析实时化。比较多的讨论是关于实时数据湖的探索,结合所在企业数据特点探索适合落地的实时数据分析场景成为当务之急。

随着数据量的持续增大,和业务对时效性的严苛要求,基于Apache Flink和Apache Iceberg构建准实时数仓愈发重要和迫切,作为实时数仓的两大核心组件,可以缩短数据导入、方便数据行级变更、支持数据流式读取等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flink CDC 详述实时数据湖 的相关文章

  • 【Linux】记一次系统异常宕机分析过程(内存异常)(业务Kubernetes)

    问题现象 最近遇到不同的业务正常运行时出现了宕机 物理机 虚拟机 查看日志是指向的怀疑是内存问题 业务都是部署的Kubernetes 容器集群管理系统 初步日志排查 message日志信息反馈 下面是虚拟机的日志信息 这些日志重复循环到问题
  • 【实战】“TED”演讲——可视化分析

    TED technology entertainment design 旨在将技术 娱乐 设计领域的专家聚集在一起的非盈利性组织 口号 Ideas worth spreading 值得传播的思想 每年2 3月 会召集杰出人物 将工作和研究提
  • Python项目代码结构详解

    目录结构组织方式 简要解释一下 bin 存放项目的一些可执行文件 当然你可以起名script 之类的也行 luffy 存放项目的所有源代码 1 源代码中的所有模块 包都应该放在此目录 不要置于顶层目录 2 其子目录tests 存放单元测试代
  • 2023,你了解Kafka吗?深入详解

    消息队列的核心价值 解耦合 异步处理 例如电商平台 秒杀活动 一般流程会分为 1 风险控制 2 库存锁定 3 生成订单 4 短信通知 5 更新数据 通过消息系统将秒杀活动业务拆分开 将不急需处理的业务放在后面慢慢处理 流程改为 1 风险控制
  • 用户画像技术干货

    1 用户画像是什么 在互联网步入大数据时代后 用户行为给企业的产品和服务带来了一系列的改变和重塑 其中最大的变化在于 用户的一切行为在企业面前是可 追溯 分析 的 企业内保存了大量的原始数据和各种业务数据 这是企业经营活动的真实记录 如何更
  • Apache Flink-使用FlinkSQL开发应用

    这是我毕业设计项目中的一个模块 后面会提供源码 1 数据链路图 这个模块做的是实时统计用户每10分钟内的搜索次数 也就是10分钟级别的搜索频率 用户搜索时 服务端会把搜索数据发送的Kafka中 直接看Flink的部分吧 这部分做的事情就是消
  • 数仓分层、设计、建模、架构

    一 数仓分层误区 数仓层内部的划分不是为了分层而分层 分层是为了解决 ETL 任务及工作流的组织 数据的流向 读写权限的控制 不同需求的满足等各类问题 业界较为通行的做法将整个数仓层又划分成了 DWD DWT DWS DIM DM等很多层
  • 运用Prometheus监控Flink

    1 为什么选择Prometheus 2 使用自动发现的配置方式有什么优点 3 如何提交作业 为什么选择Prometheus 随着深入地了解Prometheus 你会发现一些非常好的功能 服务发现使配置更加容易 Prometheus支持con
  • 2023-DataWorks数仓开发手册收藏版

    DataWorks开发规范 1 数仓基本概念 1 4 1 ods数据源层表命名规范 1 4 2 dim维表层表命名规范 1 4 3 dwd数据明细层表命名规范 1 4 3 dws数据明细层表命名规范 1 4 4 ads数据应用层表命名规范
  • kaggle(04)---avazu_ctr_predictor(baseline)

    比赛的目的 通过分析网上的系统日志和用户行为信息 来预测某些网页上项目的点击率 是一个二分类的问题 只需要预测出用户是否点击即可 最好能够输出某个概率 比如 用户点击某个广告的概率 比赛官网 文件信息 train Training set
  • 容器化部署zabbix

    一 创建docker compose yml文件 首先创建一份docker compose yml文件 使用docker compose进行容器的编排 mkdri zabbix 在根目录创建zabbix文件 cd zabbix touch
  • 2023-数仓建设规范指南

    一 数据模型架构原则 1 数仓分层原则 优秀可靠的数仓体系 往往需要清晰的数据分层结构 即要保证数据层的稳定又要屏蔽对下游的影响 并且要避免链路过长 那么问题来了 一直在讲数仓要分层 那数仓分几层最好 目前市场上主流的分层方式眼花缭乱 不过
  • Apache InLong百万亿级数据流处理

    全球最大的开源软件基金会Apache软件基金会正式宣布 Apache InLong成功从Apache孵化器毕业成为社区顶级项目 这个最初由腾讯捐献给Apache社区的一站式海量数据集成框架 可以为大数据开发者提供百万亿级数据流高性能处理能力
  • JVisualVM简介与内存泄漏实战分析

    一 JVisualVM能做什么 VisualVM 是Netbeans的profile子项目 已在JDK6 0 update 7 中自带 java启动时不需要特定参数 监控工具在bin jvisualvm exe 能够监控线程 内存情况 查看
  • 解决 An attempt was made to call a method that does not exist. 问题详解

    哈喽大家好 我是阿Q 今天在开发代码的过程中 由于手抖 不知道引入了什么包依赖 导致项目启动一直报错 特写本文来记录下解决问题的经过 文章目录 问题描述 报错信息如下 报错描述 解决方法 总结 有想赚点外块 技术交流的朋友 欢迎来撩 问题描
  • 【实战】淘宝电商用户行为分析——SQL

    目录 一 项目背景 1 1分析目的 1 2分析思路 二 数据来源 清洗 2 1数据集介绍 2 2数据清洗 2 2 1 检查是否存在重复值 2 2 2 检查是否存在缺失值 2 2 3 一致化处理 对timestamp 2 2 4异常值处理 时
  • SuperSocket实战手把手教程:一个完整的SocketServer项目

    SuperSocket系列教程 1 SuperSocket基础 一 基本概念 2 SuperSocket实战手把手教程 一个完整的SocketServer项目 目录 一 项目场景 1 Visual Studio新建项目 2 自定义自己服务器
  • Apache Flink Checkpoint 应用实践

    Checkpoint 与 state 的关系 Checkpoint 是从 source 触发到下游所有节点完成的一次全局操作 下图可以有一个对 Checkpoint 的直观感受 红框里面可以看到一共触发了 569K 次 Checkpoint
  • ClickHouse进阶(十六):clickhouse优化-表优化

    进入正文前 感谢宝子们订阅专题 点赞 评论 收藏 关注IT贫道 获取高质量博客内容 个人主页 含各种IT体系技术 IT贫道 大数据OLAP体系技术栈 Apache Doris Kerberos安全认证 CSDN博客 订阅 拥抱独家专题 你的
  • 使用Minitab解决Excel的限制问题

    前两天 当我在做数据转置以期获得更好分析图形的时候 我碰到了传说中excel的限制 如图 在解决这个问题的过程中 我发现了用来做数据分析 比excel更好的工具Minitab 打开minitab 把纪录数据的Excel表以File gt O

随机推荐

  • 本机php环境搭建教程:windows环境下wampserver的配置教程——超级详细

    对于初做PHP网站的朋友来说 第一步肯定是希望在自己电脑是搭建PHP环境 省去空间和上传的麻烦 但搭建 环境也不是件容易的事情 特别是对于新手同学来说 因此在这里跟大家介绍我作为一名新手在使用的方便好用 的PHP服务器架设软件 那就是wam
  • 残差图

    残差图 残差图是以某种残差为纵坐标 以其他适宜的两位横坐标的散点图 这里横坐标有多种选择 最常见的选择是 因素的拟合值 某变量的观察值 在因变量的观察值 Y1 Y2 Yn Y 1 Y 2
  • JFinal框架学习------整合bootstrap前端框架,实现简单的增删改查功能

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Bootstrap 来自 Twitter 是目前最受欢迎的前端框架 Bootstrap 是基于 HTML CSS JAVASCRIPT 的 它简洁灵活 使得 Web 开发更
  • CTFHUB之Web安全—信息泄露

    本模块有十道题 目录遍历 phpinfo 备份文件下载 4道 网站源码 bak文件 vim缓存 DS Store Git泄露 SVN泄露 HG泄露 1 目录遍历 直接一个个目录翻 直到找到一个flag的文件 2 phpinfo 点进去一脸懵
  • Python:常用的数据类型

    目录 1 Number 数字类型 1 1 支持四种不同的数值类型 1 2 数字类型转换 1 3 数字运算 2 bool 布尔类型 2 1bool 的使用 2 2布尔类型运算 3 String 字符串 3 1字符串创建 3 2 访问字符串中的
  • HL7基础知识

    HL7消息由事件触发 每个事件对应一个消息 消息由段组成 段由字段组成 字段由组件组成 组件由子组件组成 有些字段是可以重复的 例如病人的地址 号码都是可以重复的字段 字段分割符 组件分隔符 子组件分隔符 用来连接重复的组件 一个HL7消息
  • 漏洞“Apache Zookeeper 授权问题漏洞(CVE-2019-0201)”详情

    扫描漏洞详情如下 目录 1 漏洞详情 漏洞名称 Apache Zookeeper 授权问题漏洞 CVE 2019 0201 发现日期 2019 05 23 CVSS评分 5 9 漏洞描述 Apache Zookeeper是美国阿帕奇 Apa
  • 华为OD机试 - TLV解码(Java)

    题目描述 TLV编码是按 Tag Length Value 格式进行编码的 一段码流中的信元用Tag标识 Tag在码流中唯一不重复 Length表示信元Value的长度 Value表示信元的值 码流以某信元的Tag开头 Tag固定占一个字节
  • 二、RabbitMQ常用交换器

    RabbitMQ常用交换器 direct 直接交换器 主要方式 队列与交换器通过路由绑定 队列和交换器单个绑定 队列和交换器的多重绑定 绑定多个路由 队列绑定到交换器上时 是允许绑定多个路由键的 也就是多重绑定 一个连接多个信道 指通过Ru
  • 斐波那契序列与黄金分割比

    Fibonacci Sequence 0 1 1 2 3 5 8 13 21 34 55 fib 0 1 1 2 3 5 8 13 21 34 55 斐波那契递推公式 Python打印斐波那契递增序列 方法一 模拟 n int input
  • qt发布后 mysql数据库_QT连接MySql数据库,以及配置git上传到github

    前言 最近想把自己写的一个C 项目结合所学的Qt mysql结合起来进行完善 前期的一些准备工作记录如下 如有侵权 请联系删除 QT下载链接 我的下载版本为5 9 MySql下载链接 我的下载版本为5 7 MySql的安装配置 1 解压 这
  • ElasticSearch操作命令大全

    创建索引和映射 1 手动创建索引 curl XPUT localhost 9200 new index 2 获取映射 curl localhost 9200 get together mapping group pretty 定义新映射 c
  • 机器学习——线性回归与决策树实验(附效果以及完整代码)(数据集、测试集开源)

    机器学习实验 实验名称 实验一 线性回归与决策树 一 实验目的 1 掌握线性回归算法和决策树算法 ID3 的原理 2 学会线性回归算法和决策树算法 ID3 的实现和使用方法 二 实验内容 本次实验为第一次实验 要求完成本次实验所有内容 具体
  • 接口文档参考示例

    接口文档参考示例 用户登录 POST api login 接口说明 登录成功后 会生成或更新用户令牌 token 使用帮助 测试数据库中预设了四个可供使用的账号 如下表所示 Untitled 请求参数 Untitled 响应信息 登录成功
  • 湖南株洲三维扫描检测CNC机加工零件截面检测弧度测量-CASAIM中科广电

    自工业时代开始以来 机械加工及零部件产业已经涵盖了各大电器零部件 汽车零部件 建筑机械零部件 航空航天零部件 海洋工程零部件等领域 涉及多种机械机床及工具仪器的制造 零件在加工过程中 受制于加工工艺等各方面的因素 难免会产生加工误差 会直接
  • Ubuntu系统中使用VSCode(Visual Studio Code)

    一 软件下载安装 去官网下载文件 https code visualstudio com docs dv linux64 也可以用ubuntu自带的软件商店下载 本帖就采用这种方法 案例采用ubuntu16 04 操作如下图 首先单击APP
  • maven 项目 junit步骤。

    pom xml添加对应的jar包
  • 自动化测试的转行

    什么是自动化测 做测试好几年了 真正学习和实践自动化测试一年 自我感觉这一个年中收获许多 一直想动笔写一篇文章分享自动化测试实践中的一些经验 终于决定花点时间来做这件事儿 首先理清自动化测试的概念 广义上来讲 自动化包括一切通过工具 程序
  • CSS——层级

    层级问题 选中的盒子显示的效果并不完整 右边的边框并没有显示红色 原因是其右边的盒子压了它的边框
  • Flink CDC 详述实时数据湖

    在构建实时数仓的过程中 如何快速 正确的同步业务数据是最先面临的问题 本文主要讨论一下如何使用实时处理引擎Flink和数据湖Apache Iceberg两种技术 来解决业务数据实时入湖相关的问题 01 Flink CDC介绍 CDC全称是C