Flink架构概览,Flink DataStream API 的使用,FlinkCDC的使用

一、Flink与其他组件的协同

Flink 是一个分布式、高性能、始终可用、准确一次(Exactly-Once)语义的流处理引擎,广泛应用于大数据实时处理场景中。它与 Hadoop 生态系统中的组件可以深度集成,形成完整的大数据处理链路。下面我们从 Flink 的 核心架构 出发,结合与 Hadoop 组件协同方式,详细剖析 Flink 的作用。


1. Flink 核心架构详解

1)架构组件图概览

+-------------------------+
|       Client            |
+-------------------------+|v
+-------------------------+
|    JobManager (JM)      |  <-- Master 负责调度
+-------------------------+|v
+-------------------------+
|    TaskManagers (TM)    |  <-- Worker 执行算子任务
+-------------------------+|v
+-------------------------+
|         Slot            |  <-- 执行资源单位
+-------------------------+

2)核心组件职责

组件描述
Client提交作业到 Flink 集群,触发作业执行。
JobManager (JM)管理作业生命周期,负责调度任务、故障恢复、协调检查点(Checkpoint)等。
TaskManager (TM)具体执行作业的物理任务(算子),负责数据交换、状态管理等。
SlotTaskManager 内部的资源单位,用于任务部署。每个 TaskManager 有多个 Slot。

3)状态管理与容错

  • Checkpoint/Savepoint:可恢复一致性状态(Exactly Once)

  • State Backend:保存状态(如 RocksDB、FsStateBackend)

  • Recovery:通过重放 Checkpoint 恢复任务


2. Flink 与 Hadoop 各组件的协同关系

Flink 虽然是独立系统,但能与 Hadoop 生态的多个关键组件协同工作,构建完整的大数据平台。

1)与 HDFS(Hadoop Distributed File System)

协同方式描述
输入源Flink 可直接读取 HDFS 中的批量数据(如 ORC、Parquet、Text 等格式)
状态后端Flink Checkpoint/Savepoint 可存储到 HDFS 上,保证高可用与容灾
输出目标Flink 作业可以将计算结果输出到 HDFS,作为后续离线处理的数据
fs.defaultFS: hdfs://namenode:8020
state.backend: filesystem
state.checkpoints.dir: hdfs://namenode:8020/flink/checkpoints/

2)与 Hive

协同方式描述
读取表数据Flink 可通过 Hive Catalog 与 Hive 元数据打通,直接读取 Hive 表
写入表Flink SQL 可将流式数据写入 Hive(使用 INSERT INTO)
统一元数据Flink + Hive Catalog 支持表结构共享,便于湖仓一体实践
CREATE CATALOG my_hive WITH ('type' = 'hive','hive-conf-dir' = '/etc/hive/conf'
);

3)与 Kafka(实时采集)

协同方式描述
实时数据源Flink 通过 Kafka Source 接收实时数据流(如日志、订单等)
下游结果写入Flink 可将流式计算结果写入 Kafka(供下游消费)
Exactly Once 语义Flink + Kafka + Checkpoint 可实现端到端的精确一次语义
FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("topic", new SimpleStringSchema(), properties);
consumer.setStartFromGroupOffsets();
consumer.setCommitOffsetsOnCheckpoints(true);

4)与 HBase(实时查询)

协同方式描述
维表关联Flink 可使用 HBase 作为维表进行流批 Join,实时补充维度数据
实时写入计算结果可实时写入 HBase,支持下游查询系统使用(如用户画像等)
tableEnv.executeSql("CREATE TABLE hbase_dim (...) WITH ('connector' = 'hbase-2.2', ...)");

5)与 YARN

协同方式描述
资源调度Flink 可部署在 YARN 上,利用 Hadoop 的资源调度管理能力
Session / Per-Job 模式支持多租户资源隔离或每个作业独立资源隔离部署
flink run -m yarn-cluster -ynm my-flink-job myjob.jar

6)与 Zookeeper

协同方式描述
高可用 JobManager使用 Zookeeper 实现 JobManager 的 leader election
Checkpoint HA 元数据存储配合 HDFS 存储 Checkpoint 元数据路径
high-availability: zookeeper
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
high-availability.storageDir: hdfs://namenode:8020/flink/ha/

