【Doris基础】Doris中的Replica详解:Replica原理、架构
目录
1 Replica基础概念
1.1 什么是Replica
1.2 Doris中的副本类型
2 Doris副本架构设计
2.1 副本分布机制
2.2 副本一致性模型
3 副本生命周期管理
3.1 副本创建流程
3.2 副本恢复机制
4 副本读写流程详解
4.1 写入流程与副本同步
4.2 查询流程与副本选择
5 副本均衡与调度
5.1 副本均衡策略
5.2 调度器工作原理
6 高级副本管理
6.1 副本放置策略(Placement Policy)
6.2 动态调整副本数
7 总结
1 Replica基础概念
1.1 什么是Replica
在分布式数据库系统中,Replica(副本)是指同一份数据在不同节点上的多个拷贝。Apache Doris作为一个MPP架构的分析型数据库,通过多副本机制来实现数据的高可用和负载均衡。
副本的核心价值:
- 数据可靠性:防止单点故障导致数据丢失
- 服务可用性:即使部分节点失效,系统仍可提供服务
- 查询性能:多个副本可以分担查询负载
- 弹性扩展:通过增加副本来提升系统吞吐量
1.2 Doris中的副本类型
Doris支持两种类型的副本:普通副本(Normal Replica):
- 完整存储数据分片(Tablet)的所有数据
- 参与数据导入和查询
- 可以投票选举Leader
影子副本(Shadow Replica):
- 仅用于紧急情况下的故障恢复
- 不参与日常的数据服务
- 不参与Leader选举
2 Doris副本架构设计
2.1 副本分布机制
Doris采用分片(Tablet)作为数据分布的基本单位,每个Tablet会有多个副本分布在不同的节点上。副本分布遵循以下原则:
- 节点级容错:同一Tablet的不同副本必须分布在不同的BE节点上
- 机架感知(如果配置):优先跨机架分布副本
- 存储介质平衡:考虑不同存储介质的均衡使用

2.2 副本一致性模型
Doris采用多副本强一致性模型,基于Raft协议实现。关键特性包括:
- Leader-Follower模型:每个Tablet的多个副本中有一个Leader,其余为Follower
- 写入路径:所有写入必须通过Leader,成功后同步到多数Follower才算成功
- 读取路径:默认从Leader读取,也可配置为从Follower读取(最终一致性)
Raft协议在Doris中的实现特点:
- 优化了批量提交机制,提高吞吐量
- 支持配置异步提交模式(牺牲部分一致性换取性能)
- 心跳和选举超时时间可配置
3 副本生命周期管理
3.1 副本创建流程
当创建新表或添加分区时,Doris会触发副本创建过程:

- FE选择目标BE节点并发送创建请求
- 各BE创建本地Tablet数据目录和元数据
- FE协调发起Leader选举
- 新Leader上报FE,完成副本创建
3.2 副本恢复机制
当检测到副本不可用(如BE宕机)时,Doris会自动触发副本恢复:
- 检测阶段:FE通过心跳检测副本状态
- 决策阶段:确定需要恢复的Tablet和副本
- 调度阶段:选择目标BE并触发副本克隆
- 同步阶段:从健康副本同步数据
- 生效阶段:新副本加入组,更新元数据
关键参数:
- tablet_checker_interval_ms:副本检查间隔
- tablet_sched_slot_num_per_path:每个磁盘路径的恢复并发数
- replica_sync_rpc_timeout_ms:副本同步RPC超时时间
4 副本读写流程详解
4.1 写入流程与副本同步

- Client发送写入请求到FE
- FE路由到对应Tablet的Leader BE
- Leader将数据写入本地WAL(Write Ahead Log)
- Leader并行发送日志到所有Follower
- 等待多数副本(包括Leader)持久化成功
- Leader提交写入,返回客户端成功
写入优化技术:
- 批量提交:积累多个操作一次性提交
- 流水线:下一批写入不等待上一批提交完成
- 并行发送:并发向多个Follower发送数据
4.2 查询流程与副本选择
Doris的查询副本选择策略:

