温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Apache BookKeeper的概念和相关术语是什么

发布时间:2021-11-23 11:07:32 来源:亿速云 阅读:195 作者:柒染 栏目:大数据
# Apache BookKeeper的概念和相关术语是什么 ## 目录 1. [概述](#概述) 2. [核心概念](#核心概念) - [2.1 Ledger](#21-ledger) - [2.2 Entry](#22-entry) - [2.3 Bookie](#23-bookie) - [2.4 Ensemble](#24-ensemble) - [2.5 Write Quorum](#25-write-quorum) - [2.6 Ack Quorum](#26-ack-quorum) 3. [架构组件](#架构组件) - [3.1 Client](#31-client) - [3.2 Metadata Store](#32-metadata-store) - [3.3 Storage Layer](#33-storage-layer) 4. [关键术语详解](#关键术语详解) - [4.1 Log Sequence](#41-log-sequence) - [4.2 Fencing](#42-fencing) - [4.3 Auto-Recovery](#43-auto-recovery) - [4.4 Journal](#44-journal) - [4.5 Entry Log](#45-entry-log) - [4.6 Index Files](#46-index-files) 5. [数据一致性模型](#数据一致性模型) 6. [应用场景](#应用场景) 7. [总结](#总结) --- ## 概述 Apache BookKeeper是一个**分布式日志存储系统**,最初由Yahoo!开发并捐赠给Apache基金会。它被设计用于高吞吐、低延迟的持久化日志场景,是Apache Pulsar等消息系统的底层存储引擎。其核心思想是将数据组织为不可变的日志序列(Ledger),通过分布式节点(Bookie)集群提供高可靠存储。 --- ## 核心概念 ### 2.1 Ledger - **定义**:逻辑上的只追加(append-only)数据序列,是BookKeeper中最基本的数据单元。 - **特性**: - 一旦关闭便不可修改(类似不可变文件) - 每个Ledger有全局唯一ID(64位整数) - 支持多副本存储(通过Ensemble配置) - **生命周期**: ```mermaid graph LR A[创建] --> B[写入Entries] B --> C[关闭] C --> D[可选: 删除] 

2.2 Entry

  • 组成
    • Ledger ID + Entry ID(自增序列)
    • 用户数据(二进制payload)
    • 元数据(如写入时间戳)
  • 特点
    • 最小存储单元(典型大小1MB以内)
    • 写入后不可修改

2.3 Bookie

  • 角色:存储节点的守护进程
  • 职责
    • 持久化Entry数据
    • 参与副本复制
    • 响应读写请求
  • 存储结构: “` /bookkeeper ├── journals/ # 写前日志(WAL) ├── ledgers/ # 实际数据存储 │ ├── entry_logs # 合并后的Entry文件 │ └── index # 索引文件 └── tmp/
 ### 2.4 Ensemble - **定义**:存储Ledger副本的Bookie组合 - **规则**: - 创建Ledger时指定(如3个Bookie) - 可动态调整(需通过reconfiguration) ### 2.5 Write Quorum - **作用**:控制数据写入的副本数 - **示例**: - WQ=3表示需成功写入3个副本才返回成功 ### 2.6 Ack Quorum - **作用**:定义最小确认副本数 - **与WQ关系**: - AQ ≤ WQ - 典型配置:WQ=3, AQ=2 --- ## 架构组件 ### 3.1 Client - **功能**: - 与Bookie集群交互 - 管理Ledger生命周期 - **关键操作**: ```java // 示例代码片段 BookKeeper bk = new BookKeeper("zookeeper:2181"); LedgerHandle lh = bk.createLedger(3, 2, 2, DigestType.CRC32, "passwd".getBytes()); lh.addEntry("data".getBytes()); lh.close(); 

3.2 Metadata Store

  • 实现:通常依赖ZooKeeper
  • 存储内容
    • Ledger元数据(所有者、状态等)
    • Bookie可用性信息

3.3 Storage Layer

  • 写入流程
    1. 写入Journal(确保持久化)
    2. 异步写入Entry Log
    3. 更新内存索引
  • 优化技术
    • 批处理(Batching)
    • 顺序I/O

关键术语详解

4.1 Log Sequence

  • 特点
    • 严格有序的Entry序列
    • 通过Entry ID保证顺序

4.2 Fencing

  • 场景:防止多客户端同时写入同一Ledger
  • 机制
    • 通过ZK标记Ledger为”fenced”
    • 后续写入会被拒绝

4.3 Auto-Recovery

  • 触发条件:Bookie故障时
  • 过程
    1. 检测副本缺失
    2. 从健康副本复制数据
    3. 恢复一致性

4.4 Journal

  • 作用:类似数据库WAL,确保写入原子性
  • 配置参数
     journalMaxSizeMB=2048 journalFlushWhenQueueEmpty=true 

4.5 Entry Log

  • 特点
    • 合并多个Ledger的Entry
    • 减少小文件问题

4.6 Index Files

  • 类型
    • Ledger索引:定位Entry所属Ledger
    • Entry位置索引:快速查找物理偏移量

数据一致性模型

级别 描述 性能影响
强一致 所有副本同步写入 高延迟
最终一致 异步复制 低延迟

一致性实现: - 基于Quorum的投票机制 - Last-Add-Confirmed(LAC)协议


应用场景

  1. 消息存储(如Pulsar的持久化层)
  2. 事件溯源(Event Sourcing)
  3. WAL替代方案(分布式数据库)
  4. 审计日志(不可篡改特性)

总结

Apache BookKeeper通过其独特的Ledger模型和分布式架构,为需要强一致性的日志场景提供了可靠解决方案。理解其核心术语(如Bookie/Ensemble)和写入机制(Quorum控制)是有效使用该系统的关键。随着4.14版本引入分层存储等新特性,其在云原生环境中的适用性进一步增强。 “`

注:实际内容约3100字(含代码/图表占位符)。如需精确字数统计或扩展特定章节,可提供补充说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI