BookKeeper 是什么? BookKeeper 是一种可扩展的、具有容错能力和低延迟的存储服务,主要用来优化实时工作负载。...BookKeeper 概念和术语 BookKeeper 提供复制的、持久的日志流存储,形成具有明确定义顺序序列的记录流。...与 BookKeeper 交互 在与 Bookie 交互时,BookKeeper 应用程序有两个主要角色。...如果您对 BookKeeper 或 DistributedLog 感兴趣,你可能希望通过以下方式参与 BookKeeper 社区: BookKeeper Slack channel:http://apachebookkeeper.slack.com.../ BookKeeper 邮件列表:http://bookkeeper.apache.org/community/mailing-lists/ 有关 Apache BookKeeper 项目的更多信息,
什么是BookKeeper BookKeeper是一个提供日志条目流存储持久化的服务框架。特别适合日志流存储,一个比较经典的应用是作为消息队列Pulsar的持久框架。...那么BookKeeper是怎样产生的呢? 这个灵感来源于Hadoop生态系统。...我们这里只为了部署一个调试环境,并不是生产环境: 首先,拉下来BookKeeper的代码: git clone https://github.com/apache/bookkeeper.git 之后...BookKeeper API简介 BookKeeper的客户端主要负责创建删除ledgers,并且从ledgers中读取entries。...BookKeeper 元数据存储 BookKeeper需要第三方存储用于保存关于ledgers的信息还有可用的Bookies(相当于分布式协调)。
journal 是一个 write-ahead log(WAL),它帮助 BookKeeper 在发生故障时避免数据丢失。这与关系型数据库实现数据持久化的机制相同。...读写隔离 BookKeeper 中的写入都是顺序写入 journal 文件,该文件可以存储在专用磁盘上,可以获得更大的吞吐量。...Bookie Fencing BookKeeper 有一个极其重要的功能,叫做 fencing。...fencing 功能让 BookKeeper 保证只有一个写入者(Pulsar broker)可以写入一个 ledger。...recovery 不是 BookKeeper 复制协议的一部分,而是在 BookKeeper 外部运行,作为一种异步修复机制使用。 有两种类型的recovery:手动或自动。
针对连续write的优化; 针对Scan操作的优化; 目前来看合适的MetaData Storage有zookeeper, etcd, 如果ledger数量超级大,还可以使用HBase; Apache BookKeeper...当前默认使用Zookeeper实现; MetaData操作的实现 MetadataBookieDriver 在Apache BookKeeper中对MetaData的所有操作都被封装到一个抽象接口MetadataBookieDriver...driverClass.getName(); } } 利用java的反射机制根据driverClass即可产生出对应的MetadataBookieDriver对象; 默认包含org.apache.bookkeeper.meta.zk.ZKMetadataBookieDriver...3181的节点, cookie内容形如: 4 ---- 当前cookie的layout版本号 bookieHost: "10.209.240.36:3181" journalDir: "/data/bookkeeper.../journal" ledgerDirs: "1\t/data/bookkeeper/ledger" instanceId: "eb314bf8-885e-4c60-803d-32fd7858d790"
BookKeeper是满足CP特性的分布式系统,并且同时提供了较高的可用性,下文会有论述。 BookKeeper是企业级的存储系统,提供强持久性、一致性和低延迟的保证。最初起源于Yahoo!...BookKeeper 一个企业级、实时的存储平台需要满足一下要求: 读写低延迟(< 5ms) 数据存储要持久、一致并且支持容错 对写入数据提供流式传播或者tail传播的功能 高效的存储,可以提供对实时数据以及历史数据的访问...Bookies作为ensemble的一部分起作用 一个bookie是一个独立的BookKeeper存储服务。出于性能的考虑,Bookie储存ledger的片段,而不是真个ledgers。...与BookKeeper交互 BookKeeper客户端主要有两个角色:创建和删除ledgers,向ledgers写入或者从ledgers中读取entry。...BookKeeper 框架图 注意: BK的典型安装会包含:Metadata store,bookie cluster,多个cilent Bookie自己向metadata store注册自己 Bookie
Apache BookKeeper中数据目录分析 需要落盘的数据 Journals 这个journals文件里存储的相当于BookKeeper的事务log或者说是写前log, 在任何针对ledger的更新发生前...LastLogMark 从上面的的讲述可知, 写入的EntryLog和Index都是先缓存在内存中,再根据一定的条件周期性的flush到磁盘,这就造成了从内存到持久化到磁盘的时间间隔,如果在这间隔内BookKeeper...journal文件内容来恢复,这个LastLogMark就记录了从journal中什么位置开始恢复; 它其实是存在内存中,当IndexCache被flush到磁盘后其值会被更新,其也会周期性持久化到磁盘文件,供BookKeeper...data-flow1.png 文件目录使用情况监控 用于写入文件的目录有三种状态: 可写; 可写,但剩余空间低于所配置的警告阈值; 不可写,已经写满; 当被GC清理了一部分数据后,其状态又可变为可写; BookKeeper
讲到 Pulsar 的存储模型,本质上就是 Bookkeeper 的存储模型。 Pulsar 所有的消息读写都是通过 Bookkeeper 实现的。...Bookkeeper 是一个可扩展、可容错、低延迟的日志存储数据库,基于 Append Only 模型。...(数据只能追加不能修改) image.png 这里我利用 Pulsar 和 Bookkeeper 的 Admin API 列出了 Broker 和 BK 中 Ledger 分别占用的磁盘空间。...Bookkeeper 有提提供一个Admin API 可以返回当前 BK 所使用了哪些日志文件的接口:https://bookkeeper.apache.org/docs/admin/http#endpoint-apiv1bookielist_disk_filefile_typetype...所以我们使用 Helm 部署 Bookkeeper 的时候需要分别指定 journal 和 ledgers 的目录 volumes: # use a persistent volume or emptyDir
Apache BookKeeper是一款企业级存储系统,最初由雅虎研究院研发,在2011年作为Apache ZooKeeper的子项目进行孵化,在2015年1月成为 Apache顶级项目。...起初,BookKeeper是一个预写日志(WAL)系统,经过几年的发展,BookKeeper的功能更加完善,比如为Hadoop分布式文件系统(HDFS)的NameNode提供高可用和多副本,为消息系统比如...BookKeeper记录NameNode的edit log(edit log存放文件系统的操作日志),NameNode的所有修改都会记录到BookKeeper。...BookKeeper会设置一个读超时时间,如果读取超时了,会给另外一个bookie节点(speculative read)发送读请求。...Consumer消费消息后,还会修改Cusor中保存的offset,并且也会记录到BookKeeper。这样保证了Cursor的一致性。
在对其进行相关调研后,发现恰好Pulsar也是消息业务与存储分离的架构,而存储层则是另一个Apache开源基金会的BookKeeper。...二、BookKeeper BookKeeper作为一款可伸缩、高容错、低延迟的分布式强一致存储服务已被部分公司应用于生产环境部署使用,最佳实践案例包括替代HDFS的namenode、Pulsar的消息存储与消费进度持久化以及对象存储...BookKeeper基于Zone感知的ensemble替换策略便是应对此种场景的解决方案。...我们先看看BookKeeper使用上的一些约束: 1)BookKeeper不支持共享写入的,也即业务层多个节点如果都写数据,则各自写的必然是不同的ledger; 2)虽然BookKeeper允许多读,但多个应用节点各自读取的话...://bookkeeper.apache.org/ 为什么选择BookKeeper: https://medium.com/streamnative/why-apache-bookkeeper-part
在查看了开源代码后,我们有两个备选方案:Ceph 和 Apache BookKeeper。...首先,我们来看一下 BookKeeper 和 Ceph 在 CAP 和其他方面的表现。...我们决定选择 Apache BookKeeper。BookKeeper 支持仅追加 / 不可变数据存储,采用高可复制的分布式日志,满足我们对系统 CAP 的要求。...3Apache BookKeeper——近乎完美,但还有改善空间 Apache BookKeeper 几乎实现了我们对存储系统的全部要求,但仍需做一些工作。...他是 Apache BookKeeper 的 committer,积极参与 Apache BookKeeper 的开发。欢迎在 Twitter 上关注 Anup(@ghatageanup )。
今天的介绍会围绕下面四点展开:BookKeeper的简介BookKeeper的特性BookKeeper存储介质的演进BookKeeper的社区资源--01 BookKeeper的简介1....BookKeeper的诞生BookKeeper也是Apache的一个项目,同样是由雅虎捐献诞生,原本是为了应对雅虎开源HDFS里元数据存储的需求。...BookKeeper使用案例BookKeeper也有局限性,是append only的一个抽象变成了分布式服务,相对而言比较底层。...所以用户多是一些比较大的互联网公司或其他有大数据量的需求的用户,这些用户会在BookKeeper之上做一些二次开发,例如Pulsar在BookKeeper之上做了一层broker服务,对BookKeeper...BookKeeper与Raft的对比在底层原理上,Raft与BookKeeper有很多类似的地方,Raft每个数据写入的组织形式是term,跟BookKeeper的segment类似,每个term也会选择一组节点存储数据
Bookkeeper 在介绍 bookkeeper 扩容前先简单介绍些 Bookkeeper 的一些基本概念。...那什么情况下需要扩容 Bookkeeper 了,当然如果单个 Bookkeeper 的负载较高也是可以扩容的。 但我们当时扩容 Bookkeeper 的场景是想利用 Pulsar 的资源隔离功能。...Bookkeeper 节点中的。...元数据删除后 bookkeeper 才是真正下线成功,此时 broker 才会感知到 Bookkeeper 下线。...最后当 bookkeeper 成功下线后,我们需要删除 PVC,不然如果今后需要扩容的时候是无法启动 bookkeeper 的,因为在启动过程中会判断挂载的磁盘是否有数据。
BookKeeper AutoRecovery 背景 版本:BookKeeper版本为4.12.0(Pulsar 2.7.0的内置版本) Recovery主要针对的场景是:当集群中有部分bookie.../bin/bookkeeper shell recover bookiehostname:3181 恢复指定ledger的数据; bin/bookkeeper shell recover \ 192.168.1.10...关闭AutoRecovery $ bin/bookkeeper shell autorecovery -disable 开启AutoRecovery $ bin/bookkeeper shell autorecovery.../bin/bookkeeper shell listbookies -rw JMX enabled by default 16:18:19.118 [main] INFO org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand.../bin/bookkeeper shell listledgers # 以下节选部分输出 ...
Bookie Apache Pulsar 使用 Apache BookKeeper 作为存储层。Apache BookKeeper 针对实时工作负载进行优化,是一项可扩展、可容错、低延迟的存储服务。...客户端发布的消息存储在 BookKeeper 的服务器实例中,即 bookie。 Ledger 是 BookKeeper 中的基本存储单元。...,是用于存储bookie相关的元数据,比如bookie上有哪些ledger,bookkeeper目前使用的是zk存储,所在在部署bookkeeper前,要先有zk集群 Journal 其实就是bookkeeper...实例中(又称 bookies);Broker 依赖 ZooKeeper 集群处理特定的任务; 一个BookKeeper:包含一个或多个 bookie 的 BookKeeper 集群负责消息的持久化存储...Apache BookKeeper 在这里我们赵中介绍一下Apache BookKeeper。
一个包含一个或者多个Bookies的BookKeeper,这个BookKeeper主要负责消息的 持久化存储 用于Pulsar集群操作的该Pulsar集群独有的ZooKeeper 下图展示了一个Pulsar...如果积压的消息对于缓存来说太大了, 则Broker将开始从BookKeeper那里读取Entries(Entry同样是BookKeeper中的概念,相当于一条记录)。...Pulsar用 Apache BookKeeper作为持久化存储。...除了消息数据,cursors也会被持久化入BookKeeper。 Cursors是消费端订阅消费的位置。 BookKeeper让Pulsar可以用一种可扩展的方式存储消费位置。...Ledger读一致性 BookKeeper的主要优势在于他能在有系统故障时保证读的一致性。
集群 BookKeeper处理Pulsar中的所有持久数据存储。...您需要部署BookKeeper Bookies集群才能使用Pulsar。 您可以选择运行** 3台机器组成的BookKeeper集群**。...您可以使用conf/bookkeeper.conf配置文件来配置BookKeeper bookies 。...您可以在这里找到可用的BookKeeper配置参数的完整清单. 但是,查询BookKeeper文档以获得更深入的指导可能是更好的选择。...如果要启用该特性,需要在conf/bookkeeper.conf文件中执行以下设置来在BookKeeper上启用表服务。。
Pulsar用 Apache BookKeeper作为持久化存储,Broker持有BookKeeper client,把未确认的消息发送到BookKeeper进行保存。...BookKeeper是一个分布式的WAL(Write Ahead Log)系统,pulsar使用BookKeeper有下面几个便利: 可以为Topic创建多个ledgers Ledger是一个只追加的数据结构...,并且只有一个writer,这个writer负责多个BookKeeper存储节点(就是Bookies)的写入。...2 BookKeeper简介 从上一节的讲解看出,Apache Bookkeeper是一个易扩展、高可用、运维简单的分布式存储系统。这节再看一下Bookkeeper的其他三个特性。...bookie写完消息后会给broker一个回复,broker收到指定数量的确认消息后就会认为写BookKeeper成功。
一文,原文地址在这里,大有感触,作者分享了自己过去几年时间里在工作中使用Apache Pulsar、DistributedLog,以及BookKeeper的实际经验。...郭斯杰7年前作为雅虎北京的推送消息团队成员开始使用BookKeeper,大约5年前,也就是2012年,郭斯杰转战到了位于旧金山的Twitter公司,开始致力于利用BookKeeper解决分布式数据库的一致性问题...预备知识 郭斯杰最早开始接触的是BookKeeper,从后面的文章介绍中我们可以知道,BookKeeper是很多组件的基础,可以帮助进行分布式环境的信息协同管理,正是由于拥有BookKeeper的实际工作经验...郭斯杰7年前作为雅虎北京的推送消息团队成员开始使用BookKeeper,大约5年前,也就是2012年,郭斯杰转战到了位于旧金山的Twitter公司,开始致力于利用BookKeeper解决分布式数据库的一致性问题...预备知识 郭斯杰最早开始接触的是BookKeeper,从后面的文章介绍中我们可以知道,BookKeeper是很多组件的基础,可以帮助进行分布式环境的信息协同管理,正是由于拥有BookKeeper的实际工作经验
并将消息存储到BookKeeper中,同时单个集群内也需要有一套ZK集群,来存储一些元数据。 BookKeeper集群: 内部包含多个bookies,用于持久化消息。...BookKeeper BookKeeper是一个可横向扩展的、错误容忍的、低延迟的分布式存储服务,BookKeeper中最基本的单位是记录,实际上就一个字节数组,而记录的数组称之为ledger,BK会将记录复制到多个...Pulsar 中把每一个消息认为是存储在 Apache BookKeeper 中的分布式日志, 每个分布式日志又被分为多个 Segment 分段, 每个 Segment 分段在 Apache BookKeeper...broker 持有 BookKeeper的客户端 writer,writer 收到写请求后,会并发的写入 N 个 bookie。...这个数量是可配置的,越大 BookKeeper 延迟越大,数据一致性越高。
BookKeeper 4.9.0相比于4.7.2,包含了更多的特性和性能优化: 智能的内存管理:BookKeeper使用Direct Memory和Netty Buffer Pool进行内存管理。...在4.9.0版本中,BookKeeper引入智能的内存管理,绝大部分时间使用DirectMemory,在DirectMemory不够用的情况下,BookKeeper会使用堆内的内存。...用户可以在BookKeeper客户端开始粘性读 - BookKeeper客户端会优先选择一个复本进行读取,只有当这个复本不可读或者网络时延变高的情况下,BookKeeper才会更换其他复本进行读取。...针对超低延时的优化:大部分的BookKeeper部署是使用磁盘进行存储。...Etcd元数据管理:很长时间内,BookKeeper默认的元数据管理是ZooKeeper。从4.9.0开始,BookKeeper正式支持Etcd作为其元数据管理的一种方案。
领取专属 10元无门槛券
手把手带您无忧上云