Apache Paimon 流式数据湖 V 0.4 与后续展望

news2025/2/25 11:22:06

摘要:本文整理自阿里云开源大数据表存储团队负责人、阿里巴巴高级技术专家,Apache Flink PMC,Paimon PPMC 李劲松(之信)在 Apache Paimon Meetup 的分享。本篇内容主要分为四个部分:

    1. 湖存储上的难点

    2. 深入 Apache Paimon 0.4

    3. 社会应用实践

    4. 后续规划

Tips:点击「阅读原文」免费领取 5000CU*小时 Flink 云资源

今年 6 月份 Paimon 0.4 刚刚发布,它是一个非常具有竞争力的版本,也是进入 Apache 孵化器之后的第一个版本。

01

湖存储上的难点

a4749b581e6fa547cdfe8eebbaf34cc5.jpeg

数据湖的新场景主要有以下三个:

  • 第一个场景,实时数据入湖。数据可以实时更新来自数据库的 CDC 数据,实时入湖到数据湖中,让数据能被多种引擎尽快分析。

  • 第二个场景,实时字段打宽。实时打宽维表的字段,提供给下游查询及流读。

  • 第三个场景,实时数据流读。提供消息队列体验的流读,并能根据主键生成 Changelog。

51a115b27c1aa1afa51c85000089dd98.jpeg

入湖的痛点有以下三点:

  • 资源消耗与实时性:更新吞吐差,资源消耗巨大;COW 更新差,MOR 查询差,难以选择反压、反压、还是反压。

  • 数据湖需管理的事情多:管理 Compaction;清理历史小文件;清理过期分区。

  • Schema Evolution:上游加列,湖存储怎么办?重启同步作业?一堆小表耗资源且耗精力。

a6b06a814a4849552186e78afab71f5d.jpeg

打宽表的痛点有以下三点:

  • 资源消耗与实时性:吞吐和资源同样重要。

  • 输入多样性:CDC 输入;输入可能是乱序的。

  • 读取:希望可以足够高效,有 Project pushdown,且可以流读。

2ef95f527ad479e6e3d9dda21fb13255.jpeg

流读的痛点有以下四点:

  • 全增量一体流读:先读全量再接增量,完整的流,而不是只读增量。

  • Changelog 生成:有些场景要低成本;有些场景要低时延。

  • FileNotFound:数据湖文件清理和流读的矛盾。

  • Lookup Join:支持 Flink 的 Lookup Join。

4146993da650e99903e1466045762659.jpeg

Apache Paimon 是一个专门为 CDC 处理、流计算而生的数据湖。希望带来你舒服、自动的湖上流处理体验。

从官网上也可以看到,Apache Paimon 支持高速的数据写入,Changelog 的生成以及高效的实时查询。


02

深入 Apache Paimon 0.4

1bd98bc8a5ae2742862eec92a21d136a.jpeg

Paimon 的整体架构是一个数据湖 build 在 Data Lake (HDFS/OSS/S3),它的所有 Meta 和数据都存储在这些数据湖上,它是一个数据湖格式。这个数据湖的 Meta 也可以同步到 Hive Metastore 和阿里云的 Data Lake Formation 上,做一个统一的、数据的、表格式的管理。然后数据湖通过把 Changelog 同步到入湖中,再同步 Kafka。

现在 Paimon 0.4 提供了 Flink CDC 的 Schema Evolution 同步,也提供了 MySQL 的整库同步,后续 Paimon 0.5 会支持 Kafka 的 CDC 数据同步。此外,我们还可以通过 Flink 将 Append 的 log data 通过批写的方式写入 Paimon 中,也可以通过宽表合并的方式写入 Paimon 中。

在读端,Paimon 可以支持来自各种引擎的批读和 Ad-Hoc 查询,比如 Spark、Trino、StarRocks 等,也可以通过 Flink 来全增量一体的流读它的 Changelog,而且流读是可以提供数据顺序保障的,也可以通过 Flink 来 Lookup Join。

87b8540824e9a397dc76aae3b00b9fdd.jpeg

Paimon 是数据湖+LSM 的架构,下面和大家分享一下为什么 Paimon 需要 LSM。