3. Flink 的作用总结

模块Flink 的角色
实时数据处理核心组件,进行低延迟、高吞吐流处理计算
数据清洗与 ETL提供强大 SQL / DataStream API 进行多源数据处理与聚合
实时指标计算支持实时 KPI、UV/PV、订单流等分析
数据湖构建可作为流式数据入湖的计算引擎(结合 Hudi/Iceberg)
实时监控预警搭配 Kafka + Prometheus,构建告警与监控系统
实时数仓建设联合 Kafka + Hive + HDFS + HBase 构建流批一体数仓体系

4. Flink 架构在 Hadoop 平台的实际部署图

                     +-------------+|  Flume/Nginx|+------+------+|Kafka集群|+-------------------+--------------------+|                                        |+---v---+                               +----v----+| Flink |--> 清洗 → 维表 Join → 计算    |  Spark  |+---+---+                               +----+----+|                                        |
+-------v---------+                     +--------v--------+
| HBase/Redis     |                     |  HDFS / Hive    |
+-----------------+                     +-----------------+

二、Flink DataStream API的使用

现在以 Flink DataStream API 为核心,深入剖析一个真实生产场景的 从 Kafka 到 Kafka 的流式处理全流程,包括:

  1. 项目结构与依赖

  2. 数据模型与清洗

  3. 水位线与乱序处理

  4. 异步维表查询(HBase/MySQL/Redis)

  5. 窗口聚合逻辑

  6. 数据下发(Kafka Sink)

  7. 容错机制与 Checkpoint 配置


1. 项目结构与依赖

1)Maven 依赖(pom.xml

<dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.17.1</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>1.17.1</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-kafka</artifactId><version>3.0.1-1.17</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.2</version></dependency><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-hbase-2.2</artifactId><version>1.17.1</version></dependency>
</dependencies>

2. 数据模型定义

1)订单数据结构(OrderEvent)

public class OrderEvent {public String orderId;public String userId;public String productId;public double price;public int quantity;public long orderTime; // epoch millis
}

2) 商品维度(ProductInfo)

public class ProductInfo {public String productId;public String categoryId;public String productName;
}

3)聚合结果结构(OrderStat)

public class OrderStat {public String categoryId;public long windowStart;public long windowEnd;public double totalAmount;
}

3. Kafka Source + JSON 反序列化

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(60000, CheckpointingMode.EXACTLY_ONCE);KafkaSource<String> kafkaSource = KafkaSource.<String>builder().setBootstrapServers("kafka:9092").setTopics("order_events").setGroupId("flink-consumer").setStartingOffsets(OffsetsInitializer.latest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStream<OrderEvent> orderStream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "KafkaSource").map(json -> new ObjectMapper().readValue(json, OrderEvent.class)).returns(OrderEvent.class);

4. 水位线处理(乱序数据支持)

WatermarkStrategy<OrderEvent> watermarkStrategy = WatermarkStrategy.<OrderEvent>forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner((event, ts) -> event.orderTime);DataStream<OrderEvent> orderStreamWithWM = orderStream.assignTimestampsAndWatermarks(watermarkStrategy);

5. 异步维表关联(以 HBase 为例)

使用 AsyncFunction 实现异步查询(支持 Redis/HBase/MySQL)

示例实现:AsyncProductEnrichmentFunction

public class AsyncProductEnrichmentFunction extends RichAsyncFunction<OrderEvent, Tuple2<OrderEvent, ProductInfo>> {private transient HBaseClient hBaseClient;@Overridepublic void open(Configuration parameters) throws Exception {hBaseClient = new HBaseClient("hbase.zookeeper.quorum");}@Overridepublic void asyncInvoke(OrderEvent input, ResultFuture<Tuple2<OrderEvent, ProductInfo>> resultFuture) {CompletableFuture.supplyAsync(() -> hBaseClient.queryProductInfo(input.productId)).thenAccept(productInfo -> resultFuture.complete(Collections.singletonList(Tuple2.of(input, productInfo))));}@Overridepublic void close() throws Exception {hBaseClient.close();}
}

