Debezium发布历史109

原文地址: https://debezium.io/blog/2021/09/16/debezium-1-7-cr1-released/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Debezium 1.7.0.CR1 Released
September 16, 2021 by Gunnar Morling
releases mysql postgres sqlserver oracle outbox

我很高兴地宣布 1.7.0.CR1 !

在这个版本中,我们重新设计了在快照处理过程中如何处理列过滤器,对Debezum容器图像进行了更新,以使用Fedura34作为它们的基础,对mysql的支持INVISIBLE 柱,还有更多。

截图过程中的柱滤波
虽然不同的Debezu连接器已经有能力将捕获的表的特定列排除在更改事件之外,但这些过滤器只在连接器中处理数据时才应用。对于初始快照,现在已经实现了一种更有效的方法:将执行定制的SQL选择语句,只获取实际包含的列( DBZ-2525 )。这使业绩显著提高,例如排除了较大的业绩。BLOB 变化事件的列。

更新容器图像库
… 德贝兹容器图像 对于阿帕奇卡夫卡、卡夫卡连接和阿帕奇动物园管理员来说,他们是基于Fedura34最小容器底座图像( DBZ-3939 )。由于不再维持以前使用的基图(来源于中心7),这一改变变得很有必要。虽然这一变化对大多数Debez铵用户来说是透明的,但对于那些从Debez铵中获得自己自定义图像的用户来说,可能需要作出一些调整,例如。使用操作系统的包管理器安装进一步的包。请参阅 释放说明 更多的细节。

进一步的修正
当我们接近1.7的最终版本时,大多数的更改都集中在修复错误和使代码基础成熟上。一些已解决的问题包括:

支持INVISIBLE 自mysql8.0.23( DBZ-3623 );我们也使用了这个八度来更新mysql的Debezum示例图像到8.0版本( DBZ-3936 )

SQL服务器允许使用自定义连接工厂( DBZ-4001 )

对DML和DDL的mysql分析的几个修复( DBZ-3969 , DBZ-3984 )及甲骨文( DBZ-3892 , DBZ-3962 )

一起来, 47个问题 已经为这个版本做好了准备。非常感谢所有投稿人: 阿尼莎 , 兰巴 , 鲍勃·罗丹 , 卡米尔歌曲 , 克兰福德 , Dhrubajyoti , 贡纳·莫林 , , 侯赛因·安萨里 , 因德拉舒克拉 , 杰克布切切克 , , 伊日诺沃特尼 , 伊里·帕坎奇c , 卡特琳娜·加里耶娃 , 勒内·克纳 ,以及 张元 .

展望未来,我们计划在几天内再做一次CR(候选版本)发布,随后是在月底完成1.7.7.0.最后的发布。我们将主要关注的是错误修复和一些特定的性能优化。同时也会有一些令人兴奋的改进 去贝兹界面 ,它应该包含在1.7最终版本中:支持单消息转换(SMTS)的配置,以及配置主题创建设置的能力。

与此同时,我们正在制定Debezum1.8的路线图,计划在今年年底发布。请在下面的评论或 邮寄清单 如果您想为这个版本提出特定的特性请求。

原文地址: https://debezium.io/blog/2021/09/22/deep-dive-into-a-debezium-community-connector-scylla-cdc-source-connector/

我们开发了一个高性能的Nosql数据库 水仙 与阿帕奇卡珊德拉、亚马逊发电机和雷迪斯兼容。今年早些时候,我们开始支持 更改数据采集 在"Scylla4.3"里。这个新功能似乎是阿帕奇卡夫卡生态系统的完美结合,所以我们开发了 疾病预防控制中心源连接器 使用德贝兹框架。在这篇博客中,我们将介绍"Scylla"CDC的基本结构,我们选择"Debezum"框架的原因,以及我们做出的设计决定。

