湖南网站推广电话无组件上传网站

张小明 2026/1/9 20:15:17
湖南网站推广电话,无组件上传网站,常熟企业网站建设价格,网页设计培训好学吗文章目录一、整体迁移逻辑1.1 架构概览1.2 核心工作流程阶段 1#xff1a;初始化阶段 2#xff1a;启动工作线程阶段 3#xff1a;周期性执行1.3 任务生成逻辑1.3.1 元数据同步1.3.2 DDL 任务生成1.3.3 数据复制任务生成1.4 任务执行流程1.4.1 DDL 任务执行1.4.2 数据复制任…文章目录一、整体迁移逻辑1.1 架构概览1.2 核心工作流程阶段 1初始化阶段 2启动工作线程阶段 3周期性执行1.3 任务生成逻辑1.3.1 元数据同步1.3.2 DDL 任务生成1.3.3 数据复制任务生成1.4 任务执行流程1.4.1 DDL 任务执行1.4.2 数据复制任务执行1.5 状态跟踪机制1.5.1 任务状态1.5.2 状态查询二、数据传输详细流程2.1 数据传输方式2.2 数据传输架构2.3 数据传输详细步骤步骤 1任务准备步骤 2RPC 调用步骤 3FE 处理请求步骤 4BE 节点拉取数据步骤 5事务提交步骤 6状态跟踪2.4 为什么采用这种方式2.4.1 为什么不是 JDBC2.4.2 为什么不是 StreamLoad2.4.3 为什么采用 BE 到 BE 快照复制2.5 数据传输关键技术点2.5.1 版本控制2.5.2 快照机制2.5.3 Token 认证2.5.4 并发控制2.6 数据传输流程图2.7 数据传输性能优化2.7.1 并行传输2.7.2 批量处理2.7.3 网络优化三、总结3.1 迁移逻辑总结3.2 数据传输总结3.3 关键设计决策来源反编译自starrocks-cluster-sync-2.0-jar-with-dependencies.jar反编译工具CFR 0.152主类com.starrocks.sync.SyncJobStarrocks-跨集群数据迁移工具一、整体迁移逻辑1.1 架构概览StarRocks 跨集群数据迁移工具采用多线程协调架构通过周期性元数据同步和任务队列管理实现自动化数据迁移。┌─────────────────────────────────────────────────────────────┐ │ 迁移工具客户端 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ meta-handler │ │ ddl-handler │ │replication- │ │ │ │ │ │ │ │job-handler │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └─────────────────┼─────────────────┘ │ │ │ │ │ ┌──────▼───────┐ │ │ │sync-reporter │ │ │ └──────────────┘ │ └───────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────┼───────────────────┐ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 源集群 FE │ │ 目标集群 FE │ │ 目标集群 BE │ │ (元数据查询)│ │ (RPC 调用) │ │ (数据接收) │ └──────┬───────┘ └──────────────┘ └──────┬───────┘ │ │ └────────────────────────────────────────┘ │ HTTP 快照传输 ▼ ┌──────────────┐ │ 源集群 BE │ │ (数据提供) │ └──────────────┘1.2 核心工作流程阶段 1初始化SyncJob(){1.读取配置文件sync.properties,hosts.properties2.验证必要配置source_cluster_token 等3.初始化任务队列4.创建ClusterMetaKeeper元数据管理器}阶段 2启动工作线程start(){启动4个工作线程1.meta-handler元数据处理线程-周期性更新源集群和目标集群的元数据-生成 DDL 任务-生成数据复制任务2.ddl-handlerDDL 执行线程-从 DDL 队列取出任务-批量执行 DDLCREATE/DROP TABLE/PARTITION 等3.replication-job-handler数据复制线程-从复制任务队列取出任务-通过 RPC 发送到目标集群 FE-更新任务状态4.sync-reporter进度报告线程-查询事务状态-统计任务进度-输出日志报告}阶段 3周期性执行循环执行直到手动停止 ├─ meta-handler: 更新元数据 → 生成任务 ├─ ddl-handler: 执行 DDL 任务 ├─ replication-job-handler: 发送复制任务 └─ sync-reporter: 报告进度1.3 任务生成逻辑1.3.1 元数据同步updateClusterMeta(){并行执行1.同步源集群元数据-FE 节点信息-BE 节点信息-数据库、表、分区、索引信息-版本信息2.同步目标集群元数据-FE 节点信息-BE 节点信息-数据库、表、分区、索引信息-版本信息-事务状态运行中/已完成}1.3.2 DDL 任务生成produceDDL(){比较源集群和目标集群的元数据差异1.handleDbDDL()-源集群有目标集群没有 → 创建数据库-目标集群有源集群没有 → 删除数据库可选2.handleTableDDL()-源集群有目标集群没有 → 创建表-目标集群有源集群没有 → 删除表可选-表结构不一致 → 删除并重建可选3.handlePartitionDDL()-源集群有目标集群没有 → 添加分区-目标集群有源集群没有 → 删除分区可选-版本不一致 → 删除并重建可选4.handleMaterializedViewDDL()-同步物化视图结构不同步数据5.handleViewDDL()-同步视图定义}1.3.3 数据复制任务生成produceReplicationJob(){遍历公共数据库和表for(数据库 in 公共数据库){for(表 in 公共表){for(分区 in 公共分区){1.比较分区版本-源版本目标版本 → 需要同步-源版本目标版本 → 检查版本时间存算分离-源版本目标版本 → 删除目标分区2.收集需要同步的分区信息-分区 ID-源版本号-索引信息-Tablet映射关系-源 BE 节点信息3.检查数据量限制-如果超过 max_replication_data_size_per_job_in_gb-停止添加分区标记为部分复制}4.创建ReplicationJob-包含所有需要同步的分区-添加到复制任务队列}}}1.4 任务执行流程1.4.1 DDL 任务执行DDL 任务队列 ↓ 批量取出ddlJobBatchSize ↓ 执行 SQLCREATE/DROP/ALTER ↓ 更新元数据1.4.2 数据复制任务执行复制任务队列 ↓ 批量取出replicationJobBatchSize ↓ 转换为 Thrift 请求 ↓ RPC 调用目标集群 FE ↓ 目标 FE 创建事务并协调 BE ↓ 目标 BE 从源 BE 拉取数据 ↓ 查询事务状态跟踪进度1.5 状态跟踪机制1.5.1 任务状态JobState{UNKNOWN,// 未知状态INIT,// 已发送到目标集群SENT,// 已发送但未开始运行SENT_FAILED,// 发送失败RUNNING,// 正在运行FAILED,// 失败FINISHED// 完成}1.5.2 状态查询getTxnStatus(jobToken){1.解析 jobToken →{dbId}-{tableId}_{jobId}2.查询运行中的事务 SHOW PROC/transactions/{dbId}/running-如果找到 → RUNNING3.查询已完成的事务 SHOW PROC/transactions/{dbId}/finished-如果找到且状态为 VISIBLE → FINISHED-如果找到且状态为 ABORTED → FAILED4.都找不到 → UNKNOWN}二、数据传输详细流程2.1 数据传输方式核心结论数据传输采用BE 到 BE 的直接快照复制机制通过HTTP 协议传输数据。不是 JDBCJDBC 仅用于元数据查询SHOW PROC、SHOW DATA 等不是 StreamLoadStreamLoad 用于外部数据导入不是集群间复制2.2 数据传输架构┌─────────────────────────────────────────────────────────────┐ │ 迁移工具 │ │ 生成 ReplicationJob包含源 BE 信息 │ └──────────────────────┬──────────────────────────────────────┘ │ Thrift RPC ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 FE │ │ 1. 接收 startTableReplication 请求 │ │ 2. 验证 Token 和权限 │ │ 3. 创建事务LoadJobSourceType REPLICATION │ │ 4. 将任务分发给目标 BE 节点 │ └──────────────────────┬──────────────────────────────────────┘ │ 任务分发 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 BE │ │ 1. 接收复制任务 │ │ 2. 解析源 BE 信息host, httpPort │ │ 3. 通过 HTTP 协议连接源 BE │ │ 4. 请求快照数据包含 srcTabletId, version, schemaHash │ │ 5. 接收快照数据并写入本地存储 │ │ 6. 报告写入完成 │ └──────────────────────┬──────────────────────────────────────┘ │ HTTP 协议快照下载 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 源集群 BE │ │ 1. 接收快照下载请求 │ │ 2. 验证 Token从请求中获取 │ │ 3. 根据版本号生成快照 │ │ 4. 通过 HTTP 协议传输快照数据 │ └─────────────────────────────────────────────────────────────┘2.3 数据传输详细步骤步骤 1任务准备// 在 produceReplicationJob() 中ReplicationJobreplicationJobnewReplicationJob(jobId,// 任务 IDtargetUserName,// 目标集群用户名targetPassword,// 目标集群密码sourceToken,// 源集群 Token关键targetDbId,// 目标数据库 IDtargetTableId,// 目标表 IDdbName,// 数据库名tableName,// 表名srcTableType,// 源表类型srcTableDataSize,// 源表数据大小partitionInfos// 分区信息列表);// 分区信息包含PartitionInfo{partitionId,// 目标分区 IDsrcVersion,// 源分区版本关键indexInfos// 索引信息列表}// 索引信息包含IndexInfo{indexId,// 目标索引 IDsrcSchemaHash,// 源 Schema HashtabletInfos// Tablet 信息列表}// Tablet 信息包含TabletInfo{tabletId,// 目标 Tablet IDsrcTabletId,// 源 Tablet ID关键replicaInfos// 副本信息列表}// 副本信息包含ReplicaInfo{srcBackend{// 源 BE 节点信息关键host,// 源 BE 主机地址bePort,// BE 服务端口httpPort// HTTP 端口用于数据传输}}步骤 2RPC 调用// 在 Utils.sendReplicationJob() 中1.随机选择目标集群 FE 节点2.将ReplicationJob转换为TTableReplicationRequest3.通过ThriftRPC 调用FrontendServiceProxy.call(address,// 目标 FE 地址10000,// 超时时间10秒3,// 重试次数client-client.startTableReplication(request))步骤 3FE 处理请求// 目标集群 FE 接收到请求后FE 端逻辑不在工具代码中1.验证请求-检查用户名和密码-验证源集群Token-检查并发限制replication_max_parallel_table_count 等2.创建事务-事务Label:{dbId}-{tableId}_{jobId}-LoadJobSourceType:REPLICATION-事务状态:PREPARE3.分发任务到目标 BE 节点-根据Tablet分布信息-将任务发送到对应的 BE 节点步骤 4BE 节点拉取数据// 目标 BE 节点接收到任务后BE 端逻辑不在工具代码中1.解析任务信息-获取源 BE 信息host,httpPort-获取源TabletID-获取版本号和SchemaHash2.建立 HTTP 连接-连接到源 BE 的 httpPort默认8040-使用源集群Token进行认证3.请求快照数据 HTTPRequest:-URL:http://{srcBeHost}:{httpPort}/api/snapshot/download-Method:POST-Headers:*Authorization:Token{sourceToken}-Body:{tablet_id:srcTabletId,version:srcVersion,schema_hash:srcSchemaHash,target_tablet_id:tabletId}4.源 BE 处理请求-验证Token-根据版本号生成快照-如果快照为空返回错误Source snapshots is empty-否则通过 HTTP 流式传输快照数据5.目标 BE 接收数据-接收快照文件-验证数据完整性Checksum-写入本地存储-更新Tablet元数据步骤 5事务提交// 所有副本写入完成后1.目标 BE 报告写入完成2.FE 提交事务-事务状态:COMMITTED3.FE 发布数据-事务状态:PUBLISHED-数据变为可见VISIBLE4.FE 完成事务-事务状态:FINISHED步骤 6状态跟踪// 迁移工具定期查询事务状态1.查询运行中的事务 SHOW PROC/transactions/{dbId}/running-如果找到对应的事务 → RUNNING2.查询已完成的事务 SHOW PROC/transactions/{dbId}/finished-如果找到且状态为 VISIBLE → FINISHED-如果找到且状态为 ABORTED → FAILED3.更新任务状态-更新 replicationJobState-更新 replicationTableStatus-统计进度2.4 为什么采用这种方式2.4.1 为什么不是 JDBCJDBC 的特点基于 MySQL 协议用于 SQL 查询和 DDL 操作需要执行查询计划返回结果集适合小数据量为什么不适合性能问题需要执行 SQL 查询解析查询计划返回结果集需要序列化/反序列化网络往返次数多效率低功能限制无法直接获取 Tablet 级别的数据无法指定版本号获取特定版本的数据无法获取快照数据资源消耗占用查询资源增加 FE 负载不适合大数据量传输代码证据// 工具中 JDBC 仅用于元数据查询Utils.execQuerySql(SHOW PROC /dbs/,...);Utils.execQuerySql(SHOW DATA,...);Utils.execQuerySql(SHOW PARTITIONS,...);// 没有用于数据传输的 JDBC 调用2.4.2 为什么不是 StreamLoadStreamLoad 的特点用于导入外部数据文件、Kafka 等客户端准备数据并上传通过 HTTP 接口上传数据流为什么不适合数据来源StreamLoad 需要客户端准备数据迁移工具无法直接访问源集群的数据文件需要先导出再导入效率低数据格式StreamLoad 需要数据格式转换需要解析和重新编码可能丢失元数据信息一致性StreamLoad 是导入操作不是复制操作无法保证版本一致性无法支持增量同步代码证据// 请求中包含的是元数据信息不是数据本身TTableReplicationRequest{src_tablet_id,// 源 Tablet IDsrc_version,// 源版本号src_backend,// 源 BE 信息// 没有数据内容}2.4.3 为什么采用 BE 到 BE 快照复制优势分析性能优势✅ 直接传输二进制数据无需格式转换 ✅ BE 到 BE 直连减少网络跳数 ✅ 支持并行传输提高吞吐量 ✅ 基于版本快照支持增量同步一致性保证✅ 基于版本号保证数据版本一致性 ✅ 快照是原子操作要么全部成功要么全部失败 ✅ 支持事务机制保证数据完整性资源效率✅ 不占用 FE 查询资源 ✅ 不执行查询计划减少 CPU 消耗 ✅ 直接传输存储格式减少内存消耗灵活性✅ 支持指定版本号复制特定版本的数据 ✅ 支持增量同步只传输版本差异 ✅ 支持断点续传快照机制安全性✅ 使用 Token 进行认证 ✅ BE 到 BE 直连减少中间环节 ✅ 支持网络地址映射适应复杂网络环境代码证据// 1. 请求中包含源 BE 信息ReplicationJob.BackendInfo{host,// 源 BE 主机地址bePort,// BE 服务端口httpPort// HTTP 端口用于数据传输}// 2. 请求中包含版本信息PartitionInfo{srcVersion// 源分区版本号}// 3. 错误信息显示使用快照机制if(errorMsg.contains(Source snapshots is empty)){// 说明使用快照机制}2.5 数据传输关键技术点2.5.1 版本控制// 版本比较逻辑if(srcPartition.getVisibleVersion()targetPartition.getVisibleVersion()){// 需要同步目标 BE 请求指定版本号的快照request.versionsrcPartition.getVisibleVersion();}作用保证数据版本一致性支持增量同步避免重复传输2.5.2 快照机制// 快照请求{tablet_id:srcTabletId,// 源 Tablet IDversion:srcVersion,// 版本号schema_hash:srcSchemaHash,// Schema Hashtarget_tablet_id:tabletId// 目标 Tablet ID}特点快照对应特定版本的数据快照是只读的保证数据一致性支持增量快照只包含版本差异2.5.3 Token 认证// 请求中包含源集群 TokenTTableReplicationRequest{src_token:wwwwwwww-xxxx-yyyy-zzzz-uuuuuuuuuu}// 目标 BE 使用 Token 访问源 BEHTTPRequestHeaders:Authorization:Token{src_token}作用验证目标集群是否有权限访问源集群防止未授权访问保证数据安全2.5.4 并发控制// FE 配置参数replication_max_parallel_table_count// 最大并发表数replication_max_parallel_replica_count// 最大并发副本数replication_max_parallel_data_size_mb// 最大并发数据量作用控制并发度避免过载平衡迁移速度和集群负载防止资源耗尽2.6 数据传输流程图┌─────────────────────────────────────────────────────────────┐ │ 迁移工具 │ │ 1. 生成 ReplicationJob │ │ - 包含源 BE 信息host, httpPort │ │ - 包含 Tablet 映射srcTabletId → tabletId │ │ - 包含版本信息srcVersion │ │ - 包含 TokensrcToken │ └──────────────────────┬──────────────────────────────────────┘ │ Thrift RPC ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 FE │ │ 1. 验证请求Token、权限 │ │ 2. 检查并发限制 │ │ 3. 创建事务Label: {dbId}-{tableId}_{jobId} │ │ 4. 分发任务到目标 BE 节点 │ └──────────────────────┬──────────────────────────────────────┘ │ 任务分发 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 BE │ │ 1. 接收任务 │ │ 2. 解析源 BE 信息 │ │ 3. 建立 HTTP 连接 │ │ 4. 发送快照下载请求 │ │ POST http://{srcBeHost}:{httpPort}/api/snapshot/download │ │ Headers: Authorization: Token {srcToken} │ │ Body: {tablet_id, version, schema_hash, target_tablet_id}│ └──────────────────────┬──────────────────────────────────────┘ │ HTTP 协议 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 源集群 BE │ │ 1. 验证 Token │ │ 2. 根据版本号生成快照 │ │ 3. 通过 HTTP 流式传输快照数据 │ │ 4. 返回数据或错误Source snapshots is empty │ └──────────────────────┬──────────────────────────────────────┘ │ HTTP Response快照数据 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 BE │ │ 1. 接收快照数据 │ │ 2. 验证数据完整性Checksum │ │ 3. 写入本地存储 │ │ 4. 更新 Tablet 元数据 │ │ 5. 报告写入完成 │ └──────────────────────┬──────────────────────────────────────┘ │ 完成报告 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 目标集群 FE │ │ 1. 接收所有副本的完成报告 │ │ 2. 提交事务COMMITTED │ │ 3. 发布数据PUBLISHED → VISIBLE │ │ 4. 完成事务FINISHED │ └──────────────────────┬──────────────────────────────────────┘ │ 状态查询 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 迁移工具 │ │ 1. 查询事务状态 │ │ SHOW PROC /transactions/{dbId}/running │ │ SHOW PROC /transactions/{dbId}/finished │ │ 2. 更新任务状态 │ │ - RUNNING / FINISHED / FAILED │ │ 3. 统计进度 │ └─────────────────────────────────────────────────────────────┘2.7 数据传输性能优化2.7.1 并行传输表级并行多个表同时传输分区级并行多个分区同时传输Tablet 级并行多个 Tablet 同时传输2.7.2 批量处理批量发送任务replicationJobBatchSize控制批量查询状态一次查询多个事务状态2.7.3 网络优化BE 直连减少网络跳数HTTP 协议成熟稳定支持大文件传输快照机制支持增量传输减少数据量三、总结3.1 迁移逻辑总结多线程协调4 个工作线程各司其职周期性同步定期更新元数据并生成任务任务队列管理DDL 任务和复制任务分别管理状态跟踪通过查询事务状态跟踪任务进度3.2 数据传输总结传输方式BE 到 BE 直接传输使用 HTTP 协议数据格式基于版本快照的二进制数据认证机制使用 Token 进行认证优势高效、可靠、灵活、安全3.3 关键设计决策决策原因BE 到 BE 直连减少网络跳数提高性能HTTP 协议成熟稳定支持大文件传输快照机制保证数据一致性支持增量同步Token 认证保证安全性简化认证流程版本控制支持增量同步避免重复传输文档生成时间2025-01-XX反编译工具CFR 0.152JAR 版本starrocks-cluster-sync-2.0
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

