当前位置: 首页 > news >正文

Debezium日常分享系列之:向 Debezium 连接器发送信号

Debezium日常分享系列之:向 Debezium 连接器发送信号

  • 一、概述
  • 二、激活源信号通道
  • 三、信令数据集合的结构
  • 四、创建信令数据集合
  • 五、激活kafka信号通道
  • 六、数据格式
  • 七、激活JMX信号通道
  • 八、自定义信令通道
  • 九、Debezium 核心模块依赖项
  • 十、部署自定义信令通道
  • 十一、信号动作
  • 十二、记录信号
  • 十三、即席快照信号
  • 十四、特别快照停止信号
  • 十五、增量快照
  • 十六、增量快照暂停信号
  • 十七、增量快照恢复信号
  • 十八、阻止快照信号
  • 十九、应用案例

一、概述

Debezium 信号机制提供了一种修改连接器行为或触发一次性操作(例如启动表的临时快照)的方法。要使用信号触发连接器执行指定操作,可以将连接器配置为使用以下一个或多个通道:

  • 源信号通道:可以发出 SQL 命令将信号消息添加到专门的信令数据集合中。在源数据库上创建的信令数据集合专门用于与 Debezium 进行通信。
  • Kafka信号通道;将信号消息提交到可配置的 Kafka 主题。
  • Jmx信号通道:通过 JMX 信号操作提交信号。
  • 文件信号通道:可以使用文件来发送信号。
  • Custom:将信号提交到实施的自定义通道。当 Debezium 检测到新的日志记录或临时快照记录添加到通道时,它会读取信号并启动请求的操作。

信号传输可与以下 Debezium 连接器一起使用:

  • Db2
  • MongoDB
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server

可以通过设置 signal.enabled.channels 配置属性来指定启用哪个通道。该属性列出了已启用的通道的名称。默认情况下,Debezium 提供以下渠道:source 和 kafka。源通道默认启用,因为增量快照信号需要它。

二、激活源信号通道

默认情况下,Debezium 源信令通道已启用。

必须为要使用它的每个连接器显式配置信令。

程序:

  • 在源数据库上,创建信令数据收集表,用于向连接器发送信号。
  • 对于实现本机变更数据捕获 (CDC) 机制的源数据库(例如 Db2 或 SQL Server),为信令表启用 CDC。
  • 将信令数据集合的名称添加到 Debezium 连接器配置中。在连接器配置中,添加属性 signal.data.collection,并将其值设置为您在步骤 1 中创建的信令数据集合的完全限定名称。

例如,signal.data.collection = inventory.debezium_signals。

信令集合的完全限定名称的格式取决于连接器。

以下示例显示了每个连接器使用的命名格式:

  • Db2:.
  • MongoDB:.
  • MySQL:.
  • Oracle:..
  • PostgreSQL:.
  • SQL Server:..

三、信令数据集合的结构

信令数据集合或信令表存储您发送到连接器以触发指定操作的信号。信令表的结构必须符合以下标准格式。

  • 包含三个字段(列)。
  • 字段按特定顺序排列,如表 1 所示。

表 1. 信令数据集合所需的结构

字段类型描述
id(required)string标识信号实例的任意唯一字符串。为提交到信令表的每个信号分配一个 ID。通常,ID 是 UUID 字符串。可以使用信号实例进行日志记录、调试或重复数据删除。当信号触发 Debezium 执行增量快照时,它会生成带有任意 id 字符串的信号消息。生成的消息包含的 id 字符串与提交信号中的 id 字符串无关。
type(required)string指定要发送的信号类型。可以将某些信号类型与任何可提供信号传输的连接器一起使用,而其他信号类型仅可用于特定的连接器。
data(optional)string指定要传递给信号操作的 JSON 格式的参数。每种信号类型都需要一组特定的数据。

数据集合中的字段名称是任意的。上表提供了建议的名称。如果使用不同的命名约定,请确保每个字段中的值与预期内容一致。