应用异步函数

DataStream<Tuple2<OrderEvent, ProductInfo>> enrichedStream = AsyncDataStream.unorderedWait(orderStreamWithWM,new AsyncProductEnrichmentFunction(),5, TimeUnit.SECONDS, 100
);

6. 按类目 ID 滚动窗口聚合

DataStream<OrderStat> resultStream = enrichedStream.map(tuple -> new Tuple3<>(tuple.f1.categoryId, tuple.f0.orderTime, tuple.f0.price * tuple.f0.quantity)).returns(Types.TUPLE(Types.STRING, Types.LONG, Types.DOUBLE)).assignTimestampsAndWatermarks(WatermarkStrategy.<Tuple3<String, Long, Double>>forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner((t, ts) -> t.f1)).keyBy(t -> t.f0).window(TumblingEventTimeWindows.of(Time.minutes(1))).aggregate(new AggregateFunction<Tuple3<String, Long, Double>, Double, OrderStat>() {private long windowStart, windowEnd;private String categoryId;public Double createAccumulator() { return 0.0; }public Double add(Tuple3<String, Long, Double> value, Double acc) {categoryId = value.f0;return acc + value.f2;}public OrderStat getResult(Double acc) {return new OrderStat(categoryId, windowStart, windowEnd, acc);}public Double merge(Double acc1, Double acc2) {return acc1 + acc2;}}, new ProcessWindowFunction<OrderStat, OrderStat, String, TimeWindow>() {@Overridepublic void process(String key, Context context, Iterable<OrderStat> elements, Collector<OrderStat> out) {OrderStat stat = elements.iterator().next();stat.windowStart = context.window().getStart();stat.windowEnd = context.window().getEnd();out.collect(stat);}});

7. 写入 Kafka Sink

KafkaSink<OrderStat> kafkaSink = KafkaSink.<OrderStat>builder().setBootstrapServers("kafka:9092").setRecordSerializer(KafkaRecordSerializationSchema.builder().setTopic("order_stats").setValueSerializationSchema(stat -> {ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsBytes(stat);}).build()).setDeliverGuarantee(DeliveryGuarantee.EXACTLY_ONCE).build();resultStream.sinkTo(kafkaSink);

8.  容错与 HA 配置(关键)

1)Checkpoint 配置

env.enableCheckpointing(60000);
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000);
env.setStateBackend(new RocksDBStateBackend("hdfs://namenode/flink/checkpoints"));

2)高可用配置(flink-conf.yaml)

high-availability: zookeeper
high-availability.zookeeper.quorum: zk1:2181,zk2:2181
state.checkpoints.dir: hdfs://namenode/flink/checkpoints
state.savepoints.dir: hdfs://namenode/flink/savepoints

9. 运行命令(on YARN)

flink run -m yarn-cluster -c com.company.OrderRealtimeJob your-job.jar

10. 监控与排障建议

工具功能
Flink Web UI监控 Task、Checkpoint、Watermark
Prometheus指标采集
Grafana可视化
AlertManager告警配置
Savepoint容错恢复点

三、FlinkCDC实时采集数据入湖

解析Flink CDC(Change Data Capture)在大数据体系中的使用方法,并结合 Kafka、Hudi、Iceberg、Hive、HDFS 等大数据组件,提供一套 可落地、可执行、可扩展的完整集成方案


1. Flink CDC 简介

Flink CDC 是 Apache Flink + Debezium 的组合,用于实时采集 MySQL/PostgreSQL 等数据库的变更数据(INSERT/UPDATE/DELETE),并以 流式方式传递到下游系统(Kafka、Hudi、Iceberg、HBase 等)。


2. 典型架构场景:Flink CDC + Hudi + Hive 实时数据湖方案

           +-------------+               +---------------------+| MySQL/Postgres            |                     ||    Source DB   +-------->  | Flink CDC Connector |+-------------+             |                     |+----------+----------+|| Row-level ChangeLogv+----------+----------+|     Flink Job       ||   (数据清洗/处理)   |+----------+----------+|v+----------+----------+| Hudi Sink (Flink)   |+----------+----------+|v+-------------+-------------+| Hive / Presto / Trino     || 实时查询(支持 ACID)      |+---------------------------+

