Pulsar 主题压缩 -修改...

目录

How topic compaction works


Pulsar 以高度可扩展的消息数据持久存储为主要目标。Pulsar 主题使您能够持久存储所需数量的未确认消息,同时保留消息顺序。默认情况下,Pulsar 存储在某个主题上生成的所有未确认或未处理的消息。对于许多 Pulsar 场景来说,在一个主题上存储许多未确认的消息是必要的,但对于Pulsar 用户来说,在整个消息的日志中“回放”也将变得非常耗时。

有关主题压缩的更实用指南,请参阅 Topic compaction cookbook.

对于某些场景,消费者不需要主题日志的完整“图像”。它们可能只需要几个值去构建更“浅”的日志图像,甚至可能只需要最新的值。对于这些类型的场景,Pulsar 提供了主题压缩。当您对某个主题使用压缩时,Pulsar 会遍历主题的消息积压日志,并移除旧的消息,也就是说,它会按每个键遍历主题,只留下与该键关联的最新消息。

Pulsar的主题压缩功能:

  • 允许通过主题日志更快地“回放”
  • 仅适用于持久主题
  • backlog 达到一定大小时自动触发,也可以通过命令行手动触发。See the Topic compaction cookbook
  • 在概念和操作上不同于保留(retention)策略和到期(expiry)策略。相比如主题压缩策略,保留(retention)会优先执行。如果 retention 已从主题的消息积压中删除消息,则该消息也将无法从压缩的主题分类帐(ledger)中读取。

主题压缩示例:股票行情

Pulsar 压缩主题的一个示例场景是股票行情主题。在股票代码主题中,每条消息都带有一个时间戳的美元价值,用于购买股票(消息键包含股票符号,例如 AAPL 或 GOOG)。对于股票行情,您可能只关心股票的最新价值,而对历史数据不感兴趣(即,您不需要构建每个键的主题消息序列的完整图像)。在这种情况下,压缩是非常有益的,因为它可以避免消费者需要在费解的消息中回放。

How topic compaction works

当通过 CLI 触发主题压缩时(via the CLI),Pulsar将从头到尾遍历整个主题。对于每个 Key,压缩程序将保留该 Key 最新的记录// CLI : 命令行界面(英语:command-line interface,缩写:CLI

之后,broker 将创建一个新的分类账(BookKeeper ledger),并对主题中的每条消息进行第二次迭代。对于每条消息的Key,如果Key与最新的数据匹配,则该Key的有效负载数据、消息ID和元数据都将写入新创建的分类帐(ledger)。如果Key与最新的数据不匹配,则将跳过该消息并将其保留。如果任何给定消息的有效负载为空(对一条消息的 key 赋空值),它将被跳过并被视为已删除(类似于 key-value 数据库中的墓碑概念->即暂时标记删除)。当第二次迭代主题结束时,会关闭新创建的分类账(BookKeeper ledger),并将以下两个内容写入主题的元数据:分类账ID(BookKeeper ledger)和上次压缩消息的消息ID(称为主题的压缩范围 compaction horizon)。一旦写入此元数据,压缩就完成了。

在压缩操作初始化之后,​无论何时对压缩范围和压缩的积压消息(compacted backlog)进行任何形式更改,都会通知该主题的 broker,比如:

启用了读取压缩的客户端(consumers and readers)尝试从主题中读取消息,并且:

  • 像正常一样读取主题(如果消息ID大于或等于压缩范围)或者
  • 从压缩范围开始读取(如果消息ID小于压缩范围)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值