微信公众号微网站怎么建设单位网站怎么做

音频格式转换终极指南:轻松解锁你的音乐收藏 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcod…

张小明 2026/1/9 3:26:11 网站建设

一个人可以做网站吗2022年最新国际新闻

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

张小明 2026/1/9 11:24:28 网站建设

外贸电商网站开发价格怎么创造游戏软件

用AT89C51定时器精准控制蜂鸣器音调:从原理到Proteus仿真的完整实战解析你有没有试过在单片机实验中,写完一段“叮——”的提示音代码,结果蜂鸣器要么不响,要么声音怪异?更糟的是,手头还没示波器&#xff0…

张小明 2026/1/8 20:30:21 网站建设

济南网站建设新风向设计类网站模板

FaceFusion镜像提供Token赠送活动:邀请好友享算力奖励 在短视频和虚拟内容爆发式增长的今天,AI驱动的人脸编辑技术正从实验室走向大众创作工具。无论是影视特效、网红变装视频,还是数字人直播,高保真的人脸替换已成为内容生产链中…

张小明 2026/1/9 12:54:28 网站建设

桐庐县建设局网站先网站开发后软件开发

如果说互联网是有记忆的,那么微信、QQ的聊天框,就是我们每个人最大的“外挂硬盘”。 在做社群、运营或内容分析时,很多人都会遇到一个共同的痛点:聊天记录很多,但几乎无法利用。 请闭上眼回想一下: 你手机…

张小明 2026/1/9 14:27:48 网站建设

可以做ppt的网站东莞市市场监督管理局

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个Git问题快速诊断工具,专门处理master has no tracked branch错误。功能包括:1. 一键诊断当前分支状态 2. 与标准工作流对比找出差异 3. 提供最快捷的…

张小明 2026/1/9 13:33:53 网站建设