LSM 是一个面向写友好的格式,它在写入的时候可以看到整个流程,但它不用理解具体的流程,大致的思路是,写入发生在 Flink Sink 中,当检查点到达时,它会对内存中的数据进行排序,并将记录刷新到 Level0 文件中。

得益于 LSM 这种原生异步的 Minor Compaction,它可以通过异步 Compaction 落到最下层,也可以在上层就发生一些 Minor 的 Compaction 和 Minor 的合并,这样压缩之后它可以保持 LSM 不会有太多的 level。保证了读取 merge read 的性能,且不会带来很大的写放大。

另外,Flink Sink 会自动清理过期的快照和文件,还可以配置分区的清理策略。所以整个 Paimon 提供了吞吐大的 Append 写,消耗低的局部 Compaction,全自动的清理以及有序的合并。所以它的写吞吐很大,merge read 不会太慢。

dd115a3ffe1782c006bc4228f37ff7c7.jpeg

基于 Paimon 的设计,我们一起看一下来自同程旅行的生产实践,对比原有 Hudi 表带来了的收益。

  • 入湖的资源节省了 30%-40%。

  • 写入性能提升了 3 倍。

  • 部分查询的性能提升了 7 倍左右。

60c8332bff65e1d94fdcaecd7eb72e50.jpeg  

刚刚分享了 Paimon CDC 数据的入湖在吞吐方面的一些能力,下面介绍一下 Paimon 在 CDC 入湖上,给用户带来的一些比较方便的入湖工具。

比如在 Paimon 0.4 中,我们提供了 Flink CDC 的入湖。原生集成的 Flink CDC 提供 DataStream 作业,通过 Flink CDC 把 Changelog 的数据通过 Schema Evolution 的方式写入 Paimon。

表同步,它可以自动的管理表结构变更,增加列、删除列、变更类型、重命名列等等。也可以通过在表同步的定义,新增计算列、定义分区列、定义主键,以及做分库分表的同步。

此外,Paimon CDC 入湖还提供了整库同步,可以让整个库的表全部同步到 Paimon 中,你不用担心 OOM 或者容易挂掉。一个作业同步过来,可以尽可能减少同步的资源。还支持 INCLUDING、EXCLUDING,还支持表名前后缀,自动跳过失败表,动态新增表。

在 Paimon 0.5 中,我们提供了 Kafka 的同步。不仅可以通过 Flink CDC 同步进来,Kafka 里面的 CDC 数据也可以同步进来。你可以把你的数据库,TIDB、MySQL、Oracle 写到 Kafka 中,然后以 Schema Evolution 的同步,同步到 Paimon 中。

可以看到同步入湖非常简单,使用 Paimon 的 Flink action 就可以启动整个同步的作业。甚至 Paimon 还提供 CDC 的 DataStream 的 API,你可以直接调我们已经集成好的作业来同步数据,也可以通过 CDC 的 DataStream 的 API 编写自己的 Flink 流的 Schema Evolution 的 Pipeline。

0146f80aeee88b930f13713fea3ea744.jpeg  

Paimon 支持定义 Partial-update,你可以定义 Partial-update Engine。这样就可以通过不同的留写入不同的字段,后面可以批读,甚至 Paimon 也提供了流读,只要声明 Changelog Producer 就可以流读合并后的数据,它的查询也支持列裁剪的高效查询。

此外,Partial-update 的输入可能是乱序的,所以在 Partial-update 表,也可以定义 Sequence Field 处理乱序的情况。在 Paimon 0.5 中引入了 Sequence Group 的概念,为了解决每个流不同的乱序。如果它们共用一个版本字段,某个流更新之后有可能会导致另外一个流的最新版本不能更新。

举个例子,上游有两个表要更新,所以要定义两个 Sequence Group,这个 Sequence Group 的字段可以是不同的版本字段。这样不同的流只要更新自己的版本就可以了,不管两边多不对齐,它最终的数据都能被正确的更新上。

eb0cc7e095b6df5605ebfcdb1548b584.jpeg  

在 Paimon 中,它的流读是它的核心之一,这也是它区别其他数据湖的一个关键点所在。Paimon 可以流读原始数据,你可以设置 changelog-producer=input。如果你的数据是一个完整的 CDC,就可以运用这种模式,它是最高效,也是消耗资源最少的。