3. 方案目标

  • 实时采集 MySQL 数据(基于 Binlog)

  • 支持变更(Insert/Update/Delete)语义

  • 数据存入 Hudi 表(支持 MOR/COW 格式)

  • Hive/Presto 端可直接查询


4. 组件版本建议

组件版本建议
Flink1.17.x 或 1.18.x
Flink CDC2.4.1
Debezium内嵌于 Flink CDC
Hudi0.13.1+
Hive2.3.x / 3.1.x
Hadoop/HDFS3.x

5. 部署准备

1)安装 Kafka(可选)

用于做 CDC 中转(可选,支持 Flink 直接接 Hudi)

2)安装 Hive Metastore + Hadoop HDFS

用于管理 Hudi 表元数据和 HDFS 存储

3)准备 MySQL 源数据库

配置 binlog,设置 binlog_format = ROW,并开启 server_idbinlog_row_image = full


6. 关键配置代码与步骤

1)添加 Maven 依赖

<dependencies><!-- Flink CDC --><dependency><groupId>com.ververica</groupId><artifactId>flink-connector-mysql-cdc</artifactId><version>2.4.1</version></dependency><!-- Hudi Sink --><dependency><groupId>org.apache.hudi</groupId><artifactId>hudi-flink-bundle_2.12</artifactId><version>0.13.1</version></dependency>
</dependencies>

2)Flink SQL 示例(CDC → Hudi)

-- 1. 源表:MySQL CDC 表
CREATE TABLE ods_orders (id STRING,user_id STRING,amount DOUBLE,ts TIMESTAMP(3),PRIMARY KEY (id) NOT ENFORCED
) WITH ('connector' = 'mysql-cdc','hostname' = 'mysql-host','port' = '3306','username' = 'flink','password' = 'flink123','database-name' = 'srm','table-name' = 'orders','scan.startup.mode' = 'initial'
);-- 2. 目标表:Hudi 表(MOR 模式)
CREATE TABLE dwd_orders (id STRING PRIMARY KEY NOT ENFORCED,user_id STRING,amount DOUBLE,ts TIMESTAMP(3)
) PARTITIONED BY (`user_id`)
WITH ('connector' = 'hudi','path' = 'hdfs://namenode/data/hudi/dwd_orders','table.type' = 'MERGE_ON_READ','hoodie.datasource.write.recordkey.field' = 'id','write.tasks' = '4','compaction.async.enabled' = 'true','hive_sync.enabled' = 'true','hive_sync.mode' = 'hms','hive_sync.metastore.uris' = 'thrift://hive-metastore:9083','hive_sync.db' = 'ods','hive_sync.table' = 'dwd_orders'
);-- 3. 实时写入
INSERT INTO dwd_orders
SELECT * FROM ods_orders;

7. 关键功能说明

功能配置字段说明
主键变更支持PRIMARY KEY ... NOT ENFORCED支持 upsert
增量采集模式scan.startup.mode = initial首次全量 + 后续增量
实时 compactioncompaction.async.enabled = trueMOR 表性能保障
Hive 数据同步hive_sync.enabled = trueHudi 自动注册 Hive 元数据

8. 整合优化建议

1)多表 CDC 同步统一处理

使用 Flink CDC 的 schema-name.table-name通配符

'database-name' = 'srm',
'table-name' = '.*',

配合 Flink SQL Catalog + Dynamic Table Factory,可实现一拖 N 的多表处理逻辑。


2)增加清洗逻辑(如空值过滤、转换)

SELECTid,user_id,amount * 1.13 AS amount_tax,ts
FROM ods_orders
WHERE amount IS NOT NULL;

3)写入 Kafka(替代 Hudi) → 用于事件总线或下游消费

CREATE TABLE kafka_sink (id STRING,user_id STRING,amount DOUBLE,ts TIMESTAMP(3)
) WITH ('connector' = 'kafka','topic' = 'ods.orders','properties.bootstrap.servers' = 'kafka:9092','format' = 'json','scan.startup.mode' = 'latest-offset'
);

9. Flink CDC 整合场景汇总