四、创建信令数据集合

可以通过向源数据库提交标准 SQL DDL 查询来创建信令表。

先决条件:

  • 有足够的访问权限在源数据库上创建表。

程序:

  • 向源数据库提交SQL查询,创建符合所需结构的表,如下例所示:
CREATE TABLE <tableName> (id VARCHAR(<varcharValue>) PRIMARY KEY, type VARCHAR(<varcharValue>) NOT NULL, data VARCHAR(<varcharValue>) NULL);

注意:

分配给 id 变量的 VARCHAR 参数的空间量必须足以容纳发送到信令表的信号 ID 字符串的大小。如果 ID 的大小超出可用空间,连接器将无法处理信号。

以下示例显示了创建三列 debezium_signal 表的 CREATE TABLE 命令:

CREATE TABLE debezium_signal (id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL);

五、激活kafka信号通道

可以通过将 Kafka 信令通道添加到 signal.enabled.channels 配置属性,然后将接收信号的主题名称添加到 signal.kafka.topic 属性来启用 Kafka 信令通道。启用信令通道后,将创建 Kafka 消费者来消费发送到配置的信号主题的信号。

可供消费者使用的附加配置:

  • Db2 connector Kafka signal configuration properties
  • MongoDB connector Kafka signal configuration properties
  • MySQL connector Kafka signal configuration properties
  • Oracle connector Kafka signal configuration properties
  • PostgreSQL connector Kafka signal configuration properties
  • SQL Server connector Kafka signal configuration properties

注意:

  • 要使用 Kafka 信令触发大多数连接器的临时增量快照,必须首先在连接器配置中启用源信令通道。
  • 源通道实现了水印机制,以对可能由增量快照捕获并在流恢复后再次捕获的事件进行重复数据删除。
  • 使用信令通道触发启用GTID的只读MySQL数据库的增量快照时,不需要启用源通道。

六、数据格式

Kafka 消息的键必须与 topic.prefix 连接器配置选项的值匹配。

该值是具有类型和数据字段的 JSON 对象。

当信号类型设置为执行快照时,数据字段必须包括下表中列出的字段:

表 2. 执行快照数据字段

字段默认值
typeincremental要运行的快照的类型。目前 Debezium 支持增量和阻塞类型。
data-collectionsN/A一组以逗号分隔的正则表达式,与要包含在快照中的数据集合的完全限定名称相匹配。使用与 signal.data.collection 配置选项所需的格式相同的格式指定名称。
additional-conditionN/A一个可选字符串,指定连接器评估的条件,以指定要包含在快照中的记录子集。注意:此属性已弃用,应由附加条件属性替换。
additional-conditionsN/A一个可选数组,指定连接器评估的一组附加条件,以确定要包含在快照中的记录子集。每个附加条件都是一个对象,指定过滤临时快照捕获的数据的条件。您可以为每个附加条件设置以下属性:数据采集:过滤器应用到的 {data-collection} 的完全限定名称。您可以对每个{data-collection}应用不同的过滤器。过滤:指定数据库记录中必须存在的列值,快照才能包含该列值,例如“color=‘blue’”。快照进程根据过滤器值评估 {data-collection} 中的记录,并仅捕获包含匹配值的记录。分配给过滤器属性的具体值取决于临时快照的类型:对于增量快照,可以指定一个搜索条件片段,例如“color=‘blue’”,快照会将其附加到查询的条件子句中。对于阻塞快照,可以指定完整的 SELECT 语句,例如您可以在 snapshot.select.statement.overrides 属性中设置的语句。

以下示例显示了典型的执行快照 Kafka 消息:

Key = `test_connector`Value = `{"type":"execute-snapshot","data": {"data-collections": ["schema1.table1", "schema1.table2"], "type": "INCREMENTAL"}}`

七、激活JMX信号通道