CDC对"Scylla"的支持
更改数据捕获(cds)使用户可以追踪他们的""""数据库中的数据修改。它可以很容易地在任何"Scylla"表上启用/禁用。打开它后,将创建所有修改(插入、更新、删除)的日志并自动更新。

当我们设计在"Scylla"中实施CDC时,我们希望能够更容易地使用CDC的日志。因此,疾病预防控制中心的日志存储为常规的Scyl表,任何现有的CQL驱动程序都可以访问。当对启用了疾病预防控制中心的表进行修改时,有关操作的信息将保存到疾病预防中心的日志表中。

下面是它的一个简单演示:首先,我们将创建一个能够使用疾病预防控制中心的表格:

CREATE TABLE ks.orders(
user text,
order_id int,
order_name text,
PRIMARY KEY(user, order_id)
) WITH cdc = {‘enabled’: true};
接下来,让我们执行一些操作:

INSERT INTO ks.orders(user, order_id, order_name)
VALUES (‘Tim’, 1, ‘apple’);

INSERT INTO ks.orders(user, order_id, order_name)
VALUES (‘Alice’, 2, ‘blueberries’);

UPDATE ks.orders
SET order_name = ‘pineapple’
WHERE user = ‘Tim’ AND order_id = 1;
最后,让我们看看修改后的表的内容:

SELECT * FROM ks.orders;

user | order_id | order_name
------±---------±------------
Tim | 1 | pineapple
Alice | 2 | blueberries
仅看此表,您无法重构发生的所有修改。更新前蒂姆的订单名。让我们看一下疾病预防控制中心的日志,它可以很容易地作为一个表(为了清楚起见,有些列被截断了):

SELECT * FROM ks.orders_scylla_cdc_log;

cdc s t r e a m i d ∣ c d c stream_id | cdc streamidcdctime | | cdc o p e r a t i o n ∣ o r d e r i d ∣ o r d e r n a m e ∣ u s e r − − − − − − − − − − − − − − − + − − − − − − − − − − + − . . . − + − − − − − − − − − − − − − − − + − − − − − − − − − − + − − − − − − − − − − − − − + − − − − − − − − − − 0 x 2 e 46 a . . . ∣ 7604... ∣ . . . ∣ 2 ∣ 1 ∣ a p p l e ∣ T i m 0 x 2 e 46 a . . . ∣ 8 f d c . . . ∣ . . . ∣ 1 ∣ 1 ∣ p i n e a p p l e ∣ T i m 0 x 41400... ∣ 808 e . . . ∣ . . . ∣ 2 ∣ 2 ∣ b l u e b e r r i e s ∣ A l i c e 在 疾 病 预 防 控 制 中 心 的 日 志 中 可 以 看 到 这 三 种 操 作 。 有 两 个 插 入 ( c d c operation | order_id | order_name | user ---------------+----------+-...-+---------------+----------+-------------+---------- 0x2e46a... | 7604... | ... | 2 | 1 | apple | Tim 0x2e46a... | 8fdc... | ... | 1 | 1 | pineapple | Tim 0x41400... | 808e... | ... | 2 | 2 | blueberries | Alice 在疾病预防控制中心的日志中可以看到这三种操作。有两个插入(cdc operationorderidordernameuser++...++++0x2e46a...7604......21appleTim0x2e46a...8fdc......11pineappleTim0x41400...808e......22blueberriesAlice(cdcoperation = 2 )及一次更新(cdc o p e r a t i o n = 1 ) 。 对 于 每 个 操 作 , 其 时 间 戳 也 保 存 在 c d c operation = 1 )。对于每个操作,其时间戳也保存在cdc operation=1),cdctime 圆柱。时间戳编码为基于时间的UUID值,由 RFC4122 说明书,可以使用""""""驱动程序中的辅助方法进行解码。

选择去贝兹
如前一部分所示,可以很容易地作为一个常规表查询"Scylla"CDC。为了获得最新的实时操作,您可以用适当的时间范围对表进行轮询。为了方便起见,我们开发了客户机库 爪哇河 和 前进 .

当我们考虑到我们的客户如何能够访问cdf日志时,使用它和卡夫卡看起来是最容易使用的方法。因此,我们决定开发一个来源连接器为"Scylla"CDC。

对于我们的第一个验证概念,我们使用 卡夫卡连接API .这个原型对我们确定连接器是否可以横向扩展至关重要(稍后在本博客中描述)。

然而,我们很快意识到,如果只使用卡夫卡连接API,我们将不得不重新实现其他连接器中已经存在的许多功能。我们也希望我们的连接器成为一个良好的卡夫卡社区公民,坚持最佳做法和惯例。这就是为什么我们选择德贝兹!

有鉴于此,当您启动"Scyc"源连接器时,配置参数马上就会熟悉,因为其中许多参数与其他德贝兹连接器相同。生成的数据更改事件有相同的 信封 其他德贝兹接头产生的结构。这种相似性允许使用很多标准的德贝兹特性,例如: 新记录状态提取 .

事件陈述
在我们决定使用德贝佐姆框架之后,我们研究了""""CDC的业务应该如何以德贝佐姆的信封格式来表示。

