canal简介及canal部署、原理和使用介绍

2023-11-18

阿里canal简介及canal部署、原理和使用介绍

canal入门

什么是canal

阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。

canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal主要支持了MySQL的binlog解析,解析完成后才利用canal client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基于canal)。

这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具:

在这里插入图片描述

canal通过binlog同步拿到变更数据,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等多源同步。

canal使用场景

场景1:原始场景, 阿里otter中间件的一部分

在这里插入图片描述

场景2:更新缓存

在这里插入图片描述

场景3:抓取业务数据新增变化表,用于制作拉链表。( 拉链表:记录每条信息的生命周期,一旦一条记录的生命周期结束,就要重新开始一条新的记录,并把当前日期放入生效的开始日期 )

场景4:抓取业务表的新增变化数据,用于制作实时统计。

canal运行原理

在这里插入图片描述

复制过程分成三步:

  1. Master主库将改变记录,写到二进制日志(binary log)中

  2. Slave从库向mysql master发送dump协议,将master主库的binary log events拷贝到它的中继日志(relay log);

  3. Slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库。

canal的工作原理很简单,就是把自己伪装成slave,假装从master复制数据。

在这里插入图片描述

MySQL的binlog介绍

什么是binlog

MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML( 除了数据查询语句 )语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

一般来说开启二进制日志大概会有1%的性能损耗。二进制有两个最重要的使用场景:

其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

其二:通过使用mysqlbinlog工具来使恢复数据。

二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

开启MySQL的binlog

在mysql的配置文件中开启并重启MySQL生效,一般Linux系统下的MySQL配置文件路径基本都在 /etc/my.cnf ;log-bin=mysql-bin

这个表示binlog日志的前缀是mysql-bin ,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。 每次mysql重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。

binlog的分类设置

MySQL的binlog的格式有三种,分别是STATEMENT、MIXED、ROW。在配置文件中可以配置选项指定:binlog_format=

statement [ 语句级 ]

​ 语句级,binlog会记录每次一执行写操作的语句。

​ 相对row模式节省空间,但是可能产生不一致性,例如:update table_name set create_date=now();

​ 如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同 ( master落库数据时create_date为2021-08-08 11:10:30 ,但binlog从库落库执行语句时create_date的时间可能就变为2021-08-08 11:11:23 ,主要是语句执行时间为异步)

​ 优点: 节省空间

​ 缺点: 有可能造成数据不一致

row [ 行级 ]

​ 行级, binlog会记录每次操作后每行记录的变化。

​ 优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。

​ 缺点:占用较大空间。

mixed [ 综合语句级和行级 ]

​ statement的升级版,一定程度上解决了因一些情况而造成的statement模式不一致问题

​ 在某些情况下譬如:

​ ○ 当函数中包含 UUID() 时;

​ ○ 包含 AUTO_INCREMENT 字段的表被更新时;

​ ○ 执行 INSERT DELAYED 语句时;

​ ○ 用 UDF 时;

​ 会按照 ROW的方式进行处理

​ 优点:节省空间,同时兼顾了一定的一致性。

​ 缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog的监控的情况都不方便。

环境准备

机器规划

我这里用了4台机器:

机器规划:ops01、ops02、ops03 用于安装kafka + zookeeper + canal 集群 ;ops04用于部署MySQL服务,测试时可以将MySQL部署在3台集群中的一台

11.8.37.50 ops01

11.8.36.63 ops02

11.8.36.76 ops03

11.8.36.86 ops04

4台机器都在/etc/hosts中配置主机名hosts解析

安装配置MySQL

新建数据库和表用于业务模拟,这里不介绍安装步骤了,如未安装过MySQL,可自行查阅之前的文章《Hive简介及hive部署、原理和使用介绍》中有MySQL详细的安装步骤;

安装完MySQL后,做基本的设置配置

# 登录mysql
root@ops04:/root #mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 442523
Server version: 5.7.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 增加canal用户并配置权限
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit;
Bye
# 修改MySQL配置文件,增添binlog相关配置项
root@ops04:/root #vim /etc/my.cnf
# binlog
server-id=1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=gmall

新建一个gmall库,库其实都可以,只要和上方配置文件中对应即可

重启MySQL:

root@ops04:/root #mysql -V
mysql  Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using  EditLine wrapper
root@ops04:/root #systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-05-26 09:30:25 CST; 2 months 22 days ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 32911 (mysqld)
   Memory: 530.6M
   CGroup: /system.slice/mysqld.service
           └─32911 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

May 26 09:30:18 ops04 systemd[1]: Starting MySQL Server...
May 26 09:30:25 ops04 systemd[1]: Started MySQL Server.
root@ops04:/root #
root@ops04:/root #systemctl restart mysqld
root@ops04:/root #

【注意】:在新增了binlog配置后,重启MySQL服务后,在存储目录下会有相关的binlog文件,格式如下

root@ops04:/var/lib/mysql #ll | grep mysql-bin
-rw-r----- 1 mysql mysql     1741 Aug 17 14:27 mysql-bin.000001
-rw-r----- 1 mysql mysql       19 Aug 17 11:18 mysql-bin.index

验证canal用户登录:

root@ops04:/root #mysql -ucanal -pcanal -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| gmall              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
root@ops04:/root #

在gmall库中新建表,并插入一些样例数据做测试:

CREATE TABLE `canal_test` (
  `体温` varchar(255) DEFAULT NULL,
  `身高` varchar(255) DEFAULT NULL,
  `体重` varchar(255) DEFAULT NULL,
  `文章` varchar(255) DEFAULT NULL,
  `日期` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('36.5', '1.70', '180', '4', '2021-06-01');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('36.4', '1.70', '160', '8', '2021-06-02');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('36.1', '1.90', '134', '1', '2021-06-03');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('37.3', '1.70', '110', '14', '2021-06-04');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('35.7', '1.70', '133', '0', '2021-06-05');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('36.8', '1.90', '200', '6', '2021-06-06');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('37.5', '1.70', '132', '25', '2021-06-07');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('35.7', '1.70', '160', '2', '2021-06-08');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('36.3', '1.80', '131.4', '9', '2021-06-09');
INSERT INTO `canal_test`(`体温`, `身高`, `体重`, `文章`, `日期`) VALUES ('37.3', '1.70', '98.8', '4', '2021-06-10');

安装kafka + zookeeper

为了实现canal的高可用,这里也不介绍具体安装步骤,减少篇幅,可自行查阅之前的文章《Kafka简介及Kafka部署、原理和使用介绍》中有kafka的详细安装步骤;

查询kafka和zookeeper各端口集群运行状态:

wangting@ops03:/opt/module >ssh ops01 'sudo netstat -tnlpu| grep -E "9092|2181"'
tcp6       0      0 :::9092                 :::*                    LISTEN      42305/java          
tcp6       0      0 :::2181                 :::*                    LISTEN      41773/java          
wangting@ops03:/opt/module >ssh ops02 'sudo netstat -tnlpu| grep -E "9092|2181"'
tcp6       0      0 :::9092                 :::*                    LISTEN      33518/java          
tcp6       0      0 :::2181                 :::*                    LISTEN      33012/java          
wangting@ops03:/opt/module >ssh ops03 'sudo netstat -tnlpu| grep -E "9092|2181"'
tcp6       0      0 :::9092                 :::*                    LISTEN      102886/java         
tcp6       0      0 :::2181                 :::*                    LISTEN      102422/java   

安装部署canal

阿里的canal项目地址为:https://github.com/alibaba/canal,下载链接可以在github页面点击右边的release查看各版本下载,建议有精力可以多查阅阿里首页的热门项目,有很多项目越来越受欢迎。

下载安装包

# 下载安装包
wangting@ops03:/opt/software >wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
wangting@ops03:/opt/software >ll | grep canal
-rw-r--r-- 1 wangting wangting  60205298 Aug 17 11:23 canal.deployer-1.1.5.tar.gz

解压安装

# 新建canal解压目录【注意】: 官方项目解压出来没有顶级canal目录,所以新建个目录用于解压组件
wangting@ops03:/opt/software >mkdir -p /opt/module/canal
wangting@ops03:/opt/software >tar -xf canal.deployer-1.1.5.tar.gz -C /opt/module/canal/

修改canal主配置

# 修改canal主配置文件
wangting@ops03:/opt/module/canal >cd conf/
wangting@ops03:/opt/module/canal/conf >ll
total 28
-rwxrwxr-x 1 wangting wangting  319 Apr 19 15:48 canal_local.properties
-rwxrwxr-x 1 wangting wangting 6277 Apr 19 15:48 canal.properties
drwxrwxr-x 2 wangting wangting 4096 Aug 17 13:49 example
-rwxrwxr-x 1 wangting wangting 3437 Apr 19 15:48 logback.xml
drwxrwxr-x 2 wangting wangting 4096 Aug 17 13:49 metrics
drwxrwxr-x 3 wangting wangting 4096 Aug 17 13:49 spring
# 改动如下相关配置: zk | 同步策略目标方式 | kafka
wangting@ops03:/opt/module/canal/conf >vim canal.properties 
canal.zkServers =ops01:2181,ops02:2181,ops03:2181
canal.serverMode = kafka
kafka.bootstrap.servers = ops01:9092,ops02:9092,ops03:9092

修改canal的实例配置- (mysql to kafka)

# 配置实例相关配置:canal可以启多实例,一个实例对应一个目录配置,例如把example目录复制成xxx,把xxx目录下的配置改动启动,就是一个新实例
wangting@ops03:/opt/module/canal/conf >cd example/
wangting@ops03:/opt/module/canal/conf/example >ll
total 4
-rwxrwxr-x 1 wangting wangting 2106 Apr 19 15:48 instance.properties
# 注意11.8.38.86:3306需要改成自己环境的mysql地址和端口,其次用户名密码改成自己环境的,topic自定义一个
wangting@ops03:/opt/module/canal/conf/example >vim instance.properties 
canal.instance.master.address=11.8.38.86:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.mq.topic=wangting_test_canal
canal.mq.partitionsNum=12

分发安装目录

# 将修改后的canal目录分发至另外2台服务器:
wangting@ops03:/opt/module >scp -r /opt/module/canal ops01:/opt/module/
wangting@ops03:/opt/module >scp -r /opt/module/canal ops02:/opt/module/

启动canal集群

# 各服务器依次启动集群canal
wangting@ops03:/opt/module >cd /opt/module/canal/bin/
wangting@ops03:/opt/module/canal/bin >./startup.sh 

wangting@ops02:/home/wangting >cd /opt/module/canal/bin/
wangting@ops02:/opt/module/canal/bin >./startup.sh 

wangting@ops01:/home/wangting >cd /opt/module/canal/bin/
wangting@ops01:/opt/module/canal/bin >./startup.sh 

验证结果

# 在一台服务器上监测kafka
wangting@ops03:/opt/module/canal/bin >kafka-console-consumer.sh --bootstrap-server ops01:9092,ops02:9092,ops03:9092 --topic wangting_test_canal
[2021-08-17 14:21:29,924] WARN [Consumer clientId=consumer-console-consumer-17754-1, groupId=console-consumer-17754] Error while fetching metadata with correlation id 2 : {wangting_test_canal=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

按照预期,如果现在成功的监测了ops04上MySQL中gmall库,那么在gmall库中的表如有数据改动,那么控制台会有信息输出实时同步更新到前台

当前表内数据:

在这里插入图片描述

改动表中的数据观察控制台输出:

在这里插入图片描述

1.将2021-06-10 -> 2021-08-17

2.新增一条数据

3.将一个数值改动 1 -> 1111

wangting@ops03:/opt/module/canal/bin >kafka-console-consumer.sh --bootstrap-server ops01:9092,ops02:9092,ops03:9092 --topic wangting_test_canal
[2021-08-17 14:21:29,924] WARN [Consumer clientId=consumer-console-consumer-17754-1, groupId=console-consumer-17754] Error while fetching metadata with correlation id 2 : {wangting_test_canal=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

{"data":[{"体温":"37.3","身高":"1.70","体重":"98.8","文章":"4","日期":"2021-08-17"}],"database":"gmall","es":1629185045000,"id":6,"isDdl":false,"mysqlType":{"体温":"varchar(255)","身高":"varchar(255)","体重":"varchar(255)","文章":"varchar(255)","日期":"date"},"old":[{"日期":"2021-06-10"}],"pkNames":null,"sql":"","sqlType":{"体温":12,"身高":12,"体重":12,"文章":12,"日期":91},"table":"canal_test","ts":1629185063194,"type":"UPDATE"}

{"data":[{"体温":"35.55","身高":"1.999","体重":"99.99","文章":"999","日期":"2021-08-17"}],"database":"gmall","es":1629185086000,"id":7,"isDdl":false,"mysqlType":{"体温":"varchar(255)","身高":"varchar(255)","体重":"varchar(255)","文章":"varchar(255)","日期":"date"},"old":null,"pkNames":null,"sql":"","sqlType":{"体温":12,"身高":12,"体重":12,"文章":12,"日期":91},"table":"canal_test","ts":1629185104967,"type":"INSERT"}

{"data":[{"体温":"36.1","身高":"1.90","体重":"134","文章":"1111","日期":"2021-06-03"}],"database":"gmall","es":1629185104000,"id":8,"isDdl":false,"mysqlType":{"体温":"varchar(255)","身高":"varchar(255)","体重":"varchar(255)","文章":"varchar(255)","日期":"date"},"old":[{"文章":"1"}],"pkNames":null,"sql":"","sqlType":{"体温":12,"身高":12,"体重":12,"文章":12,"日期":91},"table":"canal_test","ts":1629185122499,"type":"UPDATE"}

能明显看到每次改动都能在记录中呈现出,old数据和当前数据都能一一对应,截止到这里canal整个流程链算是全通了,canal同步到不同的存储介质方法基本都大同小异。

扩展:

可以在zookeeper命令行中查看canal信息:

wangting@ops01:/opt/module/canal/bin >zkCli.sh
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 0] ls -w /
[hbase, kafka, otter, wangting, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls -w /otter
[canal]
[zk: localhost:2181(CONNECTED) 2] ls -w /otter/canal
[cluster, destinations]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canal简介及canal部署、原理和使用介绍 的相关文章

  • 实时获取建材网商品数据:API实现详解与代码示例

    一 引言 随着电子商务的快速发展 实时获取商品数据对于企业决策 市场分析以及数据驱动的营销策略至关重要 建材网作为国内知名的建材信息平台 提供了API接口 使得第三方开发者可以方便地获取商品数据 本文将详细介绍如何使用 建材网的API接口
  • 进程间通信

    进程间通信 进程间通信介绍 进程间通信目的 数据传输 一个进程需要将它的数据发送给另一个进程 资源共享 多个进程之间共享同样的资源 通知事件 一个进程需要向另一个或一组进程发送消息 通知它 它们 发生了某种事件 如进程终止 时要通知父进程
  • 6类典型场景的无线AP选型和部署方案

    你们好 我的网工朋友 前段时间刚给你们来了篇解决无线频繁断网的技术文 解决无线频繁断网 这个办法值得收藏 不少朋友私聊 说想再聊聊无线AP的选型和部署方案 这不就安排上了 无线网络覆盖项目中 无线AP的合理选型和部署非常重要 在设计施工中
  • Linux中如何查看开启了哪些端口?

    在Linux中 端口是设备与外界通讯交流的出口 常用于指TCP IP协议中的端口 其按照端口号可以分为三类 分别是 公认端口 注册端口 动态端口 那么Linux中如何查看开启了哪些端口 以下是常用命令介绍 1 使用netstat命令 net
  • 数据采集才是MES系统的核心内容

    一 数据采集在MES管理系统中的应用 1 设备数据采集 MES管理系统通过与生产设备的连接 可以实时采集设备运行状态 产量 质量等相关数据 这有助于企业及时掌握设备运行状况 优化设备资源配置 提高设备利用率 2 工艺数据采集 MES管理系统
  • 深度强化学习的核心算法:从QLearning到Deep QNetwork

    1 背景介绍 深度强化学习 Deep Reinforcement Learning DRL 是一种通过智能体与环境的互动学习的方法 它可以帮助智能体在没有明确指导的情况下学习如何执行最佳的动作 从而最大化收益 深度强化学习结合了强化学习 R
  • 慢思维大脑:SOP流程的心理学背景

    1 背景介绍 慢思维大脑 SOP流程的心理学背景 慢思维是指人类大脑在处理复杂问题 做出重要决策时所采用的思考方式 它与快速 自动的快思维相对 主要通过以下几种方式表现 深入思考 慢思维会让人类大脑深入思考问题的本质 从而找出更深层次的解决
  • 流程管理的未来:人工智能如何改变业务运行

    1 背景介绍 流程管理是企业在实现业务目标时所采取的一系列有序 连贯的活动 它涉及到许多领域 如生产 销售 研发 财务等 随着企业规模的扩大和市场竞争的激烈 流程管理的复杂性也不断增加 人工智能 AI 技术的发展为流程管理提供了新的机遇 有
  • 线性代数在数据挖掘中的应用

    1 背景介绍 线性代数是数学的一个分支 主要研究的是线性方程组和向量的相关概念和方法 在数据挖掘领域 线性代数的应用非常广泛 包括数据处理 特征提取 模型训练等方面 本文将从以下几个方面进行阐述 背景介绍 核心概念与联系 核心算法原理和具体
  • 技术管理者的核心能力在哪?

    作为管理者我曾经被下属当面问过 你为什么不写代码 诚然 我最近两年 代码越写越少 会越开越多 但 存在真的合理吗 我的核心能力应该是什么 看了一篇文章 它提出一个观点 技术管理者的核心能力在于技术判断力 通过在技术领域和非技术领域的长期积累
  • 扬帆证券:产业化破题在即 人形机器人超预期演进

    大模型助力下的拐点 特斯拉A股产业链上 两笔重磅出资几乎一起现身 总规划超百亿元 1月4日 拓普集团公告 与宁波经济技能开发区办理委员会签署了 机器人电驱系统研发生产基地项目出资协议书 公司拟出资50亿元 建设机器人核心部件生产基地 此次出
  • Python自动化操作:简单、有趣、高效!解放你的工作流程!

    今天跟大家分享一套自动化操作流程解决方案 基于 Python语言 涉及 pyautogui pyperclip pythoncom win32com 依赖包 安装命令为 pip install pyautogui pip install p
  • 大数据毕业设计:python微博舆情分析系统+可视化+情感分析+爬虫+机器学习(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 利用CHAT上传文件的操作

    问CHAT autox js ui 上传框 CHAT回复 上传文件的操作如果是在应用界面中的话 由于Android对于文件权限的限制 你可能不能直接模拟点击选择文件 一般来说有两种常见的解决方案 一种是使用intent来模拟发送一个文件路径
  • Kubernetes (十一) 存储——Secret配置管理

    一 简介 从文件创建 echo n admin gt username txt echo n westos gt password txt kubectl create secret generic db user pass from fi
  • Kubernetes (十三) 存储——持久卷-动静态分配

    一 简介 二 NFS持久化存储步骤 静态分配 1 集群外主机用上次nfsdata共享目录中创建用来测试的pv 1 3 目录 用来对三个静态pv 2 创建pv的应用文件 vim pv yaml apiVersion v1 kind Persi
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 实力认证!鼎捷软件荣膺“领军企业”和“创新产品”两大奖项

    近日 由中国科学院软件研究所 中科软科技股份有限公司联合主办的 2023中国软件技术大会 于北京成功举办 本届大会以 大模型驱动下的软件变革 为主题 数十位来自知名互联网公司和软件巨头企业的技术大咖 不同领域行业专家 畅销书作者等分享嘉宾
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • 【安全-SSH】SSH安全设置

    今天发现自己的公有云服务器被攻击了 在这里插入图片描述 https img blog csdnimg cn direct cafdca04646f4b8b838400ec79ac282f png 然后查看了登录日志 如上图 ls sh va

随机推荐

  • css中align-self属性是什么

    css中align self属性是什么 1 align self属性定义flex子项单独在侧轴 纵轴 方向上的对齐方式 2 align self多了个auto 默认值 表示继承自flex容器的align items属性值 实例 CSS co
  • 深度学习(二十八)基于多尺度深度网络的单幅图像深度估计

    基于多尺度深度网络的单幅图像深度估计 原文地址 http blog csdn net hjimce article details 50569474 作者 hjimce 一 相关理论 本篇博文主要讲解来自2014年NIPS上的一篇paper
  • 微信收付通V3支付

  • Selenium3+Python3框架之生成测试报告并发送邮件

    coding utf 8 Time 2019 10 18 Author carl dj import os import unittest import time import HTMLTestRunner from email mime
  • 关于Linux重新安装java环境报错

    警告 jdk 8u181 linux x64 rpm 头V3 RSA SHA256 Signature 密钥 ID ec551f03 NOKEY 准备中 100 软件包 jdk1 8 2000 1 8 0 181 fcs x86 64 已经
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--六.JSON处理和全局异常处理

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 前言 一 SpringMVC中json数据的处理 1 导入相关依
  • Unity 性能优化总结

    影响性能的因素 造成游戏性能瓶颈的主要原因分成以下几个方面 1 CPU 1 过多的 draw call 2 复杂的脚本或者物理模拟 2 GPU 1 顶点处理 过多的顶点 过多的逐顶点计算 2 片元处理 过多的片元 既可能是由于分辨率造成的
  • bubbo调用Failed to invoke remote method异常解决

    bubbo调用服务异常 com alibaba dubbo rpc RpcException Failed to invoke remote method getPlanFlowInfo provider dubbo 10 20 30 16
  • Tez 简介

    目录 一 Tez简介 二 Tez UI界面 三 Tez 日志 一 Tez简介 1 1 Tez 是支持 DAG 作业的开源计算框架 它可以将多个有依赖的作业转换为一个作业从而大幅提升 DAG 作业的性能 从本质上讲 Tez 组成非常简单 数据
  • asm: 实现打印“Hello, world!“

    使用汇编打印 Hello world 实现打印 Hello world 的汇编代码 代码详细剖析 实现打印 Hello world 的汇编代码 我们来直接贴代码 section text global start start mov edx
  • 【华为OD机试真题 JAVA】可以组成网络的服务器

    JS版 华为OD机试真题 JS 可以组成网络的服务器 标题 可以组成网络的服务器 时间限制 1秒 内存限制 262144K 语言限制 不限 在一个机房中 服务器的位置标识在 n m 的整数矩阵网格中 1 表示单元格上有服务器 0 表示没有
  • UI页面切换按钮随页面切换缩放

    选中按钮放大其余按钮缩小的 效果 using System Collections using System Collections Generic using UnityEngine public class BottomBarBtn M
  • No module named cv2 报错处理

    运行python脚本出现 No module named cv2 这时我们安装下opencv python依赖即可 python3 m pip install opencv python 转载于 https www cnblogs com
  • flutter for循环removeAt(i)数据遇到的问题

    通常都是for循环遍历从前往后顺序 这时候遇到符合条件的通过下标把该数据删掉 for int i 0 i lt 40 i if i 2 removeAt i 删一个数据不会出问题 如果要删多个数据就会有问题了 比如i为0时删了列表第一个 那
  • Windows安装Linux子系统

    win10更新了安装linux子系统的步骤 使之更加方便 只需要在CMD运行命令 wsl install 当然这会涉及很多默认的选项 Windows 命令提示符中输入以下命令 找到可供安装的 Linux 发行版列表 wsl list onl
  • LSPosed 安装教程(LSP框架安装教程)

    1 下载LSPosed模块 CSDN下载 Riru 版 LSPosed Riru Zygisk版 LSPosed Zygisk 或 github下载 LSPosed GitHub 2 打开Magisk 设置 开启 Zygisk 3 打开面具
  • 手把手教你玩转YOLOX--Windows(上)

    旷视开源的YOLOX其性能超越 YOLOv3 YOLOv4 和 YOLOv5 应不少小伙伴的要求 我在这里用手把手教学的方式展示一下YOLOX的搭建 上篇 下一篇将着重介绍YOLOX如何进行模型的训练 进阶篇介绍YOLOX的原理 代码讲解及
  • 卷积原理(卷积,padding填充,步长,多通道卷积)

    1 卷积 卷积可以用于对输入数据进行特征提取 特征提取的过程可以理解为通过卷积对输入特征进行加权运算 提取输入中的重要信息 卷积运算的过程就是通过卷积核扫描输入矩阵的元素 将卷积核和扫描对应的元素相乘再相加 得到一个输出 通过不断地滑动 得
  • 看书标记【R语言数据分析与挖掘实战】4

    第四章 数据预处理 4 1 数据清洗 缺失值处理 使用is na 判断缺失值是否存在 complete cases 可以识别样本数据是否完整从而判断缺失情况 删除法 na omit 函数移除所有含有缺失数据的行 data p 删除p列 替换
  • canal简介及canal部署、原理和使用介绍

    阿里canal简介及canal部署 原理和使用介绍 canal入门 什么是canal 阿里巴巴B2B公司 因为业务的特性 卖家主要集中在国内 买家主要集中在国外 所以衍生出了杭州和美国异地机房的需求 从2010年开始 阿里系公司开始逐步的尝