如果你的流不是一个完整的 CDC,比如 Partial-update 这种输入。所以就要求下游的流读要生成一个变更日志,在 Paimon 这里不仅支持生成变更日志,还有两种非常灵活的模式,Lookup 模式和 Full-Compaction 模式。

Lookup 模式可以在写入的时候就动态 Lookup 高层的文件,查到最新的数据,合并最新的 Changelog 输出到下游。这是最快的,也是我们推荐 1-3 分钟时延的,但它的成本会高一些。

如果一些作业成本要求很低,且能接受更大延时,你可以用 Full-Compaction 模式。它在异步的 Full-Compaction 的时候,才会产生对应的 Changelog,可以把 Full-Compaction 的周期调度时间设置的更大,比如 10 分钟。它的好处是代价更低,但时延更高。

刚刚我们提到湖存储和流读有一个矛盾,它就是 FileNotFound。因为流存储要不断清理 snapshot,这样它的小文件才会少。但流读如果依赖一个很早 snapshot,一旦这个流作业挂了,它读的那个 snapshot 就会被清理,它就完全不能恢复了。

针对于问题,Paimon 提出了 Consumer-ID,它有点类似于 Kafka 的 Group-ID。它可以保证作业挂了重启之后,它读的那个 snapshot 不会被清理。

efb401c7f8d0483eb1660fe944f4fa72.jpeg  

Paimon 0.4 在生态中也有比较大的进步,如上图所示。

最开始在 Paimon 中只是支持 Flink,它作为 Flink Table Store 支持 Flink 完整的生态和用法。

在 Paimon 0.4 中支持的更多了。比如在 Spark 中支持了 Batch Read、Batch Write,还可以在 Spark 中 Create Table、Alter Table;在 Hive 中支持了 Batch Reader、Batch Write、Create Table 等等;在 Trino 中支持了 Create Table、Alter Table 等等功能。

我们有两个引擎是集成比较完善的,一个是 Flink,另外一个是 Spark。我们希望它所有的功能,批读、批写、创建表、修改 Meta 等命令,在 Flink 和 Spark 中都支持的比较好。其次,我们希望其他引擎都能支持读 Paimon,甚至更多的操作,比如 Create Table、Write Table 等等。

除了这些传统的处理引擎,StarRocks、Doris、Seatunnel 也集成了 Paimon,整体的代码基本已经 ready 了,处于即将发布的状态。阿里云上的 MaxCompute、Hologres,网易的 Arctic,也已经在研发的路上了。

03

社会应用实践

009b86c13f6486f682f4a8cdfcb938a4.jpeg  

目前开源社区主要的使用和参与者包括,阿里云、字节跳动、同程旅行、B 站、中原银行、米哈游、汽车之家等等企业。

接下来一起看一下,大家都是怎么用 Paimon 的。

881a3cbc2b5759855addd4ae586493a9.jpeg  

在阿里云计算平台,Paimon 是数据湖的一号位,希望阿里云计算平台的所有计算全部集成到 Paimon 中,集成 Paimon、读 Paimon。最好的集成是实时计算 Flink 版平台,它是 Flink 以及开源大数据平台 E-MapReduce 里面,希望替代 Hudi 成为实时入湖的首选。

上图是 Apache Paimon,可以看到我们通过阿里云的 Flink 实时计算能入湖,能 CTAS 入湖,能通过阿里云实时计算 Flink 流读。也希望 Paimon 的数据能被 MaxCompute、Hologres 查询,也能在开源大数据平台 E-MapReduce 中融入的更好。

d8d2d75be607ae66c66da1a2d4ba9360.jpeg

在字节跳动,工程师们使用 Paimon+Flink 作为血缘管理以及一致性查询的 Streaming Warehouse 生产体系。如上图所示,业务数据通过 Streaming ETL,类似于 Streaming materialize view 类似的概念,落到了 Streaming Warehouse 中。这样所有的 Paimon 表都能通过一致性的 Query 查询。

c2fb26d75521eafb1256118a3796fa7f.jpeg  

在同程旅行,引入 Paimon 主要优化了原有 Hudi 的近实时数仓。

  • 在实时写入 ODS 层场景,Paimon 大概有 114+ 的作业;最大 Upsert 日增量 2000 万+;最大的表总量 90 亿+。

  • 在局部更新场景,Paimon 有 10+的作业;应用了真·局部更新 (Sequence-Group) 的概念。

  • 在流读\增量读场景,Paimon 有 20+ 流式增量读的作业;10+ 批处理小时级增量读的作业。