场景描述推荐组件
实时数据入湖MySQL → HudiFlink CDC + Hudi
数据仓库加速Oracle → IcebergFlink CDC + Iceberg
数据中台构建MySQL → Kafka → 多下游Flink CDC + Kafka
数据回流校验Kafka → Flink → MySQLFlink SQL + JDBC Sink
DWD建模ODS → DWD/DWM → ADSFlink SQL + 维表 JOIN

10. 可视化监控

工具功能
Flink UICheckpoint、Watermark、吞吐
Prometheus指标采集
Grafana监控仪表盘
HiveSQL 查询验证

四、自定义 Flink CDC Job 的完整实现

自定义 Flink CDC Job 的完整实现,采用 Java DataStream API 编写,支持:

  • 多表接入(MySQL 为例)

  • 自定义清洗、转换逻辑

  • 支持写入 Kafka、Hudi、Iceberg 等下游系统

  • 可部署为标准 Flink 应用(flink run 执行)


1. 自定义 Flink CDC Job 场景说明

目标:

  • 从 MySQL 采集订单表 srm.orders

  • 做清洗(如金额换算、字段过滤)

  • 输出到 Hudi 表(或 Kafka/Console)


2. 依赖配置(Maven)

<dependencies><!-- Flink CDC --><dependency><groupId>com.ververica</groupId><artifactId>flink-connector-mysql-cdc</artifactId><version>2.4.1</version></dependency><!-- Flink 通用 --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-java</artifactId><version>1.17.2</version></dependency><!-- 可选:Sink 依赖,如 Kafka、Hudi、Iceberg -->
</dependencies>

3. 完整代码示例:CustomCdcJob.java

public class CustomCdcJob {public static void main(String[] args) throws Exception {// 1. 创建执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 2. 配置 CDC 源:MySQLMySqlSource<Order> mysqlSource = MySqlSource.<Order>builder().hostname("mysql-host").port(3306).databaseList("srm").tableList("srm.orders").username("flink").password("flink123").deserializer(new OrderDeserializationSchema()) // 自定义反序列化.build();// 3. 接入 SourceDataStreamSource<Order> orderStream = env.fromSource(mysqlSource,WatermarkStrategy.noWatermarks(),"MySQL CDC Source");// 4. 数据清洗/转换SingleOutputStreamOperator<Order> cleaned = orderStream.filter(order -> order.amount > 0).map(order -> {order.amount = order.amount * 1.13; // 加税return order;});// 5. Sink:控制台 / Kafka / Hudicleaned.print();env.execute("Custom Flink CDC Job");}
}

4. 自定义反序列化器:OrderDeserializationSchema

public class OrderDeserializationSchema implements DebeziumDeserializationSchema<Order> {@Overridepublic void deserialize(SourceRecord sourceRecord, Collector<Order> collector) {Struct value = (Struct) sourceRecord.value();if (value == null) return;Struct after = value.getStruct("after");if (after != null) {Order order = new Order();order.id = after.getString("id");order.userId = after.getString("user_id");order.amount = after.getFloat64("amount");order.ts = Instant.ofEpochMilli(after.getInt64("ts")).atZone(ZoneId.of("UTC")).toLocalDateTime();collector.collect(order);}}@Overridepublic TypeInformation<Order> getProducedType() {return TypeInformation.of(Order.class);}
}

5. 定义 POJO 类:Order.java

public class Order implements Serializable {public String id;public String userId;public Double amount;public LocalDateTime ts;@Overridepublic String toString() {return String.format("[Order] id=%s, user=%s, amt=%.2f, ts=%s",id, userId, amount, ts.toString());}
}

6. Sink 可选方案

1)控制台输出(开发调试)

cleaned.print();

2)Kafka Sink(事件总线)

KafkaSink<String> kafkaSink = KafkaSink.<String>builder().setBootstrapServers("kafka:9092").setRecordSerializer(KafkaRecordSerializationSchema.builder().setTopic("srm.orders.cdc").setValueSerializationSchema(new SimpleStringSchema()).build()).build();cleaned.map(order -> JSON.toJSONString(order)).sinkTo(kafkaSink);