可以通过将 jmx 添加到连接器配置中的 signal.enabled.channels 属性来启用 JMX 信号,然后启用 JMX MBean 服务器来公开信号 Bean。

程序

  • 使用首选的 JMX 客户端(例如 JConsole 或 JDK Mission Control)连接到 MBean 服务器。

  • 搜索 Mbean debezium.<连接器类型>.management.signals.<服务器>。 Mbean 公开接受以下输入参数的信号操作:

    • p0:信号的 ID。
    • p1:信号的类型,例如执行快照。
    • p2:包含有关指定信号类型的附加信息的 JSON 数据字段。
  • 通过提供输入参数的值来发送执行快照信号。

在 JSON 数据字段中,包含下表中列出的信息:

表 2. 执行快照数据字段

字段默认值
typeincremental要运行的快照的类型。目前 Debezium 支持增量和阻塞类型。
data-collectionsN/A一组以逗号分隔的正则表达式,与要包含在快照中的数据集合的完全限定名称相匹配。使用与 signal.data.collection 配置选项所需的格式相同的格式指定名称。
additional-conditionN/A一个可选字符串,指定连接器评估的条件,以指定要包含在快照中的记录子集。注意:此属性已弃用,应由附加条件属性替换。
additional-conditionsN/A一个可选数组,指定连接器评估的一组附加条件,以确定要包含在快照中的记录子集。每个附加条件都是一个对象,指定过滤临时快照捕获的数据的条件。您可以为每个附加条件设置以下属性:数据采集:过滤器应用到的 {data-collection} 的完全限定名称。您可以对每个{data-collection}应用不同的过滤器。过滤:指定数据库记录中必须存在的列值,快照才能包含该列值,例如“color=‘blue’”。快照进程根据过滤器值评估 {data-collection} 中的记录,并仅捕获包含匹配值的记录。分配给过滤器属性的具体值取决于临时快照的类型:对于增量快照,可以指定一个搜索条件片段,例如“color=‘blue’”,快照会将其附加到查询的条件子句中。对于阻塞快照,可以指定完整的 SELECT 语句,例如可以在 snapshot.select.statement.overrides 属性中设置的语句。

下图显示了如何使用 JConsole 发送信号的示例:

在这里插入图片描述

八、自定义信令通道

信令机制被设计为可扩展的。可以根据需要实施通道,以最适合您环境的方式向 Debezium 发送信号。

添加信令通道涉及几个步骤:

  • 为通道创建一个Java项目来实现通道,并添加Debezium Core作为依赖项。
  • 部署自定义信令通道。
  • 通过修改连接器配置,使连接器能够使用自定义信令通道。

提供自定义信令通道

自定义信号通道是实现 io.debezium.pipeline.signal.channels.SignalChannelReader 服务提供者接口 (SPI) 的 Java 类。例如:

public interface SignalChannelReader {String name(); void init(CommonConnectorConfig connectorConfig); List<SignalRecord> read(); void close(); 
}
  • 读者姓名。要使 Debezium 能够使用通道,请在连接器的 signal.enabled.channels 属性中指定此名称。
  • 初始化通道所需的特定配置、变量或连接。
  • 从通道读取信号。 SignalProcessor 类调用此方法来检索要处理的信号。
  • 关闭所有分配的资源。 Debezium 在连接器停止时调用此方法。

九、Debezium 核心模块依赖项

自定义信令通道 Java 项目具有对 Debezium 核心模块的编译依赖项。必须将这些编译依赖项包含在项目的 pom.xml 文件中,如以下示例所示:

<dependency><groupId>io.debezium</groupId><artifactId>debezium-core</artifactId><version>${version.debezium}</version> 
</dependency>
  • ${version.debezium} 表示 Debezium 连接器的版本。
  • 在 META-INF/services/io.debezium.pipeline.signal.channels.SignalChannelReader 中声明实现

十、部署自定义信令通道