b9d4db3546505881ca6df71c88918cf7.jpeg  

中原银行在探索流式数仓;米哈游也在探索流批一体技术;Bilibili 在攻坚 AI 方向,考虑 Partial-Update 的场景;尘锋信息在探索 TB 级数据入湖,建设了 Flink 流批一体 + Paimon 的流批一体数仓等等。

04

后续规划

bcaa62f1d76cb7753d92aa905fd6c22d.jpeg  

我们希望能达到这样一个 Streaming LakeHouse。数据通过非常方便的入湖能入到 Paimon 中,也能通过 Paimon 的流读和批读建立 Streaming 的 Pipeline。同时,Paimon 也应该有一个非常好的生态,能被各种引擎查询。这就是 Paimon+Flink 往后走的一个大方向。

51b829bfa4a9b38823fc4a4eae335f9d.jpeg

打造一个易用的、简单的 Streaming LakeHouse,大致有以下三个方向。

第一个方向:

  • 在 CDC 处理中会有更多的 CDC 入湖。比如刚刚提到的 Kafka 的入湖,应该是更简单、更自然、更自动的。

  • 目前 Paimon 还需要定一个 Bucket 个数。太小的 Bucket 性能比较差,数据量大了之后,吞吐就下来了。而太大的 Bucket,小文件又很多。虽然一个 Bucket 里是一个 LSM,它已经有比较好的吞吐,但你还是要调优。所以在 Paimon 0.5 中会提供一个动态的 Bucket,希望达到的状态是全自动的。

  • Create tag,希望 Paimon 实时入湖之后,每天能打出一个 tag 给离线生产用。

第二个方向:Append-Only 处理增强。Paimon 之前的 Append-Only 需要定义 Bucket,这是一个非常难定义的概念。所以后面 Paimon 应该支持真正的离线表,应该是没有 Bucket,且离线表的写入应该也包含小文件合并,并这也符合 Paimon 全自动的概念。

第三个方向:除了 StarRocks 的生态的对接,我们希望将 Spark 打造成第二个像 Paimon 一样集成非常好的引擎,Spark 读和写的能力都应该很好,甚至通过 Spark+Paimon,就能组成一个完整的数据湖。

58fb23f79d9dc83a98a14b501fb56301.jpeg  

接下来回顾一下 Paimon 的发展历程。2021 年在 Flink 社区讨论;2022 年 5 月发布了 Flink Table Store 的第一个版本;2023 年 1 月发布了 0.3,它是 Paimon 的一个生产可用的版本;3 月进入了孵化器,改名 Apache Paimon。2023 年 6 月,发布了 Paimon 0.4。

未来我们希望 CDC 实时数据湖完全成熟,Append 离线表生产可用,生态全面对接,Spark 进入成熟状态。

Q&A

问:CDC 写 Paimon 表 如果 binlog 流量每秒 3000records+全量初始化如何优化下。目前测试看checkpoint 经常失败?

答:关键还是看性能瓶颈在哪里,是否有内存问题,最后看下 Jstack。

问:能不能动态修改表结构呢?

答:能啊,Spark 或者 Flink 1.17 都可。

问:0.5 大概什么时候发布?

答:8 月份左右。

问:请问流读的延迟怎么样?

答:最小 checkpoint 延时,也就是 1 分钟。

问:如何方便的从 Hudi 迁移到 Paimon 上?

答:能,现在推出的 SparkGenericCatalog 也是为了 Hudi 和 Paimon 表共存。

问:可以展开讲讲 Changelog 的 Lookup 模式吗?

答:可以看看官网 

https://paimon.apache.org/docs/master/concepts/primary-key-table/#lookup

问:Bucket 是很重要的参数吗,怎么调优?

答:对,根据数据量实际跑下看看,目前最新也支持了动态 Bucket。

问:存储一段时间后,Bucket 可手动调整么?调整后之前的数据回重分么?

答:详见官网 Rescale Bucket

https://paimon.apache.org/docs/master/maintenance/rescale-bucket/