信封格式包括以下方面:

op -业务类型:c 为了创造,u 为了更新,d 删除和删除r 供阅读

before-事件发生前的行状态

after-事件发生后的行状态

source-活动的元数据

ts_ms-连接器处理事件的时间

把"Scylla"的行动映射到op 场地很容易:c 插入时,u 为了更新,d 删除。

我们决定删除跨多个行的事件,例如范围删除:

DELETE FROM ks.table
WHERE pk = 1 AND ck > 0 AND ck < 5
代表此类业务将使格式不必要地复杂化,以容纳额外的范围信息。此外,它还会打破人们对信封代表对一行的修改的期望。

在ScyllaCDC"中,范围删除在"CDC"表中表示为两行:第一行编码关于删除范围开始的信息(在上面的例子中:pk = 1, ck > 0 )和第二行编码删除范围的末尾(在上面的例子中:pk = 1, ck < 5 )。关于该范围中存在的每个行的信息不会持久化。这相当于一个事实,在"Scylla"中删除会在数据库中生成一个墓碑。

在默认情况下,"Scylla"的CDC只存储一个操作的主键和修改过的列。例如,假设我创建了一个表并插入了一行:

CREATE TABLE ks.example(
pk int,
v1 int,
v2 int,
v3 int,
PRIMARY KEY(pk)) WITH cdc = {‘enabled’: true};

INSERT INTO ks.example(pk, v1, v2, v3)
VALUES (1, 2, 3, 4);
你可以发布另一个插入语句,它将覆盖一些列:

INSERT INTO ks.example(pk, v1, v3)
VALUES (1, 20, null);
…v2 在此查询之后,列保持不变,我们没有关于其先前值的任何信息。

我们必须能够表示三种可能性:一个列没有修改,一个列被指定为NULL 给值或列指定了一个非NULL值。我们选择的代表受到了 卡珊德拉德贝兹接头 ,其工作方法是将列的值包装在一个结构中:

“v1”: {“value”: 1},
“v2”: null,
“v3”: {“value”: null}
Anull 结构值表示列未被修改(v2 )。如果列被指定为NULL 价值(v3 ),将会有一个结构NULL value 场地。一个非新的列分配(v1 填妥)value 场地。这种格式使我们能够正确地表示所有的可能性并区分分配NULL 以及不修改。

然而,大多数汇连接器无法正确解析这样的结构。因此,我们决定发展我们自己的SMT,基于德贝齐斯的 新记录状态提取 .我们的 ScyllaExtractNewState SMT的工作原理是应用德贝兹的新记录状态提取{“value”: …​} 结构(以无法辨别为代价)NULL 值和缺列值):

“v1”: 1,
“v2”: null,
“v3”: null
"Scylla"的CDC也支持记录每一个操作的前和后的图像(增加成本)。我们计划在未来版本的"Scylla"CDC源连接器中增加对它们的支持。

水平尺度
即使在概念验证阶段,出色的表现也是最重要的要求。Scylla数据库可以扩展到数百个节点和PBS数据,因此很明显,一个卡夫卡连接工作节点(甚至多线程)无法处理大的Scylla集群的负载。

谢天谢地,我们在实施"Scylla"CDC的功能时考虑到了这一点。一般来说,您可以将更改数据捕获看作是更改的时间顺序队列。为了允许横向扩展,"Scylla"维护了一组被称为流的多个变化的时间顺序队列。如果只有一个消费者使用cdf日志,它就必须查询所有流,以便正确读取所有更改。这种设计的一个好处是,您可以引入额外的消费者,为每个消费者分配一个分离流集。因此,您可以大大增加处理的计算机控制中心日志的并行性。

这就是我们在"Scylla"CDC源连接器中实现的方法。启动时,连接器首先读取所有可用流的标识符。其次,它将它们分布在许多卡夫卡连接任务中(可通过tasks.max ).

