查看原文
其他

Pulsar分级存储 -- S3演示

翟佳 ApachePulsar 2019-03-28

本文会首先介绍Pulsar的分级存储。然后通过一个示例,演示在分级存储中怎样使用Amazon S3作为二级存储。


介绍


Pulsar中的每个Topic由一列有序的的段(Segment)列表组成。Pulsar只会写入其中的最后一段。 除最后一段之外,之前的所有段都已经被密封了,不能再往其中追加数据,这就是Pulsar的基于段(Segment)的存储结构。


Pulsar的基于Segment的存储架构,支持一个Topic的空间大小存储满整个存储集群。但是随着要保存的Partition的数据的逐渐增多,会让存储变的昂贵。解决这个问题的一种策略就是使用分级存储(Tiered Storage)。


使用分级存储的一个场景是用户希望对一个比较大的Topic的数据保存比较长的时间。比如一个Topic中包含所有客户的点击记录,我们可以用这个topic中的数据来训练推荐系统。如果这个Topic的数据被一直保存着,当训练的算法改变后,我们就可以重新利用这些历史数据来训练新的推荐系统。


Pulsar的分级存储功能允许将较旧的积压数据卸载到二级存储中做长期存储,从而释放BookKeeper中的空间,进而降低存储成本。使用分级存储,我们可以将一个Topic中的老的数据段(Segment)自动从BookKeeper搬出到更便宜的二级存储。对Client来说,整个过程是透明无缝的。


当Offload被手动或者自动触发之后,Broker会一个接一个地将一级存储中的段,搬移到二级存储中。

Pulsar目前支持使用S3,Google-Cloud-Storage作为二级存储。用户可以灵活配置Topic想要保留在BookKeeper(一级存储)中的大小,和数据在搬移到二级存储后多久(默认4小时)从BookKeeper中删除。


我们在这篇文章中会使用S3作为一个例子,来演示怎么使用Pulsar的这个特性。


Operations With S3


在这个示例中使用的是Pulsar-2.1.1版本,主要包含3个步骤:

- 在Amazon S3(https://s3.console.aws.amazon.com)中创建一个bucket;

- 下载Pulsar包,为Pulsar的Broker配置Offload,用Standalone模式启动Pulsar;

- 用Pulsar的producer并产生数据,触发Offload,并验证。


一, 在S3中创建Bucket

1. 登陆AWS console,选择S3服务:


2. 创建一个bucket,点击“Create bucket”, 填上Bucket的名字,然后点击next并一直点击确认。


3. 经过上面的操作,可以看到一个新的Bucket已经被创建了。

4. 确认在本机上配置好了aws的access


二, 下载Pulsar包,并配置

1. 从Pulsar的官网(http://pulsar.apache.org/en/download/)下载最新的Pulsar Binary文件(apache-pulsar-x.x.x-bin.tar.gz) ,解压,准备修改配置文件conf/standalone.conf。


2. 修改配置文件conf/standalone.conf中关于Offload的选项,设置第一步中创建的bucket:


```

managedLedgerOffloadDriver=S3

s3ManagedLedgerOffloadBucket=offload-test-aws

s3ManagedLedgerOffloadRegion=us-east-1

```



修改配置文件conf/standalone.conf中每个segment的大小配置,这使得每个Segment更小,更容易产生新的segment。


3. 在终端用standalone模式启动Pulsar:

运行命令 `bin/pulsar standalone`


三, 在Pulsar中产生数据,触发Offload,并验证

1. 在终端中启动一个消费者,保证将要产生数据不会因为没有消费者被丢弃掉:


`bin/pulsar-client consume -s “my-sub-name“ my-topic-for-offload`


2. 开一个新的终端窗口,运行下面命令2次,产生2000条message,保证在topic中有两个Segment,这样第一个segment可以被搬移到S3上。

`bin/pulsar-client produce my-topic-for-offload  --messages "hello pulsar this is the content for each message" -n 1000`


3. 用命令行手动触发Offload:

`bin/pulsar-admin topics offload --size-threshold 10K public/default/my-topic-for-offload`


4. 使用命令等待offload成功:

`bin/pulsar-admin topics offload-status public/default/my-topic-for-offload`



5. 验证在第一个Segment已经被搬移到S3中:

在s3的终端可以看到ledger-31已经被存储。


使用命令行,同样可以看到这个Topic中有两个Segment,第一个Segment -- ledger-31的offloaded状态为true。


以上的步骤就是我们使用S3作为二级存储的整个过程。


如果想要了解更多的分级存储的内容,欢迎参考Pulsar的官网:

http://pulsar.apache.org/docs/en/concepts-tiered-storage/

http://pulsar.apache.org/docs/en/cookbooks-tiered-storage/


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存