问:实时数据乱序的情况下,Paimon 的 Partial-update 怎样避免旧数据覆盖新数据呢,有没有类似 sequence 列的实现?

答:有,详见官网 sequence-field

https://paimon.apache.org/docs/master/concepts/primary-key-table/#sequence-field

问:压缩时,是不是对读写的性能影响很大?

答:对写有影响,是读写的一个 tradeoff。

请关注 Paimon

流式数据湖的发展需要你的支持:

  • 关注微信公众号:Apache Paimon,了解行业实践与最新动态

  • 进入 Paimon 交流钉钉群:搜索 10880001919,讨论技术并得到实时的支持

  • Github https://github.com/apache/incubator-paimon 点赞支持

活动视频回顾 & PPT 获取


PC 端

建议前往 Apache Flink 学习网

https://flink-learning.org.cn/activity/detail/f7aeb46d723678642e1a96d780d78baa

移动端

视频回顾/PPT 下载:关注 Apache Flink 公众号/ Apache Paimon 公众号,回复 0615

往期精选

7fac179db7fa74e9a7bba2a076aeb228.png

a140a24b1cefe3c1be477745f4226775.png

633c6ebf5b1a39727a06474efdccd03b.jpeg

0812dfba4869dd87ec84b659c84c867c.png

467fbbcf9f2ddc51f32b2ec626044563.png


▼ Apache Paimon Meetup 活动回顾」扫下方图片观看全场直播回放▼

c93111d5f17fc3826d6c4d3a97f5996b.jpeg

▼ 关注「Apache Flink」,获取更多技术干货 ▼

c640306fc3c22d920210e7da5366a40b.png

 edebc665dfe9b4771fedede10c50bdde.gif  点击「阅读原文」,免费领取 5000CU*小时 Flink 云资源

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

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

相关文章

“海纳“二维码生成器(绿色版本,离线无需安装)

介绍一款所见即所得的二维码生成器:"海纳"二维码生成器,免费、离线,简单、快捷。 主要功能: 图形界面,所见即所得;支持数字、字符、汉字等生成二维码;支持网址、邮件地址&#xff1…

Nodejs+vue+elementui汽车租赁管理系统_1ma2x

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 前端nodejsvueelementui, 课题主要分为三大模块:即管理员模块、用户模块和普通管理员模块,主要功能包括&#…

EMC传导干扰滤波电路设计

1.EMC概念 2.EMC 传导干扰详解 EMC传导滤波电路的设计--传导干扰详解 3.EMC 传导干扰的测量方法 4.EMC 滤波电路设计 5.浪涌抑制电路设计 6.开关电源的安全要求 7.当前开关电源灯的应用

恒盛策略:怎样看k线图实图详解如何看懂k线图?

K线图是股票剖析中常用的一种图表,它能够反映一段时间内股票价格的变化状况,对于股票投资者来说非常重要。但是,由于k线图并不是很好理解,很多投资者并不知道怎样看懂它。那么,咱们就从多个视点来看看怎样看k线图实图&…

echarts barEchart柱状图边框、透明、文字靠左展示

效果一 先上效果图 说明: 给柱状图加上 边框,改变柱状图颜色并透明,改变 X,Y轴字体颜色,改变 轴线颜色,将所有的轴线全都改成一致效果 echarts 的代码 javascript const renderBarEcharts (ele: HTMLDivElement) >…

CM11 链表分割 题解

题目描述: 链表分割_牛客题霸_牛客网 (nowcoder.com) 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 题解…

交换机的堆叠技术

目录 一、堆叠的优势 1、提高可靠性 2、简化组网 3、简化管理 4、强大的网络拓展 二、堆叠的方式 1、堆叠卡堆叠 2、业务口堆叠 3、堆叠卡和业务卡堆叠的优缺点 三、堆叠的原理 1、角色 2、单机堆叠 3、堆叠ID 4、堆叠的优先级 5、堆叠的建立过程 1&#xff09…

13.1.2 对CIFAR-10数据集使用图像增广来训练ResNet

%matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2l import time使用CIFAR-10数据集,而不是我们之前使用的Fashion-MNIST数据集。这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化,而CIFAR-10数据集中对象的颜色…

探索未知,即刻搭建AI原生应用!WAVE SUMMIT Workshop等你来参加