每个创建的卡夫卡连接任务(可以在一个单独的卡夫卡连接节点上运行)都从其分配的流集中读取cdf的更改。如果任务数量增加一倍,每个任务只需要读取流数量的一半,即数据吞吐量的一半,这样就有可能处理更高的负载。

解决大型河流清点问题
在设计"Scylla"中的CDC功能时,我们不得不仔细挑选将要创建的流的数量。如果我们选择太少的流,那么使用者可能无法跟上单个流的数据吞吐量。这也会减缓插入、更新和删除操作的速度,因为许多并发操作将会为访问单个流而斗争。然而,如果"Scylla"创建了太多的流,那么消费者就不得不对"Scylla"(覆盖每个流)发布大量的查询,从而造成不必要的负载。

在"Scylla"控制中心的实施过程中number_of_nodes * number_of_vnodes_per_node * number_of_shards 每个集群的流量。虚拟节点的数量是指"Scyla"使用的是 环结构 ,每个节点默认有256个V节点。每个"Scyla"节点由几个独立的碎片组成,其中包含它们在节点总数据中的份额。通常,每个超线程或物理核心都有一个碎片。

例如,如果您创建一个4节点I3.金属(每个节点72个VCSP)的"Scyla"集群,每秒大约可以运行600K操作(一半插入,一半选择),这将是:4 * 256 * 72 = 73728 流。

我们很快意识到,在更大的集群中,这些流可能是一个问题:

对于"Scyla"来说,太多的查询–每个流一个查询

太多卡夫卡连接补偿-每个流一个偏移。存储补偿意味着连接器可以从崩溃后的最后保存位置恢复。

为了缓解这些问题,我们决定对客户端的流进行分组。我们选择了按V节点对流进行分组。从这个数字减少到number_of_nodes * number_of_vnodes_per_node * number_of_shards 到number_of_nodes * number_of_vnodes_per_node .在4节点I的情况下,金属意味着从73728减少到1024:仅1024次查询"Scyla"和1024次抵消存储在卡夫卡上。

然而,我们仍然对存储在卡夫卡上的补偿数量感到不安。当我们查看其他连接器时,大多数连接器只存储一个偏移量,或每个复制表最多存储几十个偏移量(作为一个可伸缩性有限的效果)。

要理解为什么在卡夫卡连接上存储成千上万条流可能是一个问题,让我们看看它在引擎盖下是如何工作的。源连接器创建的每个卡夫卡连接记录都包含一个键/值偏移,例如:键-my_table ; offset -25 ,这表示连接器在my_table .定期(由offset.flush.interval.ms ),这些补偿变成了一个叫做卡夫卡的话题connect-offsets ,像卡夫卡一样。

不幸的是,卡夫卡不是一个钥匙/价值存储库。当连接器启动时,它必须扫描在connect-offsets 去找它需要的人。当它更新先前保存的偏移量时,它只需将新值追加到此主题,而不删除先前的条目。对于只有一个偏移量的连接器来说,这并不是问题–当每分钟更新一次时,这个主题一周后大约会容纳10,000条消息。然而,在Scycda源连接器的情况下,这个数字可能是几个数量级更大!

幸运的是,这个问题可以很容易地通过在connect-offsets 专题。使用默认配置retention.ms 7天和7天segment.bytes 在1GB的范围内,这个话题在仅仅几个小时之后就会发展到几百兆字节(使用一个有几十个节点和非常小的Scyrala集群)。offset.flush.interval.ms )。这使得连接器启动时间变慢,因为它必须在启动/重新启动后扫描整个偏移主题。通过调整segment.bytes ,segment.ms 或cleanup.policy ,retention.ms 我们缓解了这个问题,大大减少了connect-offsets主题尺寸。前两个选项指定日志压缩过程的频率。当一个段被压缩时,所有使用相同键的消息都将减少到最新的消息(最新的偏移量)。另外,设置一个较短的保留时间(但一个比"Scyla"控制中心的保留时间更长)被证明是减少偏移主题尺寸的一个好选择。

基准:接近线性尺度
为了验证我们的连接器实际上能够水平地扩展,我们执行了一个基准来测量在越来越大的卡夫卡连接集群上的"Scyla"CDC源连接器的最大吞吐量。

