TreeviewCopyright © aleen42 all right reserved, powered by aleen42

主题压缩

Pulsar是以高度可伸缩的消息数据持久存储为主要目标构建的。Pulsar主题使您能够持久地存储尽可能多的未确认消息,同时保持消息顺序。
默认情况下,pulsar存储所有的未确认/未处理的消息,对于许多Pulsar用例来说,在一个主题上积累许多未确认的消息是必要的,但对于Pulsar消费者来说,“倒带”整个消息日志也可能非常耗时

对于某些用例,使用者不需要主题日志的完整“映像”。他们可能只需要几个值就可以构造一个更“浅”的日志映像,甚至可能只需要最近的值。 对于这类用例,Pulsar提供了主题压缩。当你在一个主题上运行压缩,Pulsar通过一个主题的积压,并删除被后面的消息所掩盖的消息,即它通过每个键的主题,只留下与该键相关的最新消息。

主题压缩功能

  • 允许通过主题日志更快地“倒带”
  • 仅适用于持久主题
  • 当积压达到一定规模时自动触发,或者可以通过命令行手动触发
  • 在概念上和操作上都不同于保留和过期。然而,主题压缩尊重保留。如果保留已经从主题的消息backlog中删除了消息,那么从压缩的主题分类账中也将无法读取该消息

主题压缩的工作原理

当通过CLI触发主题压缩时,Pulsar将从头到尾遍历整个主题。对于遇到的每个键,压缩例程将保存该键的最新出现记录

在此之后,代理将创建一个新的BookKeeper ledger,并对主题上的每条消息进行第二次迭代。对于每条消息,如果密钥与该密钥的最新出现相匹配, 则密钥的数据有效负载、消息ID和元数据将被写入新创建的ledger。如果该键与最新的不匹配,则消息将被跳过并保持原样。如果任何给定的消息有一个空的有效负载, 它将被跳过并被视为已删除(类似于键值数据库中的墓碑概念)。在主题的第二次迭代结束时,关闭新创建的BookKeeper ledger,并将两件事写入主题的元数据:BookKeeper ledger的ID和最后一个压缩消息的消息ID(这被称为主题的压缩范围)。一旦元数据被写入,压缩就完成了。

在初始压缩操作之后,只要将来对压缩范围和压缩待办事项有任何更改,就会通知拥有主题的Pulsar代理。当这种变化发生时:

  • 启用了读取压缩功能的客户端(使用者和阅读器)将尝试从主题中读取消息:
    • 像往常一样读取主题(如果消息ID大于或等于压缩范围)
    • 从压缩水平开始读取(如果消息ID低于压缩水平)

results matching ""

    No results matching ""