TDengine 做为 FLINK 数据源技术参考手册
Apache Flink 是一款由 Apache 软件基金会支持的开源分布式流批一体化处理框架,可用于流处理、批处理、复杂事件处理、实时数据仓库构建及为机器学习提供实时数据支持等诸多大数据处理场景。与此同时,Flink 拥有丰富的连接器与各类工具,可对接众多不同类型的数据源实现数据的读取与写入。在数据处理的过程中,Flink 还提供了一系列可靠的容错机制,有力保障任务即便遭遇意外状况,依然能稳定、持续运行。
借助 TDengine 的 Flink 连接器,Apache Flink 得以与 TDengine 数据库无缝对接,一方面能够将经过复杂运算和深度分析后所得到的结果精准存入 TDengine 数据库,实现数据的高效存储与管理;另一方面,也可以从 TDengine 数据库中快速、稳定地读取海量数据,并在此基础上进行全面、深入的分析处理,充分挖掘数据的潜在价值,为企业的决策制定提供有力的数据支持和科学依据,极大地提升数据处理的效率和质量,增强企业在数字化时代的竞争力和创新能力。
前置条件
准备以下环境:
- TDengine 服务已部署并正常运行(企业及社区版均可)
- taosAdapter 能够正常运行。详细参考 taosAdapter 使用手册
- Apache Flink v1.19.0 或以上版本已安装。安装 Apache Flink 请参考 官方文档
支持的平台
Flink Connector 支持所有能运行 Flink 1.19 及以上版本的平台。
版本历史
Flink Connector 版本 | 主要变化 | TDengine 版本 |
---|---|---|
2.0.1 | Sink 支持对所有继承自 RowData 并已实现的类型进行数据写入 | - |
2.0.0 | 1. 支持 SQL 查询 TDengine 数据库中的数据 2. 支持 CDC 订阅 TDengine 数据库中的数据 3. 支持 Table SQL 方式读取和写入 TDengine 数据库 | 3.3.5.1 及以上版本 |
1.0.0 | 支持 Sink 功能,将来着其他数据源的数据写入到 TDengine | 3.3.2.0 及以上版本 |
异常和错误码
在任务执行失败后,查看 Flink 任务执行日志确认失败原因
具体的错误码请参考:
Error Code | Description | Suggested Actions |
---|---|---|
0xa000 | connection param error | 连接器参数错误。 |
0xa001 | the groupid parameter of CDC is incorrect | CDC 的 groupid 参数错误。 |
0xa002 | wrong topic parameter for CDC | CDC 的 topic 参数错误。 |
0xa010 | database name configuration error | 数据库名配置错误。 |
0xa011 | table name configuration error | 表名配置错误。 |
0xa012 | no data was obtained from the data source | 从数据源中获取数据失败。 |
0xa013 | value.deserializer parameter not set | 未设置序列化方式。 |
0xa014 | list of column names for target table not set | 未设置目标表的列名列表。 |
0x2301 | connection already closed | 连接已经关闭,检查连接情况,或重新创建连接去执行相关指令。 |
0x2302 | this operation is NOT supported currently! | 当前使用接口不支持,可以更换其他连接方式。 |
0x2303 | invalid variables | 参数不合法,请检查相应接口规范,调整参数类型及大小。 |
0x2304 | statement is closed | statement 已经关闭,请检查 statement 是否关闭后再次使用,或是连接是否正常。 |
0x2305 | resultSet is closed | resultSet 结果集已经释放,请检查 resultSet 是否释放后再次使用。 |
0x230d | parameter index out of range | 参数越界,请检查参数的合理范围。 |
0x230e | connection already closed | 连接已经关闭,请检查 Connection 是否关闭后再次使用,或是连接是否正常。 |
0x230f | unknown sql type in TDengine | 请检查 TDengine 支持的 Data Type 类型。 |
0x2315 | unknown taos type in TDengine | 在 TDengine 数据类型与 JDBC 数据类型转换时,是否指定了正确的 TDengine 数据类型。 |
0x2319 | user is required | 创建连接时缺少用户名信息。 |
0x231a | password is required | 创建连接时缺少密码信息。 |
0x231d | can’t create connection with server within | 通过增加参数 httpConnectTimeout 增加连接耗时,或是请检查与 taosAdapter 之间的连接情况。 |
0x231e | failed to complete the task within the specified time | 通过增加参数 messageWaitTimeout 增加执行耗时,或是请检查与 taosAdapter 之间的连接情况。 |
0x2352 | Unsupported encoding | 本地连接下指定了不支持的字符编码集。 |
0x2353 | internal error of database, please see taoslog for more details | 本地连接执行 prepareStatement 时出现错误,请检查 taos log 进行问题定位。 |
0x2354 | connection is NULL | 本地连接执行命令时,Connection 已经关闭。请检查与 TDengine 的连接情况。 |
0x2355 | result set is NULL | 本地连接获取结果集,结果集异常,请检查连接情况,并重试。 |
0x2356 | invalid num of fields | 本地连接获取结果集的 meta 信息不匹配。 |
0x2357 | empty sql string | 填写正确的 SQL 进行执行。 |
0x2371 | consumer properties must not be null! | 创建订阅时参数为空,请填写正确的参数。 |
0x2375 | topic reference has been destroyed | 创建数据订阅过程中,topic 引用被释放。请检查与 TDengine 的连接情况。 |
0x2376 | failed to set consumer topic, topic name is empty | 创建数据订阅过程中,订阅 topic 名称为空。请检查指定的 topic 名称是否填写正确。 |
0x2377 | consumer reference has been destroyed | 订阅数据传输通道已经关闭,请检查与 TDengine 的连接情况。 |
0x2378 | consumer create error | 创建数据订阅失败,请根据错误信息检查 taos log 进行问题定位。 |
0x237a | vGroup not found in result set VGroup | 没有分配给当前 consumer,由于 Rebalance 机制导致 Consumer 与 VGroup 不是绑定的关系。 |
数据类型映射
TDengine 目前支持时间戳、数字、字符、布尔类型,与 Flink RowData Type 对应类型转换如下:
TDengine DataType | Flink RowDataType |
---|---|
TIMESTAMP | TimestampData |
INT | Integer |
BIGINT | Long |
FLOAT | Float |
DOUBLE | Double |
SMALLINT | Short |
TINYINT | Byte |
BOOL | Boolean |
BINARY | byte[] |
NCHAR | StringData |
JSON | StringData |
VARBINARY | byte[] |
GEOMETRY | byte[] |
使用说明
Flink 语义选择说明
采用 At-Least-Once(至少一次)语义原因:
- TDengine 目前不支持事务,不能进行频繁的检查点操作和复杂的事务协调。
- 由于 TDengine 采用时间戳作为主键,重复数据下游算子可以进行过滤操作,避免重复计算。
- 采用 At-Least-Once(至少一次)确保达到较高的数据处理的性能和较低的数据延时,设置方式如下:
使用方式:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000);
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);
如果使用 Maven 管理项目,只需在 pom.xml 中加入以下依赖。
<dependency><groupId>com.taosdata.flink</groupId><artifactId>flink-connector-tdengine</artifactId><version>2.0.1</version>
</dependency>
连接参数
建立连接的参数有 URL 和 Properties。
URL 规范格式为:
jdbc:TAOS-WS://[host_name]:[port]/[database_name]?[user={user}|&password={password}|&timezone={timezone}]
参数说明:
- user:登录 TDengine 用户名,默认值 ‘root’。
- password:用户登录密码,默认值 ‘taosdata’。
- database_name: 数据库名称。
- timezone: 时区设置。
- httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 60000。
- messageWaitTimeout: 消息超时时间,单位 ms, 默认值为 60000。
- useSSL: 连接中是否使用 SSL。
Source
Source 拉取 TDengine 数据库中的数据,并将获取到的数据转换为 Flink 内部可处理的格式和类型,并以并行的方式进行读取和分发,为后续的数据处理提供高效的输入。
通过设置数据源的并行度,实现多个线程并行地从数据源中读取数据,提高数据读取的效率和吞吐量,充分利用集群资源进行大规模数据处理能力。
Properties 中配置参数如下:
- TDengineConfigParams.PROPERTY_KEY_USER:登录 TDengine 用户名,默认值 ‘root’。
- TDengineConfigParams.PROPERTY_KEY_PASSWORD:用户登录密码,默认值 ‘taosdata’。
- TDengineConfigParams.VALUE_DESERIALIZER:下游算子接收结果集反序列化方法, 如果接收结果集类型是
Flink
的RowData
,仅需要设置为RowData
即可。也可继承TDengineRecordDeserialization
并实现convert
和getProducedType
方法,根据SQL
的ResultSet
自定义反序列化方式。 - TDengineConfigParams.TD_BATCH_MODE:此参数用于批量将数据推送给下游算子,如果设置为 True,创建
TDengineSource
对象时需要指定数据类型为SourceRecords
类型的泛型形式。 - TDengineConfigParams.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 60000。
- TDengineConfigParams.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在
PROPERTY_KEY_ENABLE_AUTO_RECONNECT
为 true 时生效。 - TDengineConfigParams.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3,仅在
PROPERTY_KEY_ENABLE_AUTO_RECONNECT
为 true 时生效。 - TDengineConfigParams.PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION: 关闭 SSL 证书验证 。true: 启用,false: 不启用。默认为 false。
按时间分片
用户可以对查询的 SQL 按照时间拆分为多个子任务,输入:开始时间,结束时间,拆分间隔,时间字段名称,系统会按照设置的间隔(时间左闭右开)进行拆分并行获取数据。
{{#include docs/examples/flink/Main.java:time_interval}}
按超级表 TAG 分片
用户可以按照超级表的 TAG 字段将查询的 SQL 拆分为多个查询条件,系统会以一个查询条件对应一个子任务的方式对其进行拆分,进而并行获取数据。
{{#include docs/examples/flink/Main.java:tag_split}}
按表名分片
支持输入多个相同表结构的超级表或普通表进行分片,系统会按照一个表一个任务的方式进行拆分,进而并行获取数据。
{{#include docs/examples/flink/Main.java:table_split}}
使用 Source 连接器
查询结果为 RowData 数据类型示例:
RowData Source ```java {{#include docs/examples/flink/Main.java:source_test}} ```批量查询结果示例:
Batch Source ```java {{#include docs/examples/flink/Main.java:source_batch_test}} ```查询结果为自定义数据类型示例:
Custom Type Source ```java {{#include docs/examples/flink/Main.java:source_custom_type_test}} ```- ResultBean 自定义的一个内部类,用于定义 Source 查询结果的数据类型。
- ResultSoureDeserialization 是自定义的一个内部类,通过继承
TDengineRecordDeserialization
并实现convert
和getProducedType
方法。
CDC 数据订阅
Flink CDC 主要用于提供数据订阅功能,能实时监控 TDengine
数据库的数据变化,并将这些变更以数据流形式传输到 Flink
中进行处理,同时确保数据的一致性和完整性。
Properties 中配置参数如下:
- TDengineCdcParams.BOOTSTRAP_SERVERS:TDengine 服务端所在的
ip:port
,如果使用WebSocket
连接,则为 taosAdapter 所在的ip:port
。 - TDengineCdcParams.CONNECT_USER:登录 TDengine 用户名,默认值 ‘root’。
- TDengineCdcParams.CONNECT_PASS:用户登录密码,默认值 ‘taosdata’。
- TDengineCdcParams.POLL_INTERVAL_MS:拉取数据间隔, 默认 500ms。
- TDengineCdcParams.VALUE_DESERIALIZER:结果集反序列化方法,如果接收结果集类型是
Flink
的RowData
,仅需要设置为RowData
即可。可以继承com.taosdata.jdbc.tmq.ReferenceDeserializer
,并指定结果集 bean,实现反序列化。 - TDengineCdcParams.TMQ_BATCH_MODE:此参数用于批量将数据推送给下游算子,如果设置为 True,创建
TDengineCdcSource
对象时需要指定数据类型为ConsumerRecords
类型的泛型形式。 - TDengineCdcParams.GROUP_ID:消费组 ID,同一消费组共享消费进度。最大长度:192。
- TDengineCdcParams.AUTO_OFFSET_RESET: 消费组订阅的初始位置 (
earliest
从头开始订阅,latest
仅从最新数据开始订阅, 默认latest
)。 - TDengineCdcParams.ENABLE_AUTO_COMMIT:是否启用消费位点自动提交,true: 自动提交;false:依赖
checkpoint
时间来提交, 默认 false。
注意:自动提交模式reader获取完成数据后自动提交,不管下游算子是否正确的处理了数据,存在数据丢失的风险,主要用于为了追求高效的无状态算子场景或是数据一致性要求不高的场景。
- TDengineCdcParams.AUTO_COMMIT_INTERVAL_MS:消费记录自动提交消费位点时间间隔,单位为毫秒。默认值为 5000, 此参数在
ENABLE_AUTO_COMMIT
为 true 生效。 - TDengineConfigParams.PROPERTY_KEY_ENABLE_COMPRESSION:传输过程是否启用压缩。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_ENABLE_AUTO_RECONNECT:是否启用自动重连。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_INTERVAL_MS:自动重连重试间隔,单位毫秒,默认值 2000。仅在
PROPERTY_KEY_ENABLE_AUTO_RECONNECT
为 true 时生效。 - TDengineConfigParams.PROPERTY_KEY_RECONNECT_RETRY_COUNT:自动重连重试次数,默认值 3,仅在
PROPERTY_KEY_ENABLE_AUTO_RECONNECT
为 true 时生效。 - TDengineCdcParams.TMQ_SESSION_TIMEOUT_MS:
consumer
心跳丢失后超时时间,超时后会触发rebalance
逻辑,成功后该consumer
会被删除(从3.3.3.0版本开始支持), 默认值为 12000,取值范围 [6000, 1800000]。 - TDengineCdcParams.TMQ_MAX_POLL_INTERVAL_MS:
consumer poll
拉取数据间隔的最长时间,超过该时间,会认为该consumer
离线,触发rebalance
逻辑,成功后该consumer
会被删除。 默认值为 300000,[1000,INT32_MAX]。
使用 CDC 连接器
CDC 连接器会根据用户设置的并行度进行创建 consumer,因此用户根据资源情况合理设置并行度。
订阅结果为 RowData 数据类型示例:
CDC Source ```java {{#include docs/examples/flink/Main.java:cdc_source}} ```将订阅结果批量下发到算子的示例:
CDC Batch Source ```java {{#include docs/examples/flink/Main.java:cdc_batch_source}} ```订阅结果为自定义数据类型示例:
CDC Custom Type ```java {{#include docs/examples/flink/Main.java:cdc_custom_type_test}} ```- ResultBean 是自定义的一个内部类,其字段名和数据类型与列的名称和数据类型一一对应,这样根据
TDengineCdcParams.VALUE_DESERIALIZER
属性对应的反序列化类可以反序列化出 ResultBean 类型的对象。
Sink
Sink 的核心功能在于高效且精准地将经过 Flink
处理的、源自不同数据源或算子的数据写入 TDengine
。在这一过程中,TDengine
所具备的高效写入机制发挥了至关重要的作用,有力保障了数据的快速和稳定存储。
Properties 中配置参数如下:
- TDengineConfigParams.PROPERTY_KEY_USER:登录
TDengine
用户名,默认值 ‘root’。 - TDengineConfigParams.PROPERTY_KEY_PASSWORD:用户登录密码,默认值 ‘taosdata’。
- TDengineConfigParams.PROPERTY_KEY_DBNAME:写入的数据库名称。
- TDengineConfigParams.TD_SUPERTABLE_NAME:写入的超级表名称。接收的数据必须有 tbname 字段,确定写入那张子表。
- TDengineConfigParams.TD_TABLE_NAME:写入子表或普通表的表名,此参数和TD_SUPERTABLE_NAME 仅需要设置一个即可。
- TDengineConfigParams.VALUE_DESERIALIZER:接收结果集反序列化方法, 如果接收结果集类型是
Flink
的RowData
,仅需要设置为RowData
即可。也可继承TDengineSinkRecordSerializer
并实现serialize
方法,根据 接收的数据类型自定义反序列化方式。 - TDengineConfigParams.TD_BATCH_SIZE:设置一次写入
TDengine
数据库的批大小 | 当到达批的数量后进行写入,或是一个checkpoint的时间也会触发写入数据库。 - TDengineConfigParams.TD_BATCH_MODE:接收批量数据当设置为 True 时,如果数据来源是
TDengine Source
,则使用SourceRecords
泛型类型来创建TDengineSink
对象;若来源是TDengine CDC
,则使用ConsumerRecords
泛型来创建TDengineSink
对象。 - TDengineConfigParams.TD_SOURCE_TYPE:设置数据来源。 当数据来源是
TDengine Source
是设置为 ‘tdengine_source’, 当来源是TDengine CDC
设置为 ‘tdengine_cdc’。当配置TD_BATCH_MODE
为 True 生效。 - TDengineConfigParams.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 60000。
- TDengineConfigParams.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。true: 启用,false: 不启用。默认为 false。
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TDengineConfigParams.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3,仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
- TDengineConfigParams.PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION: 关闭 SSL 证书验证 。true: 启用,false: 不启用。默认为 false。
使用示例:
将 power 库的 meters 表的子表数据,写入 power_sink 库的 sink_meters 超级表对应的子表中。
Sink RowData ```java {{#include docs/examples/flink/Main.java:RowDataToSink}} ```使用示例:
订阅 power 库的 meters 超级表的子表数据,写入 power_sink 库的 sink_meters 超级表对应的子表中。
Cdc Sink ```java {{#include docs/examples/flink/Main.java:CdcRowDataToSink}} ```Table SQL
使用 Table SQL 的方式从多个不同的数据源数据库(如 TDengine、MySQL、Oracle 等)中提取数据后, 再进行自定义的算子操作(如数据清洗、格式转换、关联不同表的数据等),然后将处理后的结果加载到目标数据源(如 TDengine、Mysql 等)中。
Table Source 连接器
参数配置说明:
参数名称 | 类型 | 参数说明 |
---|---|---|
connector | string | 连接器标识,设置 tdengine-connector 。 |
td.jdbc.url | string | 连接的 url 。 |
td.jdbc.mode | strng | 连接器类型, 设置 source , sink 。 |
table.name | string | 原表或目标表名称。 |
scan.query | string | 获取数据的 SQL 语句。 |
sink.db.name | string | 目标数据库名称。 |
sink.supertable.name | string | 写入的超级表名称。 |
sink.batch.size | integer | 写入的批大小。 |
sink.table.name | string | 写入的普通表或子表名称。 |
使用示例:
将 power 库的 meters 表的子表数据,写入 power_sink 库的 sink_meters 超级表对应的子表中。
Table Source ```java {{#include docs/examples/flink/Main.java:source_table}} ```Table CDC 连接器
参数配置说明:
参数名称 | 类型 | 参数说明 |
---|---|---|
connector | string | 连接器标识,设置 tdengine-connector 。 |
user | string | 用户名, 默认 root。 |
password | string | 密码, 默认taosdata。 |
bootstrap.servers | string | 服务器地址。 |
topic | string | 订阅主题。 |
td.jdbc.mode | strng | 连接器类型, cdc, sink。 |
group.id | string | 消费组 ID,同一消费组共享消费进度。 |
auto.offset.reset | string | 消费组订阅的初始位置。earliest : 从头开始订阅 latest : 仅从最新数据开始订阅。默认 latest 。 |
poll.interval_ms | integer | 拉取数据间隔, 默认 500ms。 |
sink.db.name | string | 目标数据库名称。 |
sink.supertable.name | string | 写入的超级表名称。 |
sink.batch.size | integer | 写入的批大小。 |
sink.table.name | string | 写入的普通表或子表名称。 |
使用示例:
订阅 power 库的 meters 超级表的子表数据,写入 power_sink 库的 sink_meters 超级表对应的子表中。
Table CDC ```java {{#include docs/examples/flink/Main.java:cdc_table}} ```相关文章:
TDengine 做为 FLINK 数据源技术参考手册
Apache Flink 是一款由 Apache 软件基金会支持的开源分布式流批一体化处理框架,可用于流处理、批处理、复杂事件处理、实时数据仓库构建及为机器学习提供实时数据支持等诸多大数据处理场景。与此同时,Flink 拥有丰富的连接器与各类工具,可对接…...
不重启JVM,替换掉已经加载的类
不重启JVM,替换掉已经加载的类 直接操作字节码 使用ASM框架直接操作class文件,在类中修改代码,然后retransform就可以了 下边是BTrace官方提供的一个简单例子: package com.sun.btrace.samples;import com.sun.btrace.annotati…...
axios的使用总结
一、Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue 项目中,它主要用于发送 HTTP 请求来获取数据(如从 API 获取数据)或者提交数据(如用户登录、注册等表单数据)。 二…...
使用 F12 查看 Network 及数据格式
在浏览器中,F12 开发者工具的 “Network” 面板是用于查看网页在加载过程中发起的所有网络请求,包括 API 请求,以及查看这些请求的详细信息和响应数据的。以下以常见的 Chrome 浏览器为例,介绍如何使用 F12 控制台查看 Network 里…...
HTML<img>标签
例子 如何插入图片: <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…...
Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
引言: 今天我们聊聊Android生态中最“硬核”的话题:通用内核镜像(GKI)与内核模块接口(KMI)。这是内核碎片化终结者的秘密武器,解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…...
每日一刷——1.20——准备蓝桥杯
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目一 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次&a…...
知行合一:解决有心无力的问题,解决知易行难的问题,知行合一并不意味着事事都要合一,而是....
问题是什么? 想学习的时候,有手机阻碍我们。想戒掉手机短视频,卸载后,几天的时间,又下载了回来。制定了减肥计划,但就是不执行。明知道这样做是不对的,但依然行动不起来。 沉溺于各种各样的享…...
C++ Qt练习项目 日期时间数据 未完待续
个人学习笔记 新建项目 设计UI 实现组件功能 参考资料 4.7日期时间数据_哔哩哔哩_bilibili...
Golang学习笔记_28——工厂方法模式(实例)
Golang学习笔记_26——通道 Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 工厂方法模式(实例) package factory_method_demoimport "fmt"// Order 接口,定义订单的基本操作 type Order interface {Calculate…...
linux下springboot项目nohup日志或tomcat日志切割处理方案
目录 1. 配置流程 2. 配置说明 其他配置选项: 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下,我们的springboot项目部署到linux服务器中,通过nohup java -jar xxx.jar &指令来进行后台运行我们…...
SentencePiece和 WordPiece tokenization 的含义和区别
SentencePiece和 WordPiece tokenization 的含义和区别 SentencePiece 和 WordPiece 都是常用的分词(tokenization)技术,主要用于自然语言处理(NLP)中的文本预处理,尤其是在处理大规模文本数据时。它们都基于子词(subword)单元,能够将未登录词(out-of-vocabulary, O…...
视频修复最强算法 部署笔记2025
目录 模型下载: 模型: 原版保存的视频,vs code不播放: 模型下载: Release ProPainter V0.1.0 Release sczhou/ProPainter GitHub huggingface-cli download --resume-download lixiaowen/diffuEraser --local-dir /mnt/pfs/models/huggingface/models--lixiaowen--d…...
Java数据结构——优先队列
目录 引言1. 优先队列2. 优先队列的实现2.1 堆的概念2.2 堆的创建2.2.1 堆的向下调整2.3 堆的插入2.4 堆的删除 3. 总结 引言 前面一篇文章讲了二叉树,本篇将讲述数据结构中的优先队列,优先队列则需要用到完全二叉树来实现。 1. 优先队列 队列&#x…...
红外热成像之无人机载荷
电力巡检 相较于传统的人工电力巡线方式,无人机巡检能够在高空对人工难以达到或无法检测的设备进行检测,实现了电子化、信息化、智能化巡检,可以提高巡检的工作效率和应急抢险水平。 森林防火 无人机搭载红外光电系统能在森林高空进行全天候监…...
深入Spring Boot:自定义Starter开发与实践
引言 Spring Boot通过其强大的自动配置机制和丰富的Starter模块,极大地简化了Spring应用的开发过程。Starter模块封装了一组相关的依赖和配置,使得开发者可以通过简单的依赖引入,快速启用特定的功能。然而,除了使用Spring Boot提…...
MasterSAM downloadService任意文件读取(CVE-2024-55457)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
【Pytest】基础到高级功能的理解使用
文章目录 第一部分:Pytest 简介1.1 什么是 Pytest?1.2 Pytest 的历史1.3 Pytest 的核心概念1.4 Pytest 的特点1.5 为什么选择 Pytest? 第二部分:Pytest 的基本使用2.1 安装 Pytest2.2 编写第一个测试用例2.2.1 创建一个简单的测试…...
【Linux系统编程】—— 从零开始实现一个简单的自定义Shell
文章目录 什么是自主shell命令行解释器?实现shell的基础认识全局变量的配置初始化环境变量实现内置命令(如 cd 和 echo)cd命令:echo命令: 构建命令行提示符获取并解析用户输入的命令执行内置命令与外部命令Shell的主循…...
探索云原生可观测性:技术与团队协作的深度结合
TheNewStack 出品的电子书《Cloud Native Observability for DevOps Teams》读后感,老书新读,还是另有一番领悟。 阅读原文请转到:https://jimmysong.io/blog/cloud-native-observability-devops/ 最近读了 TheNewStack 发布的电子书《Cloud …...
Vue基础(2)
19、组件之间传递数据 组件与组件之间不是完全独立的,而是有交集的,那就是组件与组 件之间是可以传递数据的 传递数据的解决方案就是 props ComponentA.vue <template><!-- 使用ComponentB组件,并传递title属性 --><h3>…...
Yearning开源MySQL SQL审核平台
一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用. 本地部署,注重隐私,简单高效的MYSQL审计平台。 它可以通过流程审批,实现真实线上环境sql的审核和执行,还可以回滚执行,能够确保线上SQL更新的可靠性…...
《鸿蒙Next应用商店:人工智能开启智能推荐与运营新时代》
在科技飞速发展的当下,鸿蒙Next系统的出现为操作系统领域带来了新的变革与机遇,而人工智能技术的融入更是让其应用商店的智能化推荐和运营迈向了一个全新的高度。 用户画像精准构建 在鸿蒙Next系统中,应用商店可以借助系统强大的权限管理和…...
SSTI注入
ssti漏洞成因 ssti服务端模板注入,ssti主要为python的一些框架 jinja2 mako tornado django,PHP框架smarty twig,java框架jade velocity等等使用了渲染函数时,由于代码不规范或信任了用户输入而导致了服务端模板注入,…...
根据经纬度查询地理位置信息API
API 概述 接口名称:查询地理位置信息V2接口类型:HTTP GET接口地址:https://api.kertennet.com/geography/locationInfo_v2请求编码格式:utf-8 请求说明 请求头部 标签类型必填说明参数示例Content-Typestring是请求的内容类型…...
【知识分享】PCIe5.0 TxRx 电气设计参数汇总
目录 0 引言 1 参考时钟--Refclk 2 发射端通道设计 3 发送均衡技术 4 接收端通道设计 5 接收均衡技术 6 结语 7 参考文献 8 扩展阅读 0 引言 PCI Express Base Specification 5.0的电气规范中,关键技术要点如下: 1. 支持2.5、5.0、8.0、16.0和3…...
Airsim 项目结构分析
Airsim 项目结构分析 本文只分析最核心的 AirLib 项目结构,以及其与 Unreal 项目的关系 假如已经根据 Airsim 主页,克隆了完整项目。 Build on Linux - AirSim 克隆源码 # go to the folder where you clone GitHub projects git clone https://git…...
STM32+W5500+以太网应用开发+003_TCP服务器添加OLED(u8g2)显示状态
STM32W5500以太网应用开发003_TCP服务器添加OLED(u8g2)显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函…...
SQLmap 注入-03 获得用户信息
1: Sqlmap 先进入库,然后进入table, 然后列出column: sqlmap -u "http://192.168.56.133/mutillidae/index.php?pageuser-info.php&usernamexiaosheng&passwordabc&user-info-php-submit-buttonViewAccountDetails" --batch -p username -D …...
Kafka 和 MQ 的区别
1.概述 1.1.MQ简介 消息中间件,其实准确的叫法应该叫消息队列(message queue),简称MQ。其本质上是个队列,有FIFO的性质,即first in first out,先入先出。 目前市场上主流的MQ有三款ÿ…...
若依报错:无法访问com.ruoyi.common.annotation
无法访问com.ruoyi.common.annotation 若依的父工程的pom文件中设置了jdk为1.8,将idea的jdk也改为1.8即可。...
MCU、MPU、SOC、ECU、CPU、GPU的区别到底是什么
MCU、MPU、SOC、ECU、CPU、GPU的区别 参数MCUMPUSoCECUCPUGPU处理能力低至中中至高综合,视具体设计而定专用于汽车控制中至高高(并行能力强)集成度高低高高低(需配合主板使用)低(通常作为外部设备ÿ…...
档案事业与数据要素之间有什么关系?
在数字时代背景下,档案事业正经历着前所未有的变革。随着大数据、云计算、人工智能等技术的快速发展,档案数据已成为重要的基础性战略资源和关键生产要素。那么档案事业与数据要素之间究竟有什么关系? 一、档案数据要素的内涵与价值 数据要…...
HarmonyOS NEXT:华为分享-碰一碰开发分享
随着科技的不断进步,智能手机和智能设备之间的互联互通变得越来越重要。华为作为科技行业的领军企业,一直致力于为用户提供更加便捷、高效的使用体验。HarmonyOS NEXT系统的推出,特别是其中的“碰一碰”功能,为用户带来了前所未有…...
nuxt3项目打包部署到服务器后配置端口号和开启https
nuxt3打包后的项目部署相对于一般vite打包的静态文件部署要稍微麻烦一些,还有一个主要的问题是开发环境配置的.env环境变量在打包后部署时获取不到,具体的解决方案可以参考我之前文章 nuxt3项目打包后获取.env设置的环境变量无效的解决办法。 这里使用的…...
面试:Hadoop,块,HDFS的优缺点,HDFS的读写流程
Hadoop CDH会简化Hadoop的安装 Hue主要用于数据分析和处理,而CM(Cloudera Manager)则主要用于集群的管理和运维。 HDFS HDFS的块 块是 HDFS 系统当中的最小存储单位, 在hadoop2.0和3.0中默认128MB 在HDFS上的文件会被拆分成多个块,每个块作为独立的单…...
Codeforces Round 903 (Div. 3) E. Block Sequence
题解: 想到从后向前DP f[i] 表示从 i ~ n 转化为“美观”所需要的最少的步骤 第一种转移方式:直接删除掉第i个元素,那么就是上一步 f[i 1] 加上 1;第二种转移方式:从第 i a[i] 1 个元素直接转移,不需要增加步数&a…...
web-view环境下,H5页面打开其他小程序
在Web-view环境下,H5页面无法直接打开其他小程序。正确的实现方式是先从H5页面跳转回当前小程序,再由当前小程序跳转到目标小程序。具体实现方法如下: H5页面跳转回小程序时,调用wx.miniProgram.navigateTo()方法。 小程序跳转到…...
C语言之饭店外卖信息管理系统
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之饭店外卖信息管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验…...
【三维分割】Gaga:通过3D感知的 Memory Bank 分组任意高斯
文章目录 摘要一、引言二、主要方法2.1 3D-aware Memory Bank2.2 三维分割的渲染与下游应用 三、实验消融实验应用: Scene Manipulation 地址:https://www.gaga.gallery 标题:Gaga: Group Any Gaussians via 3D-aware Memory Bank 来源:加利福…...
【Linux系统】—— 编译器 gcc/g++ 的使用
【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理(进行宏替换)2.2 编译(生成汇编)2.3 汇编(生成机器可识别代码)2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…...
读西瓜书的数学准备
1,高等数学:会求偏导数就行 2,线性代数:会矩阵运算就行 参考:线性代数--矩阵基本计算(加减乘法)_矩阵运算-CSDN博客 3,概率论与数理统计:知道啥是随机变量就行...
【数据结构篇】顺序表 超详细
目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口: 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…...
Flink把kafa数据写入Doris的N种方法及对比。
用Flink+Doris来开发实时数仓,首要解决是如何接入kafka实时流,下面是参考Doris官方文档和代码,在自己项目开发的实践中总结,包括一些容易踩坑的细节。 目录 Routine Load方法 接入kafka实时数据 踩坑的问题细节 Flink Doris Connector方法 完整示例 Routine Load方法…...
leetcode刷题记录(七十八)——105. 从前序与中序遍历序列构造二叉树
(一)问题描述 105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)105. 从前序与中序遍历序列构造二叉树 - 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一…...
imread和jpeg_read在MATLAB中处理图像时的不同
目录 1.功能差异 2.输出格式 3.颜色空间 4.处理阶段 5.用途 6.性能 1.功能差异 imread:这个函数用于读取各种格式的图像文件(包括JPEG、PNG、BMP等)并将其转换为MATLAB中的矩阵。它适用于读取图像并直接在空间域中进行处理。jpeg_read…...
P9069 [Ynoi Easy Round 2022] 堕天作战 TEST_98 Solution
Description 给定长为 n n n 的序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作,分以下两种: modify ( l , r , k ) \operatorname{modify}(l,r,k) modify(l,r,k):对于所有…...
SCPI命令笔记
1. 读取设备信息 *IDN? 2. 复位仪器 *RST 3. 清除设备的状态寄存器和事件队列 *CLS 4. 读取设备数据(发一个指令,读取一次) READ? 5. 读取设备电压(功能和第4条命令达到一样的效果) MEAS:VOLT? 6. 读取设备电流 (功能和第4条命令达到一样的效果) MEAS:CURR? 7.…...
TCP创建通信前的三次握手(为啥不是两次?)
1.三次握手的过程 客户端发送 SYN(同步)报文 客户端向服务器发送 SYN 标志的数据包,请求建立连接,表示 "你好,我要连接你"。 服务器回复 SYNACK(同步确认)报文 服务器收到 SYN 后&am…...
2024.ailx10的年终总结
已经工作7年啦,今年网络安全行业愈发寒冷,几乎所有友商都在做安全GPT,说实话,AI确实颠覆了传统的网络安全运营,以前需要安服处置告警,以后可能就不需要了,大家日子都不好过,越是简单…...