先决条件

  • 有一个自定义信令通道 Java 程序。

程序

  • 要将自定义信号通道与 Debezium 连接器结合使用,请将 Java 项目导出到 JAR 文件,然后将该文件复制到包含要与其一起使用的每个 Debezium 连接器的 JAR 文件的目录。
  • 例如,在典型部署中,Debezium 连接器文件存储在 Kafka Connect 目录 (/kafka/connect) 的子目录中,每个连接器 JAR 位于其自己的子目录中 (/kafka/connect/debezium-connector-db2、/kafka /connect/debezium-connector-mysql 等)。

注意:

  • 要将自定义信号通道与多个连接器一起使用,必须将自定义信号通道 JAR 文件的副本放置在每个连接器的子目录中。

配置连接器以使用自定义信号通道

  • 将自定义信令通道的名称添加到 signal.enabled.channels 配置属性中。

十一、信号动作

可以使用信令来发起以下操作:

  • 将消息添加到日志中。
  • 触发临时增量快照。
  • 停止执行临时快照。
  • 暂停增量快照。
  • 恢复增量快照。
  • 触发临时阻塞快照。
  • 自定义动作。

有些信号并不与所有连接器兼容。

十二、记录信号

可以通过创建具有日志信号类型的信令表条目来请求连接器将条目添加到日志中。处理信号后,连接器将指定的消息打印到日志中。或者,可以配置信号,以便生成的消息包含流坐标。

表 4. 用于添加日志消息的信令记录示例

字段描述
id924e3ff8-2245-43ca-ba77-2af9af02fa07
typelog信号的动作类型。
data{“message”: “Signal message at offset {}”}message 参数指定要打印到日志的字符串。
如果您向消息添加占位符 ({}),它将被替换为流坐标。

十三、即席快照信号

可以通过创建具有执行快照信号类型的信号来请求连接器启动临时快照。处理信号后,连接器运行请求的快照操作。

与连接器首次启动后运行的初始快照不同,临时快照是在连接器已经开始从数据库传输更改事件之后在运行时期间发生的。可以随时启动临时快照。

临时快照可用于以下 Debezium 连接器:

  • Db2
  • MongoDB
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server

表 5. 临时快照信号记录示例

字段
idd139b9b7-7777-4547-917d-e1775ea61d41
typeexecute-snapshot
data{“data-collections”: [“public.MyFirstTable”, “public.MySecondTable”]}

表 6. 即席快照信号消息示例