首先,我们启动了一个单节点I3.4倍的"Scyla"集群(以""""官方"为基础)。接下来,我们将5,000万行(总尺寸为5,33GB)插入到启用CDC的表中。稍后,我们启动了阿帕奇卡夫卡2.6.0集群和卡夫卡连接集群,它们位于1、3或5个节点(R5N.2x)上。我们启动了"Scyrac"CDC的源连接器,以使用先前填充的CDC启用表中的数据,并测量了生成所有5000万卡夫卡信息所花费的时间。

我们的连接器能够将吞吐量按线性的比例增加:
图片来自官网原文
在这里插入图片描述

卡夫卡集群大小 产量 加速
1个节点

46k/s

1x

3个节点

129k/s

2.8x

5个节点

215k/s

4.7x

结论
在这篇博文中,我们深入研究了"Scylla"CDC源连接器的开发。我们首先概述了在"Scylla"实施CDC的情况。我们讨论了我们选择Debezum而不仅仅是卡夫卡连接API来构建连接器的原因,这反过来又让用户和卡夫卡习以为常。接下来,我们研究了我们遇到的两个问题:如何表示""""更改并使连接器具有可伸缩性。

我们非常兴奋地继续改进我们的连接器,使其具有更多的性能。我们热切地期待着看到德贝兹生态系统的发展,以及最新版本的德贝兹的集成功能。

如果您想自己查看连接器,则在这里可以使用带源代码的github存储库: 信息来源连接器 .你可以在这里了解更多关于"Scylla"的信息: 网站 .

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法

DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段&#xff0c;通过视角相关扩散模型执行得分蒸馏采样&#xff0c;解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…

喜报!麒麟信安操作系统通过GB18030-2022国家标准

《信息技术 中文编码字符集》强制性国家标准GB 18030-2022将于2023年8月1日起全面实施。麒麟信安积极推动电子信息产业标准化工作&#xff0c;快速完成标准适配&#xff0c;近日&#xff0c;麒麟信安服务器操作系统V3、麒麟信安桌面操作系统V3顺利通过GB18030-2022《信息技术 中…

通过dockerfile 生成自定义nginx镜像

通过dockerfile生成自定义nginx镜像 &#xff01;&#xff01;&#xff01;docker 必须在linux环境下才能进行如果你是window则需要装虚拟机 新建一个文件名字为Dockerfile&#xff0c;无需后缀 文件完整名就是Dockerfile 编写dockerfile FROM nginx RUN echo hello nginx!…

基于ADAU1777 DSP有源降噪(主动降噪)耳机设计

加我微信hezkz17可以申请加入数字音频系统研究开发交流答疑群&#xff0c;加群附加赠送DSP音频项目核心开发资料&#xff0c;TWS降噪蓝牙耳机项目资料 1 ADU1777芯片介绍 2 DSP 三种主动降噪方式 3 sigma开发方式

9-树-从前序与中序遍历序列构造二叉树

这是树的第9篇算法&#xff0c;力扣链接。 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,…

06 - python操作xml

认识XML 与HTML很像&#xff0c;是一种将数据存储在标记之间的标记语言&#xff0c;用户可以自定义自己的标记。 XML文件可以表示称为&#xff1a;XML树。这个XML树从根元素开始&#xff0c;根元素进一步分支到子元素。XML文件的每个元素都是XML树的一个节点&#xff0c;没有…

雷达DoA估计的跨行业应用--麦克风阵列声源定位(Matlab仿真)

一、概述 麦克风阵列&#xff1a; 麦克风阵列是由一定数目的声学传感器&#xff08;麦克风&#xff09;按照一定规则排列的多麦克风系统&#xff0c;而基于麦克风阵列的声源定位是指用麦克风拾取声音信号&#xff0c;通过对麦克风阵列的各路输出信号进行分析和处理&#xff0c;…

背景样式de七七八八

一&#xff0c;简介 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1.1背景颜色&#xff08;background-color&#xff09; background-color&#xff1a;transparent/color&#xff1b; 默认值为transparent&#xff08;透明的&#xff…

MacBook有必要装清理软件吗?CleanMyMac的一些主要特点

MacBook是苹果公司的一款高端笔记本电脑&#xff0c;但是&#xff0c;随着使用时间的增长&#xff0c;MacBook也会出现一些问题&#xff0c;比如运行缓慢、卡顿、垃圾文件堆积、磁盘空间不足等。这些问题不仅影响了用户的使用体验&#xff0c;也可能对MacBook的寿命和安全性造成…

Vue3.0(二):Vue组件化基础 - 脚手架

Vue组件化基础 - 脚手架 Vue的组件化 我们在处理一些任务量比较庞大的工作时候&#xff0c;会将工作内容进行拆分&#xff0c;分步骤完成 而组件化的思想正式如此&#xff0c;对于一个庞大的项目&#xff0c;我们可以将其拆分成一个个的小功能&#xff0c;分步骤进行实现 组…

迅为RK3588开发板ubuntu和window互传图形界面直接拖拽进行文件传输

确保以及安装了 VMware Tools。如下图所示表示已安装过了。 和 windows 端文件夹间传输一样直接拖拽进去即可&#xff0c;如下图所示&#xff1a; 也可拖拽到终端&#xff0c;如下图所示&#xff1a; 更多内容可以B站搜索迅为RK3588开发板

【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“

使用idea运行项目&#xff0c;显示错误信息如下&#xff1a; 原因是&#xff1a;idea配置的maven加载不到autoconfigure。 解决方案一&#xff1a; 第6步绕过证书语句如下&#xff1a; -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue 打开终端&am…

算法学习——华为机考题库10(HJ64 - HJ69)

算法学习——华为机考题库10&#xff08;HJ64 - HJ69&#xff09; HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小&#xff0c;显示歌曲列表的时候每屏只能显示几首歌曲&#xff0c;用户要通过上下键才能浏览所有的歌曲。为了简化处理&#xff0c;假设每屏只能显示4首歌曲&a…

2024最新版鸿蒙HarmonyOS开发工具安装使用指南

2024最新版鸿蒙HarmonyOS开发工具安装使用指南 By JacksonML 0. 什么是鸿蒙Harmony OS&#xff1f; 华为鸿蒙系统&#xff08;HUAWEI Harmony OS&#xff09;&#xff0c;是华为公司在2019年8月9日于东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的分…

JavaWeb:调出Maven面板

问题描述 情况说明&#xff1a;IDEA中找不到Maven面板&#xff0c;Maven面板如下图所示&#xff1a; 解决方案 选择 View > Appearance > Tool Window Bars&#xff1a; 然后就会出现Maven面板了。

SSO单点登录系统?or 统一身份中台?

单点登录&#xff08;Single Sign-On&#xff0c;简称 SSO&#xff09;是解决多个应用系统多次认证登录的一种方式&#xff0c;从应用侧切入&#xff0c;提高员工使用便利性&#xff0c;但未解决身份&#xff08;账号&#xff09;真正统一。传统路径通过属性映射方式完成各个账…

Hack The Box-Challenges-Misc-M0rsarchive

解压压缩包&#xff0c;里面是一张图片和一个新的zip文件 图片放大后的图案是----. 考虑到为莫斯密码&#xff0c;将其解密 密码为9&#xff0c;继续解压缩包 又是一张莫斯密码图加压缩包&#xff0c;写一段脚本去解密图片中的莫斯密码&#xff0c;并自动解压缩包 import re i…

MQ面试题整理(持续更新)

1. MQ的优缺点 优点&#xff1a;解耦&#xff0c;异步&#xff0c;削峰 缺点&#xff1a; 系统可用性降低 系统引入的外部依赖越多&#xff0c;越容易挂掉。万一 MQ 挂了&#xff0c;MQ 一挂&#xff0c;整套系统崩 溃&#xff0c;你不就完了&#xff1f;系统复杂度提高 硬生…

HiveSQL题——array_contains函数

目录 一、原创文章被引用次数 0 问题描述 1 数据准备 2 数据分析 ​编辑 3 小结 二、学生退费人数 0 问题描述 1 数据准备 2 数据分析 3 小结 一、原创文章被引用次数 0 问题描述 求原创文章被引用的次数&#xff0c;注意本题不能用关联的形式求解。 1 数据准备 i…

本次安装Visual Studio 所用的安装程序不完整。请重新运行VisualStudio安装程序以解决此问题

今天点开VS的时候遇到了这个问题 因为昨天升级到一半电脑关机了&#xff0c;今天打开软件遇到如下错误&#xff0c; 解决办法很简单&#xff0c;找到安装目录进入Installer文件夹 我的目录在C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vs_installer.exe…