3)写入 Hudi 表(通过 Flink Hudi Sink)

cleaned.addSink(HudiSinkUtil.getSink());

自定义 Hudi Sink 工具类可基于 HoodieSink 封装。


七、打包部署方式

1)使用 maven-shade-plugin 打 fat-jar:

mvn clean package -DskipTests

输出:custom-cdc-job-1.0-SNAPSHOT.jar


2)提交到 Flink 集群

flink run -m yarn-cluster -c com.example.CustomCdcJob custom-cdc-job.jar

8. 扩展功能(可选)

功能实现方式
多表同步.tableList("srm.orders,srm.invoice")
动态 schema 推导使用 JsonDebeziumDeserializationSchema
维表 joinFlink SQL / Broadcast Join
自定义状态存储Flink KeyedState
exactly-once 写入 Kafka/Hudi使用 checkpoint 支持

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

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

相关文章

linux 查看java的安装路径

一、验证Java安装状态 java -version正常安装会显示版本信息&#xff1a; openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)二、检查环境变量配置 若已配置JAVA_HOME&#…

2025-5-21 个人笔记篇matlab小笔记和clang基础使用(简单记录)

个人笔记篇 再不记录就找不到了&#xff0c;之前学的一点基础&#xff0c;看看就行,请不要提问,因为很久了>_<(至少我看来是这样的) matlab小笔记 % 开绘制(新建) figure % 设置绘制标题 title(标题); % 设置绘制的X轴Lable xlabel(x); % 设置绘制的y轴Lable ylabel(cos…

前端JavaScript-嵌套事件

点击 如果在多层嵌套中&#xff0c;对每层都设置事件监视器&#xff0c;试试看 <!DOCTYPE html> <html lang"cn"> <body><div id"container"><button>点我&#xff01;</button></div><pre id"output…

网感驱动下开源AI大模型AI智能名片S2B2C商城小程序源码的实践路径研究

摘要&#xff1a;在数字化浪潮中&#xff0c;网感已成为内容创作者与商业运营者必备的核心能力。本文以开源AI大模型、AI智能名片及S2B2C商城小程序源码为技术载体&#xff0c;通过解析网感培养与用户需求洞察的内在关联&#xff0c;提出"数据驱动-场景适配-价值重构"…

AG-UI:重构AI代理与前端交互的下一代协议标准

目录 技术演进背景与核心价值协议架构与技术原理深度解析核心功能与标准化事件体系典型应用场景与实战案例开发者生态与集成指南行业影响与未来展望1. 技术演进背景与核心价值 1.1 AI交互的三大痛点 当前AI应用生态面临三大核心挑战: 交互碎片化:LangGraph、CrewAI等框架各…

游戏引擎学习第301天:使用精灵边界进行排序

回顾并为今天的内容做准备 昨天&#xff0c;我们解决了一些关于排序的问题&#xff0c;这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题&#xff0c;但我们提出了一个看起来合理的排序标准。 有两点…

Ajax快速入门教程

输入java时&#xff0c;页面并没有刷新但是下面自动联想出了跟java有关的东西&#xff0c;像这种就叫异步交互 它不会妨碍你的输入&#xff0c;同时还能够同步进行对于java相关联想词的推送 发送异步请求需要借助工具axios 引入axios&#xff0c;可以直接在scripts中引入 get和…

Anti Spy安卓版:智能防护,守护手机安全

Anti Spy安卓版是一款专为安卓设备设计的智能防护应用&#xff0c;旨在帮助用户实时防护手机安全&#xff0c;抵御间谍软件、恶意软件和其他潜在威胁。它基于人工智能和启发式搜索方法的引擎&#xff0c;能够检测并阻止已知和未知的间谍软件、后门程序、账单欺诈、短信欺诈、电…

超低延迟音视频直播技术的未来发展与创新

引言 音视频直播技术正在深刻改变着我们的生活和工作方式&#xff0c;尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育&#xff0c;还是智慧安防、智能家居等应用场景&#xff0c;都离不开音视频技术的支持。为了应对越来越高的需求&#x…

系统架构设计(十二):统一过程模型(RUP)