test_connector{“type”:“execute-snapshot”,“data”: {“data-collections”: [“public.MyFirstTable”], “type”: “INCREMENTAL”, “additional-conditions”:[{“data-collection”: “public.MyFirstTable”, “filter”:“color=‘blue’ AND brand=‘MyBrand’”]}}

其他资源

  • Db2 连接器增量快照
  • MongoDB 连接器增量快照
  • MySQL 连接器增量快照
  • Oracle 连接器增量快照
  • PostgreSQL 连接器增量快照
  • SQL Server 连接器增量快照

十四、特别快照停止信号

可以通过创建具有停止快照信号类型的信号表条目来请求连接器停止正在进行的临时快照。处理完信号后,连接器将停止当前正在进行的快照操作。

表 7. 停止临时快照信号记录示例

字段
idd139b9b7-7777-4547-917d-e1775ea61d41
typestop-snapshot
data{“type”:“INCREMENTAL”, “data-collections”: [“public.MyFirstTable”]}

必须指定信号的类型。数据收集字段是可选的。将数据收集字段留空以请求连接器停止当前快照中的所有活动。如果希望继续执行增量快照,但希望从快照中排除特定集合,请提供要排除的集合或正则表达式的名称的逗号分隔列表。连接器处理信号后,增量快照将继续,但它会排除指定的集合中的数据。

十五、增量快照

增量快照是一种特定类型的临时快照。在增量快照中,连接器捕获您指定的表的基线状态,类似于初始快照。但是,与初始快照不同,增量快照以块的形式捕获表,而不是一次捕获所有表。连接器使用水印方法来跟踪快照的进度。

通过以块的形式而不是在单个整体操作中捕获指定表的初始状态,增量快照比初始快照过程具有以下优势:

  • 当连接器捕获指定表的基线状态时,来自事务日志的近实时事件流将继续不间断。
  • 如果增量快照过程中断,可以从停止点恢复。
  • 可以随时启动增量快照。

十六、增量快照暂停信号

可以通过创建具有暂停快照信号类型的信号表条目来请求连接器暂停正在进行的增量快照。处理完信号后,连接器将停止暂停当前正在进行的快照操作。因此,无法指定数据收集,因为快照处理将暂停在处理信号时的位置。

表 8. 暂停增量快照信号记录示例

字段
idd139b9b7-7777-4547-917d-e1775ea61d41
typepause-snapshot

必须指定信号的类型。数据字段被忽略。

十七、增量快照恢复信号

可以通过创建具有恢复快照信号类型的信号表条目来请求连接器恢复暂停的增量快照。处理信号后,连接器将恢复之前暂停的快照操作。

表 9. 恢复增量快照信号记录示例

字段
idd139b9b7-7777-4547-917d-e1775ea61d41
typeresume-snapshot

十八、阻止快照信号

可以通过创建具有执行快照信号类型和具有值阻塞的 data.type 的信号来请求连接器启动临时阻塞快照。处理信号后,连接器运行请求的快照操作。

与连接器首次启动后运行的初始快照不同,临时阻塞快照在连接器停止从数据库传输更改事件后在运行时发生。您可以随时启动临时阻止快照。

表 10. 阻塞快照信号记录示例

字段
idd139b9b7-7777-4547-917d-e1775ea61d41
typeexecute-snapshot
data{“type”: “blocking”, “data-collections”: [“schema1.table1”, “schema1.table2”], “additional-conditions”: [{“data-collection”: “schema1.table1”, “filter”: “SELECT * FROM [schema1].[table1] WHERE column1 = 0 ORDER BY column2 DESC”}, {“data-collection”: “schema1.table2”, “filter”: “SELECT * FROM [schema1].[table2] WHERE column2 > 0”}]}

表 11. 阻塞快照信号消息示例

test_connector{“type”:“execute-snapshot”,“data”: {“type”: “blocking”}

十九、应用案例

  • Debezium系列之:实现增量快照incremental技术的详细步骤
  • Debezium系列之:基于数据库信号表和Kafka信号Topic两种技术方案实现增量快照incremental技术的详细步骤
  • Debezium系列之:深入理解临时阻塞快照

更多Debezium实战应用可以参考博主Debezium专栏:

  • Debezium专栏,Debezium实战应用详细总结

相关文章:

Debezium日常分享系列之:向 Debezium 连接器发送信号

Debezium日常分享系列之&#xff1a;向 Debezium 连接器发送信号 一、概述二、激活源信号通道三、信令数据集合的结构四、创建信令数据集合五、激活kafka信号通道六、数据格式七、激活JMX信号通道八、自定义信令通道九、Debezium 核心模块依赖项十、部署自定义信令通道十一、信…...

《C#程序设计教程》总复习

一、单项选择题 1.short 类型的变量在内存中占据的位数是 ( )。 A. 8 B. 16 C. 32 D. 64 2.对千 int[ 4,5]型的数组 a, 数组元素 a[2,3] 存在数组第 ( )个位置上。 A. 11 B. 12 C. 14 D. 15 3.设 int 类型变量 x,y,z 的值分别是2、3、6 , 那么…...

为什么ChatGPT选择了SSE,而不是WebSocket?

我在探索ChatGPT的使用过程中&#xff0c;发现了一个有趣的现象&#xff1a;ChatGPT在实现流式返回的时候&#xff0c;选择了SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;而非WebSocket。 那么问题来了&#xff1a;为什么ChatGPT选择了SSE&#xff0c;而不是We…...

appium入门基础

介绍 appium支持在不同平台的UI自动化&#xff0c;如web,移动端,桌面端等。还支持使用java&#xff0c;python&#xff0c;js等语言编写自动化代码。主要用于自动化测试脚本&#xff0c;省去重复的手动操作。 Appium官网 安装 首先必须环境有Node.js用于安装Appium。 总体来…...

jsp介绍

JSP 一种编写动态网页的语言&#xff0c;可以嵌入java代码和html代码&#xff0c;其底层本质上为servlet,html部分为输出流&#xff0c;编译为java文件 例如 源jsp文件 <% page contentType"text/html; charsetutf-8" language"java" pageEncoding&…...

Debian安装k8s记录

Debian安装k8s记录 在master和node上安装kube安装master安装node遇到的问题汇总1、kubelet.service报错 failed to pull image "registry.k8s.io/pause:3.6"2、node重启后报错&#xff0c;failed: open /run/flannel/subnet.env: no such file or directory 在master…...

第6课 用window API捕获麦克风数据并加入队列备用

今天是2024年1月1日&#xff0c;新年的第一缕阳光已经普照大地&#xff0c;祝愿看到这篇文章的所有程序员或程序爱好者都能在新的一年里持之以恒&#xff0c;事业有成。 今天也是我加入CSDN的第4100天&#xff0c;但回过头看一看&#xff0c;这么长的时间也没有在CSDN写下几篇…...

图片预览 element-plus 带页码

vue3、element-plus项目中&#xff0c;点击预览图片&#xff0c;并显示页码效果如图 安装 | Element Plus <div class"image__preview"><el-imagestyle"width: 100px; height: 100px":src"imgListArr[0]":zoom-rate"1.2":max…...

【小白专用】winform启动界面+登录窗口 更新2024.1.1

需求场景&#xff1a;先展示启动界面&#xff0c;然后打开登录界面&#xff0c;如果登录成功就跳转到主界面 首先在程序的入口路径加载启动界面&#xff0c;使用ShowDialog显示界面&#xff0c; 然后在启动界面中添加定时器&#xff0c;来实现显示一段时间的效果&#xff0c;等…...

自动化网络故障修复管理

什么是故障管理 故障管理是网络管理的组成部分&#xff0c;涉及检测、隔离和解决问题。如果实施得当&#xff0c;网络故障管理可以使连接、应用程序和服务保持在最佳水平&#xff0c;提供容错能力并最大限度地减少停机时间。专门为此目的设计的平台或工具称为故障管理系统。 …...

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候&#xff0c;你都有可能需要撤消刚才所做的某些操作。接下来&#xff0c;我们会介绍一些基本的撤消操作相关的命令。请注意&#xff0c;有些操作并不总是可以撤消的&#xff0c;所以请务必谨慎小心&#xff0c;一旦失误&#xff0c…...

Oracle 12c rac 搭建 dg

环境 rac 环境 &#xff08;主&#xff09;byoradbrac 系统版本&#xff1a;Red Hat Enterprise Linux Server release 6.5 软件版本&#xff1a;Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit byoradb1&#xff1a;172.17.38.44 byoradb2&#xff1a;…...

Cisco模拟器-交换机端口的隔离

设计要求将某台交换机的端口划分在不同的VLAN。以实现连接在相同VLAN端口上的计算机可以通信&#xff0c;而连接在不同VLAN端口上的计算机无法通信的目的。 通过设计&#xff0c;一方面可以加强计算机网络的安全&#xff0c;另一方面通过隔绝不同VLAN间的广播包也可以提高网络…...

zdppy_api框架快速入门

概述 zdppy_api是一款为了快速开发而生的&#xff0c;基于异步的&#xff0c;使用简单的Python后端API接口开发框架。 本框架的目标是让Python后端开发变得越来越简单&#xff0c;直到发现原来还可以更简单&#xff01; 一切都是为了提高开发效率&#xff01;&#xff01;&…...

https证书配置过程

相关网址&#xff1a; FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站 ACME v2证书自动化快速入门 acme.sh简单教程-CSDN博客...

如何用C语言程序生成任意手性(即具有任意m和n值),任意长度的碳纳米管,并输出三维空间坐标呢?

如何用C语言程序生成任意手性&#xff08;即具有任意m和n值&#xff09;&#xff0c;任意长度的碳纳米管&#xff0c;并输出三维空间坐标呢&#xff1f; 生成任意手性、任意长度的碳纳米管可以使用 Chirality Vector 和 Unit Vector 的概念来表示。Chirality Vector (n, m) 描述…...

C++每日一练(8):图像相似度

题目描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。…...

C++面试宝典第12题:数组元素相除

题目 从控制台输入若干个整数作为数组,将数组中每一个元素除以第一个元素的结果,作为新的数组元素值。比如:可以先输入3,作为数组元素的个数;然后输入3个整数,作为数组元素的值。 解析 这道题本身并不复杂,但里面隐藏了不少“坑点”和“雷区”,主要考察应聘者全面思考问…...

oCPC实践录 | 目标ROI的出价与转化回传调控算法

这篇文章我们聊聊广告主在oCPC下&#xff0c;怎么调控自己的出价或者回传转化优化自己的ROI。 ROI是广告主最关心的指标了&#xff0c;根据oCPC出价的基本原理ocpc_bid pcvr * given_cpa * k, 广告主在整个出价中有两个可以控制的变量来影响出价&#xff0c;一个是直接的give…...

百倍量化之Dbcd-v2中性策略

Dbcd-v2中性策略 1. 指标含义 该指标主要是计算偏置的因子,并根据偏置的平均来分析这个股票的稳定性。相比于v1,策略是更换了dbcd的计算方式 第一步主要操作就是计算当前值和前段时间的平均值的偏置 ma = bt.indicators.SimpleMovingAverage(self.data, period=self.p.peri…...

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:函数属性]

分类目录&#xff1a;《系统学习Python》总目录 如果我们没有在使用Python3.X并因此无法利用一条nonlocal语句&#xff0c;或者我们希望代码具有可移植性&#xff0c;能在Python3.X和Python2.X上同时工作一一我们仍然能够针对某些可改变的状态使用函数属性来避免使用全局变量和…...

逻辑卷学习后续----------缩容

一、缩容&#xff1a;缩减大小 ext4可以 &#xff0c; xfs无法缩减&#xff0c;缩减会影响业务 1.解挂载 2.检查文件系统完整性 3.缩减文件系统 4.缩减逻辑卷上下一致 5.再挂载回去 添加磁盘 文件系统只能装ext4 缩减文件系统 resize2fs 挂载失败需要重新安装文件系统…...

15-网络安全框架及模型-BLP机密性模型

目录 BLP机密性模型 1 背景概述 2 模型原理 3 主要特性 4 优势和局限性 5 困难和挑战 6 应用场景 7 应用案例 BLP机密性模型 1 背景概述 BLP模型&#xff0c;全称为Bell-LaPadula模型&#xff0c;是在1973年由D.Bell和J.LaPadula在《Mathematical foundations and mod…...

[C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计

源码地址&#xff1a; github地址&#xff1a;https://github.com/Ahmednull/L2CS-Net L2CS-Net介绍&#xff1a; 眼睛注视&#xff08;eye gaze&#xff09; 是在各种应用中使用的基本线索之一。 它表示用户在人机交互和开放对话系统中的参与程度。此外&#xff0c;它还被用…...

[2024区块链开发入门指引] - 比特币与区块链诞生

一份为小白用户准备的免费区块链基础教程 工欲善其事,必先利其器 Web3开发中&#xff0c;各种工具、教程、社区、语言框架.。。。 种类繁多&#xff0c;是否有一个包罗万象的工具专注与Web3开发和相关资讯能毕其功于一役&#xff1f; 参见另一篇博文&#x1f449; 2024最全面…...

【大数据面试知识点】Spark中的累加器

Spark累加器 累加器用来把Executor端变量信息聚合到Driver端&#xff0c;在driver程序中定义的变量&#xff0c;在Executor端的每个task都会得到这个变量的一份新的副本&#xff0c;每个task更新这些副本的值后&#xff0c;传回driver端进行merge。 累加器一般是放在行动算子…...

深度学习核心技术与实践之深度学习基础篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分 神经网络 生物神经元的特点 &#xff08;1&#xff09;人体各种神经元本身的构成很相似 &#xff08;2&#xff09;早期的大脑损伤&#xff0c;其功能可能是以其他部位的神经元来代替实现的 &#xff08;3&#x…...

Kafka安装及简单使用介绍

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…...

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850

20231229在Firefly的AIO-3399J开发板的Android11使用挖掘机的DTS配置单前后摄像头ov13850 2023/12/29 11:10 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.…...

九台虚拟机网站流量分析项目启动步骤

文章目录 零、操作概述一、服务器分配二、9台虚拟机相互免密登录三、Nginx(反向代理服务器)四、Tomcat(Web服务器)五、测试Nginx反向代理是否成功六、Flume集群配置七、修改LogDemo项目八、项目1703FluxStorm九、Hadoop集群十、整个集群的启动十一、部署项目十二、测试项目…...

深圳营销型网站建设服务/西安分类信息seo公司

一个应用&#xff0c;应该保持一套统一的样式&#xff0c;包括Button、EditText、ProgressBar、Toast、Checkbox等各种控件的样式&#xff0c;还包括控件间隔、文字大小和颜色、阴影等等。web的样式用css来定义&#xff0c;而android的样式主要则是通过shape、selector、layer-…...

软件技术主要学什么就业前景/南宁网站运营优化平台

前后端分离 概念&#xff1a; ​ 1.运行阶段&#xff1a;前端代码和后端代码分开运行 ​ 2.开发阶段&#xff1a;前后端约定好交互数据&#xff0c;实现并行开发和测试 ​ 3.请求方式&#xff1a; ​ 1.get&#xff1a;查询单个对象 ​ 2.post&#xff1a;修改 ​ 3.put…...

北京优化互联网公司/东莞seo外包公司哪家好

为了表明并未放弃Mac平台的发展&#xff0c;苹果于今天分享了关于Mac用户数量的最新数据。根据外媒TechCrunch提供的一份简报上&#xff0c;苹果公司透露目前Mac活跃用户非常接近于1亿。在这个被微软Windows系统所支配的桌满系统中&#xff0c;相对较低的Mac用户数量并没有出乎…...

怎样接做网站的活/关键词竞价排名

垃圾回收方式 ① 标记清除 工作原理&#xff1a;是当变量进入环境时&#xff0c;将这个变量标记为“进入环境”。当变量离开环境时&#xff0c;则将其标记为“离开环境”。标记“离开环境”的就回收内存。 ② 引用计数 工作原理&#xff1a;跟踪记录每个值被引用的次数。一旦没…...

用rp做网站不用写前段代码/长沙seo网站

killall也可以跟进程名killall – kill processes by namekillall sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent.kill 是要据进程号来杀死进程&#xff0c;加-9强制杀死结合ps 或 pgreppgrep loo…...

关于网站备案的44个问题/seo用什么工具

需要继承 View 或 ViewGroup 需要了解自定义的类中&#xff0c;需实现三种方法&#xff08;在MainActivity的onResume方法之后进行的&#xff09; /*** 测量 摆放 绘制* measure -> layout -> draw* onMeasure onLayout …...