策略说明:
- Leader优先:默认策略,总是选择Leader保证强一致性
- 本地优先:优先选择与计算节点同机的副本
- 轮询调度:均匀分散查询负载
- 随机选择:简单无状态的分配方式
- 可通过prefer_replica参数配置策略:
SET prefer_replica = 'local'; -- 本地优先
5 副本均衡与调度
5.1 副本均衡策略
Doris通过内置的Tablet调度器维持集群均衡:

均衡维度:
- 节点间副本数均衡:确保各BE的副本数量相近
- 磁盘空间均衡:防止单个磁盘过满
- 标签均衡:考虑机架、机房等容灾属性
- 存储介质均衡:平衡SSD和HDD的使用
5.2 调度器工作原理
Doris的副本调度器主要组件:
- Collector:收集集群Tablet和副本状态
- Analyzer:分析需要调度的Tablet
- Scheduler:生成调度任务并执行
- Checker:检查调度结果
- 关键配置参数:
# 调度器运行间隔
tablet_sched_interval_ms=1000
# 均衡策略
enable_balance=true
balance_load_score_threshold=0.1
# 并发控制
tablet_sched_max_scheduling_tablets=1024
tablet_sched_slot_num_per_path=2
6 高级副本管理
6.1 副本放置策略(Placement Policy)
Doris支持通过SQL定义副本放置规则:
-- 创建具有副本放置策略的资源
CREATE RESOURCE resource_name
PROPERTIES ("replication_num" = "3","tag.location" = "zone1:rack1:be1,zone1:rack2:be2,zone2:rack1:be3"
);-- 应用资源到表
CREATE TABLE db1.table1 (k1 INT,k2 VARCHAR(32)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES ("replication_allocation" = "resource_name"
);
策略优势:
- 实现跨机架、跨机房部署
- 满足数据本地化要求
- 符合合规性要求(如数据不出域)
6.2 动态调整副本数
Doris支持在线修改表的副本数:
ALTER TABLE db1.table1 SET ("replication_num" = "3");
执行流程:
- FE更新元数据中的目标副本数
- Tablet调度器检测到差异
- 调度器创建增加/删除副本任务
- 逐步调整直到满足新副本数要求
注意事项:
- 增加副本会占用更多存储和网络资源
- 减少副本可能暂时降低可用性
- 大规模调整建议在低峰期进行
7 总结
Doris的副本管理系统是其高可用和高性能的基石。通过深入理解副本的创建、同步、恢复和均衡机制,管理员可以更好地规划集群部署、优化性能参数,并有效处理各种异常情况。合理的副本配置不仅能保障数据安全,还能显著提升查询性能,是Doris集群调优的关键环节。
相关文章:

【Doris基础】Doris中的Replica详解:Replica原理、架构
目录 1 Replica基础概念 1.1 什么是Replica 1.2 Doris中的副本类型 2 Doris副本架构设计 2.1 副本分布机制 2.2 副本一致性模型 3 副本生命周期管理 3.1 副本创建流程 3.2 副本恢复机制 4 副本读写流程详解 4.1 写入流程与副本同步 4.2 查询流程与副本选择 5 副本…...

【中国·广州】第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启
第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启 在信息技术飞速发展的当下,信号处理与智能计算作为前沿科技领域,正深刻改变着我们的生活与产业格局。为汇聚全球顶尖智慧,推动该领域进一步突破,第三届信号处理与智能…...

Android12 Launcher3显示所有应用列表
Android12 Launcher3显示所有应用列表 1.前言: 最近在Android12Rom定制时需要显示所有桌面应用的图标,并且不能去掉抽屉,在手机上面抽屉和所有应该列表是两种不同模式,用户基可以自行选择,但是在自定义的launcher中这…...
24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
SP.IdentityService 项目为微服务架构中的核心认证中心,采用 OpenIddict 框架实现 OAuth2.0 和 OpenID Connect 协议,提供完整的身份认证和授权解决方案。项目集成了 ASP.NET Core Identity 框架,实现了用户管理、角色权限控制等基础功能&…...
基于React Native开发鸿蒙新闻类应用的实战开发笔记
以下为基于React Native开发鸿蒙新闻资讯类应用的实战开发笔记,结合架构特性与踩坑经验,重点记录关键实现方案和技术决策: 一、环境搭建与工程初始化(关键步骤复盘) Node.js版本锁定 必须使用Node 18&…...
[Java 基础]运算符,将盒子套起来
在 Java 中,运算符(Operator)用于执行特定的操作,例如数学计算、赋值、比较等。运算符是 Java 语言的重要组成部分,能够帮助我们高效地操作数据。 1. 算术运算符 运算符说明示例结果加法5 38-减法5 - 32*乘法5 * 31…...

智能快递地址解析接口如何用PHP调用?
一、什么是智能快递地址解析接口 随着互联网技术的普及和电子商务的迅猛发展,网购已成为现代人日常生活的重要组成部分。然而,在这个便捷的背后,一个看似不起眼却影响深远的问题正悄然浮现——用户填写的快递地址格式混乱、信息不全甚至错漏…...

华为OD机试真题——模拟消息队列(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…...
c# 显示正在运行的线程数
在 C# 中,若想获取当前进程正在运行的线程数,可以使用 System.Diagnostics 命名空间中的 Process 类来实现。该方法适用于 Windows 平台,并能够获取当前进程的线程信息,包括线程总数和运行中的线程数量。 ✅ 方法一:使…...
MySQL 日志数据同步的详细教程
以下是 MySQL 日志数据同步的详细教程,主要介绍基于二进制日志(binlog)的主从复制和基于 GTID 的高级同步方案: 一、MySQL 二进制日志(binlog)同步基础 1. 二进制日志原理 binlog 是 MySQL 的事务性日志&am…...
2025 Java面试大全技术文章(面试题1)
数据类型与包装类 问题:Java中基本数据类型与包装类的区别是什么?自动装箱与拆箱的底层原理? 答案: 基本数据类型(如int、double)直接存储值,包装类(如Integer、Double)…...
docker 中 什么是「卷」?(Volume)
🗃️ 什么是「卷」?(Volume) 「卷」就是 Docker 里用来“保存数据”的一块空间,就像是一个外接硬盘,或者一个 USB 闪存。 容器本身是临时的,你一删它,它的数据也跟着没了。但卷是用…...
三维可视化和实时数据处理对前端性能要求以及优化渲染效率
在三维可视化(如 Three.js 场景)和实时数据处理(如每秒数百条设备状态更新)场景中,前端性能优化是确保用户体验的核心挑战。以下结合技术原理与行业实践,详细说明Web Workers和虚拟 DOM的优化机制ÿ…...

基于VU37P的高性能采集板卡
基于VU37P的高性能采集板卡是一款最大可提供20路ADC接收通道的高性能采集板卡。每路A/D通道支持1GS/s的采样率,分辨率为14bit,模拟输入带宽可达500MHz,交流耦合,输入阻抗50欧姆。 产品简介 可提供20路ADC接收通道的高性能采集板…...

2025-05-31 Python深度学习10——模型训练流程
文章目录 1 数据准备1.1 下载与预处理1.2 数据加载 2 模型构建2.1 自定义 CNN 模型2.2 GPU加速 3 训练配置3.1 损失函数3.2 优化器3.3 训练参数 4 训练循环4.1 训练模式 (model.train())4.2 评估模式 (model.eval()) 5 模型验证 本文环境: Pycharm 2025.1Python 3.1…...
卷积神经网络(CNN)、YOLO和人脸识别之间的关系
核心关系图解 TEXT 摄像头图像 → [YOLO:人脸检测] → 定位人脸位置 → [CNN:特征提取] → 人脸特征向量 → [人脸识别系统] → 身份匹配 通俗比喻 想象你在一个拥挤的火车站找人: YOLO 是你的"快速扫描眼": 一眼扫…...

K8S StatefulSet 快速开始
其实这篇文章的梗概已经写了很久了,中间我小孩出生了,从此人间多了一份牵挂。抽出一些时间去办理新生儿相关手续。初为人父确实艰辛,就像学技术一样,都需要有极大的耐心,付出很多的时间。 一、引子 1.1、独立的存储 …...
重新测试deepseek Jakarta EE 10编程能力
听说deepseek做了一个小更新,我重新测试了一下Jakarta EE 10编程能力;有点进步,遗漏的功能比以前少了。 采用Jakarta EE 10 编写员工信息表维护表,包括员工查询与搜索、员工列表、新增员工、删除员工,修改员工…...

nav2笔记-250603
合作背景: AMD与Open Navigation在过去几个月里进行了合作,旨在向ROS 2社区展示AMD强大的Ryzen AI、Embedded和Kria能力。 演示内容: 帖子提到,他们已经开始展示如何使用Ryzen AI为自主机器人产品提供动力,在各种现实世…...

指纹识别+精准化POC攻击
开发目的 解决漏洞扫描器的痛点 第一就是扫描量太大,对一个站点扫描了大量的无用 POC,浪费时间 指纹识别后还需要根据对应的指纹去进行 payload 扫描,非常的麻烦 开发思路 我们的思路分为大体分为指纹POC扫描 所以思路大概从这几个方面…...
LeetCode[404]左叶子之和
思路: 题目要求求出左叶子的和,左叶子的条件是左右节点为空且是左子树的叶子节点才叫左叶子节点,那么右子树的左叶子节点的和是什么呢?这样想就引出了递归的顺序,后序遍历,求出左右子树的节点和,…...

mac环境下的python、pycharm和pip安装使用
Python安装 Mac环境下的python安装 下载地址:https://www.jetbrains.com.cn/pycharm/ 一直点击下一步即可完成 在应用程序中会多了两个图标 IDLE 和 Python launcher IDLE支持在窗口中直接敲python命令并立即执行,双击即可打开 Python launcher双击打…...
C语言多级指针深度解析:从一级到三级的奥秘
资料合集下载链接: https://pan.quark.cn/s/472bbdfcd014 在C语言中,指针是理解内存和进行底层编程的关键。我们知道,一个一级指针存储的是一个变量的内存地址。但C语言的强大之处在于,指针本身也可以有自己的地址,而存储这个指针的地址的变量,就是一个更高层次…...
uni-app学习笔记十九--pages.json全局样式globalStyle设置
pages.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 导航栏高度为 44px (不含状态栏),tabBar 高度为 50px (不含安全区)。 它类似微信小程序中app.json的页面管理部…...

BUUCTF[极客大挑战 2019]Havefun 1题解
BUUCTF[极客大挑战 2019]Havefun 1题解 题目分析解题理解代码逻辑:构造Payload: 总结 题目分析 生成靶机,进入网址: 首页几乎没有任何信息,公式化F12打开源码,发现一段被注释的源码: 下面我们…...
【基础】Unity中Camera组件知识点
一、投影模式 (Projection) 1. 透视模式 (Perspective) 原理:模拟人眼,近大远小(锥形体视锥) 核心参数: Field of View (FOV):垂直视场角 典型值:第一人称 60-90,驾驶舱 30-45 特…...

Tomcat优化篇
目录 一、Tomcat自身配置 1.Tomcat管理页面 2. 禁用AJP服务 3.Executor优化 4.三种运行模式 5.web.xml 6.Host标签 7.Context标签 8.启动速度优化 9.其他方面 二、JMeter测试 笔者推荐 一、Tomcat自身配置 1.Tomcat管理页面 我们可以打开Tomcat的管理页面ÿ…...

Temporal Fusion Transformer(TFT)扩散模型时间序列预测模型
1. TFT 简介 Temporal Fusion Transformer(TFT)模型是一种专为时间序列预测设计的高级深度学习模型。它结合了神经网络的多种机制处理时间序列数据中的复杂关系。TFT 由 Lim et al. 于 2019年提出,旨在处理时间序列中的不确定性和多尺度的依…...

【LangServe部署流程】5 分钟部署你的 AI 服务
目录 一、LangServe简介 二、环境准备 1. 安装必要依赖 2. 编写一个 LangChain 可运行链(Runnable) 3. 启动 LangServe 服务 4. 启动服务 5. 使用 API 进行调用 三、可选:访问交互式 Swagger 文档 四、基于 LangServe 的 RAG 应用部…...

攻防世界-unseping
进入环境 在获得的场景中发现PHP代码并进行分析 编写PHP编码 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 将其传入 想执行ls,但是发现被过滤掉了 使用环境变量进行绕过 $a new…...