- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Apache Doris源码阅读与解析第9讲《元数据管理》
《 Apache Doris 源码阅读与解析》系列直播活动旨在帮助 Apache Doris 社区的开发者或者有意向参与 Apache Doris 社区建设的小伙伴们,可以更快熟悉 Apache Doris 代码的组织结构和一些主要流程的实现原理以及代码位置,以便于各位小伙伴们能够快速上手,参与到开发工作中来。
《第九讲 —— 元数据管理》,这一讲我们深入 Doris 的元数据管理逻辑,主要介绍以下内容:
- BDBJE、元数据持久化和高可用
- 元数据日志的写入和回放逻辑
- Checkpoint 和 Image
展开查看详情
1 .Apache Doris 源码阅读与解析 第九讲:元数据管理 陈明雨
2 .课程大纲 • 什么是BDBJE • 元数据日志的写入和回放逻辑 • Checkpoint 和 Image
3 .课程收获 • 了解元数据持久化和高可用设计 • 能够对元数据进行管理和维护
4 .什么是BDBJE • Berkeley DB Java Edition • 分布式嵌入式kv数据库 • 为什么需要BDBJE • 元数据也是一种数据 • 存储元数据的数据库 • 持久性和一致性保证 https://www.oracle.com/database/berkeley-db/java-edition.html • 高可用保证
5 .BDBJE是如何存储元数据的(1) • 实际存储的是元数据的操作日志 • 通过回放操作日志,即可重构的完整的元数据
6 . Why exit? BDBJE是如何存储元数据的(2) What is roll? • EditLog.java • logEdit() • BDBJEJournal.java • write()
7 .BDBJE是如何存储元数据的(3) Why exit? • Why exit? • 内存中的元数据状态难以回滚 What is roll? • What is roll? • BDBJE的database • Checkpoint的分割点
8 .BDBJE是如何读取(回放)元数据的(1) • BDBJE open • BDBJEJournal.open()
9 .BDBJE是如何读取(回放)元数据的(2) • 回放元数据 • Catalog.replayJournal() • EditLog.loadJournal()
10 .BDBJE 元数据写入和读取流程总结 • 按序写入,按序读取回放 • 解决了数据持久化的问题 • 遗留问题 • 日志越多,回放越慢 • 单节点故障如何保证元数据高可用
11 .BDBJE 元数据 Checkpoint 的生成(1) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
12 .BDBJE 元数据 Checkpoint 的生成(2) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
13 .BDBJE 元数据 Checkpoint 的生成(2) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
14 .BDBJE 元数据 Checkpoint 的生成(3) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
15 .BDBJE 元数据 Checkpoint 的生成(4) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
16 .BDBJE 元数据 Checkpoint 的生成(5) • 定期将日志合并成一个Image • Checkpoint.runAfterCatalogReady() • Create Checkpoint Catalog • Write new image • Push image to other FE • Delete old journal • Delete old image
17 .BDBJE 元数据 Checkpoint 的读取(1) • Image文件的格式 • MetaWriter.writer() • MetaReader.read()
18 .BDBJE 元数据 Checkpoint 的读取(2) • Image 和 log
19 .BDBJE 元数据高可用(1) • Follower 和 Observer • FAQ Q6 • Catalog.createReplayer() • BDBJE没有回调机制 • 轮询
20 .BDBJE 元数据高可用(2) • 元数据一致性 • 最终一致 • Timestamp • Config.meta_delay_toleration_second
21 .BDBJE 元数据高可用(3) • Leader Election • BDBStateChangeListener • Catalog.createStateListener()
22 .BDBJE 元数据运维 • Config.metadata_failure_recovery • 清空元数据的元数据 • recoveryTracker should overlap or follow on disk last VLSN of 99,937,900 recoveryFirst= 99,937,902 UNEXPE • https://community.oracle.com/thread/2197232?tstart=0
23 .总结 • 什么是BDBJE • 元数据的持久化和Checkpoint • 元数据高可用 • 故障恢复的原理
24 .Thank You ApacheDoris 微信公众号 • Doris 官网:doris.apache.org • Github:https://github.com/apache/incubator-doris • Palo 发行版:palo.baidu.com