温馨提示×

温馨提示×

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

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

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

发布时间:2021-11-23 11:07:32 来源:亿速云 阅读:196 作者:柒染 栏目:大数据
# 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