你是否希望掌握大模型开发的秘诀?你是否渴望得到实践操作的机会?如果你的心中充满热情和期待,那么,WAVE SUMMIT 2023特别设置的Workshop将会是你的知识启航站! 本次Workshop专注于AI开发与大模型应用,邀请一…

Python调用阿里云短信接口

注: 要使用Python调用阿里云的短信服务,你可以使用阿里云官方提供的SDK,即阿里云SDK for Python。首先,确保你已经在阿里云上创建了短信服务并获取了相应的Access Key ID和Access Key Secret。 1、准备工作 阿里云短信网址 1、…

使用C语言实现UDP消息接收

目录 简介:步骤:步骤 1: 创建套接字步骤 2: 接收消息步骤 3: 完成 函数及变量解释总结: 简介: 在网络通信中,UDP(User Datagram Protocol)是一种无连接协议,它提供了一种快速、高效的数据传输方法。本文将向您展示如何使用C语言编…

Effective Java笔记(33)优先考虑类型安全的异构容器

泛型最常用于集合&#xff0c;如 Set<E &#xff1e;和 Map<K ,V&#xff1e;&#xff0c;以及单个元素的容器 &#xff0c;如 ThreadLocal<T>和 AtomicReference<T&#xff1e; 。 在所有这些用法中&#xff0c;它都充当被参数化了的容器 。 这样就限制每个容器…

基于C函数封装的C++读写锁(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、读写锁是什么二、读写锁封装源码三、读写锁注意点总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践…

Vue组件的嵌套关系;父组件传递子组件props;子组件传递给父组件$emit;自定义事件;案例

目录 1_Vue组件的嵌套关系1.1_认识组件的嵌套1.2_组件的拆分1.3_组件的通信 2_父组件传递子组件props2.1_父子组件之间通信的方式2.2_父组件传递给子组件2.3_Props的对象用法 3_子组件传递给父组件$emit4_自定义事件(了解)5_小案例6_补充 1_Vue组件的嵌套关系 1.1_认识组件的嵌…

java 11 新特效解读(2)

目录 全新的HTTP 客户端API 更简化的编译运行程序 废弃Nashorn引擎 ZGC 优势&#xff1a; ZGC的设计目标是&#xff1a; 在当前JDK中看不到什么&#xff1f; 一个标准化和轻量级的JSON API 新的货币API 展望 全新的HTTP 客户端API HTTP&#xff0c;用于传输网页的…

C++实现俄罗斯方块(源码+详解)

&#x1f442; Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 源码Debug工具 &#xff08;1&#xff09;cppreference.com &#xff08;主&#xff09; &#xff08;2&#xff09;必应 (bing.com) &#xff08;3&#xff09;GPT&#xff08;主&#xff09; &#…

Java多线程(3)---锁策略、CAS和JUC

目录 前言 一.锁策略 1.1乐观锁和悲观锁 ⭐ 两者的概念 ⭐实现方法 1.2读写锁 ⭐概念 ⭐实现方法 1.3重量级锁和轻量级锁 1.4自旋锁和挂起等待锁 ⭐概念 ⭐代码实现 1.5公平锁和非公平锁 1.6可重入锁和不可重入锁 二.CAS 2.1为什么需要CAS 2.2CAS是什么 ⭐CAS…

那些年的golang开发经验记录

goland 问题CreateProcess error216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息&#xff0c;然后联系软件发布者 Cannot run program "......" (in directory "D:\project\go\awesomeProject\src\test"): CreateProcess error2…

c语言内存管理

1、局部变量&静态局部变量 1、局部变量 a、作用域&#xff1a;在定义变量的{}之内有效 b、声明周期&#xff1a;程序运行至变量定义处开辟内存空间&#xff0c;所在函数运行结束之后释放空间 c、未初始化的变量值&#xff1a;随机 2、静态局部变量 a、作用域&#xff1…

AI人工智能简史

最近学习AI&#xff0c;顺便整理了一份AI人工智能简史&#xff0c;大家参考&#xff1a; 1951年 第一台神经网络机&#xff0c;称为SNARC&#xff1b;1956年 达特茅斯学院会议&#xff0c;正式确立了人工智能的研究领域&#xff1b;1966年 MIT发明ELIZA人机心理治疗对话程序&a…