Pulsar集群磁盘使用量来回涨跌

在私有化环境中,存在部分topic,有生产者但没有消费者,从而该topic的磁盘占用率在来回波动,但是在新建集群中,若没有提前创建消费者,写入的消息,立马就会丢失,那为啥现在我一个topic没有消费者的清空,该topic的磁盘占用还在30-60G波动???,请问是bookie/broker参数来控制磁盘使用的回收???

pulsar版本:2.4.0

在 broker 中,写数据是通过 bookeeper 的客户端向 bookie 写入数据,写数据的载体是 ledger。broker 会根据一下几个参数来控制单个 ledger 的大小。maxEntriesPerLedger (单个 ledger 的数据条,默认为 50000,并不是指消息条数,因为 producer 可能会合并消息),maxSizePerLedgerMb (单个 ledger 的数据总大小,默认为 100 m)。maximumRolloverTimeMs (当前时间距离上次创建 ledger 的时间)。这几个条件其中之一满足时,会创建一个新的 legder 继续写数据,老的 ledger 会进行关闭。
在你的场景中,是没有消费者的。没有消费者的情况下,broker 会认为数据没有被使用,进行 ledger 的删除。
以下两种场景可能都会触发删除:
1.老 ledger 满了,将老 ledger 关闭时,会触发删除。
2.定时任务,broker 中存在 retentionCheckIntervalInSeconds (默认 120s) 配置,会启动定时任务,定时触发 ledger 的删除

在 broker 触发了删除之后, bookkeeper 的服务端会识别到 ledger 已经被删除,对磁盘的存储数据进行清理(bookeeper 的 GC 机制)

#拉取的每个分区topic的internalstats信息如下:消息在ack且生产ledger
图一


图二

#通过上图有ledger生成,但是没有消费者信息
图三

#通过内置指标提取的topic的生成大小
图四
pulsar_storage_size

#官方文档说明:没有sub的情况是不会存储消息的

结合图1-4,跟官网说明是不匹配的,主要存在如下几点疑问
1、没有消费者,按道理不应该存储消息,那存储40G咋来的
2、没有sub,ledger中的消息如何ack的且对应的topic也没有backlog的堆积情况
3、这个磁盘容量来回波动是怎么的逻辑导致的?

没有消费者依然会存储,后面的定时任务检测,发现没有持久化的订阅,broker认为这个数据可以删除,然后才会删除。这个删除在 broker 测是打标记,告诉 bookie 哪些 ledger 可以删除,后面 bookie 会通过 GC 任务进行磁盘清理。

2、没有sub,ledger中的消息如何ack的且对应的topic也没有backlog的堆积情况

你的 ack 是基于 sub 来的,没有 sub,没有 ack.

3、这个磁盘容量来回波动是怎么的逻辑导致的?

在第一个问题中已经回答

现在我这个topic是没有sub,但实际再ack啊,图上我不是给标记了啦嘛

那你这个说法是在有sub的情况吧,我现在是没有sub啦嘛,而且图五中官网也说明了,无sub就不存储msg啦嘛,是官网错了???