简介 RUP 是由 IBM Rational 公司提出的一种 面向对象的软件工程过程模型&#xff0c;以 UML 为建模语言&#xff0c;是一种 以用例为驱动、以架构为中心、迭代式、增量开发的过程模型。 三大特征 特征说明以用例为驱动&#xff08;Use Case Driven&#xff09;需求分析和测…

海康相机连接测试-极简版

文章目录 1、下载客户端 1、下载客户端 海康机器人官网下载软件 软件下载地址 先下载客户端测试连接 按照你的相机的类型选择客户端 安装完毕后&#xff0c;确保USB线插的是3.0的端口 软件会自动识别相机型号 在上方有播放按钮&#xff0c;可以采集图像信息显示

Linux 磁盘扩容实战案例:从问题发现到完美解决

Linux 磁盘扩容实战案例&#xff1a;从问题发现到完美解决 案例背景 某企业服务器根目录 (/) 空间不足&#xff0c;运维人员通过 df -h 发现 /dev/vda1 分区已 100% 占满&#xff08;99G 已用&#xff09;。检查发现物理磁盘 /dev/vda 已扩展至 200G&#xff0c;但分区和文件…

深入解析FramePack:高效视频帧打包技术原理与实践

摘要 本文深入探讨FramePack技术在视频处理领域的核心原理&#xff0c;解析其在不同场景下的应用优势&#xff0c;并通过OpenCV代码示例演示具体实现方法&#xff0c;为开发者提供可落地的技术解决方案。 目录 1. FramePack技术背景 2. 核心工作原理剖析 3. 典型应用场景 …

RVTools 官网遭入侵,被用于分发携带 Bumblebee 恶意软件的篡改安装包

VMware 环境报告工具 RVTools 的官方网站遭黑客入侵&#xff0c;其安装程序被植入恶意代码。安全研究人员 Aidan Leon 发现&#xff0c;从该网站下载的受感染安装程序会侧加载一个恶意 DLL 文件&#xff0c;经确认是已知的 Bumblebee 恶意软件加载器。 官方回应与风险提示 RV…

mysql故障排查与环境优化

一、mysql运行原理 mysql的运行分为三层 客户端和连接服务 核心服务功能&#xff08;sql接口、缓存的查询、sql的分析和优化以及部分内置函数的执行等。&#xff09; 存储引擎层&#xff08;负责mysql中数据的存储和提取。&#xff09; 二、示例 1、实验环…

Codex与LangChain结合的智能代理架构:重塑软件开发的未来

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言:当代码生成遇见智能决策 想象以下场景: 凌晨三点:你需要紧急修复一个遗留系统的内存泄漏漏洞,但代码注释缺失且逻辑复杂; 产品经理需求变更:要求在24小时内将现有…

【开源Agent框架】CAMEL:角色扮演+任务分解

一、项目概览:重新定义智能体协作范式 CAMEL(Communicative Agents for “Mind” Exploration of Large Language Model Society)是由camel-ai社区开发的开源多智能体框架,致力于探索智能体的规模法则(Scaling Laws)。该项目通过构建包含百万级智能体的复杂社会系统,研…

第32节:基于ImageNet预训练模型的迁移学习与微调

1. 引言 在深度学习领域,迁移学习(Transfer Learning)已经成为解决计算机视觉任务的重要方法,特别是在数据量有限的情况下。其中,基于ImageNet数据集预训练的模型因其强大的特征提取能力而被广泛应用于各种视觉任务。本文将详细介绍迁移学习的概念、ImageNet预训练模型的特…

celery独立部署接入数据库配置

目录结构&#xff1a; config下配置&#xff1a; __init__: import os import sys sys.path.append(os.getcwd()) from celery import CeleryappCelery(celeryTester) # 创建一个Celery实例&#xff0c;名字自定义 app.config_from_object(config.celery_config) # 从celery_…

攻防世界-题目名称-文件包含

进入环境 看到 include()&#xff0c;想到文件包含&#xff0c;用php伪协议 /?filenamephp://filter/readconvert.base64-encode/resourceflag.php do not hack!猜测可能是黑名单检测的敏感字符 输入单个字符串/?filenamebase64 还是显示do not hack&#xff01; 构造payl…