背景

5台bookies的硬盘被打满,导致pulsar不能正常提供服务。当bookies的硬盘被打到95%以上,会自动把bookies给设置为readonly的

pulsar bookies清理磁盘方法_pulsar

原因

是因为有消费者积压,造成大量的数据未被消费确认。默认情况下,Pulsar 会永久存储所有未确认的消息。在大量消息未得到确认的情况下,会导致大量磁盘空间的使用。因此,我们需要将未确认的消息从硬盘中清除

操作方法

1,可以设置生存时间(TTL)

使用 set-message-ttl 子命令并指定命名空间和TTL(以秒为单位,使用-ttl/--messageTTL参数指定)

# bin/pulsar-admin namespaces set-message-ttl  public/default --messageTTL 60

设置成功后,查看下TTL的配置情况,使用 get-message-ttl 子命令并指定命名空间。

 bin/pulsar-admin namespaces get-message-ttl  public/default

pulsar bookies清理磁盘方法_pulsar_02

 

2,设置保留策略

可以通过pulsar-admin来设置 命名空间、大小限制和时间限制来设置命名空间的保留策略。

使用set-retention子命令并指定命名空间,使用-s/--size参数指定大小限制,使用-t/--time参数指定时间限制。

bin/pulsar-admin namespaces set-retention  public/default --size 1G --time 2m
public/default 命名空间中的每一个主题大小限制设置为 10GB,时间限制设置为2分钟。 – 当保留时间在2分钟内的主题消息大小达到1GB时,确认的消息将不会被保留。 – 2分钟后,即使主题的消息大小小于1GB,已确认的消息也不会保留。

查看策略是否执行成功,使用 get-retention 子命令并指定命名空间。

bin/pulsar-admin namespaces get-retention  public/default


{
  "retentionTimeInMinutes" : 2,
  "retentionSizeInMB" : 1024
}

 

3,将TTL和Retention保留策略恢复

等未被确认的数据都被删除了,需要将策略恢复,查看硬盘使用情况

pulsar bookies清理磁盘方法_pulsar_03

恢复TTL配置

pulsar-admin namespaces remove-message-ttl  public/default

 

要禁用消息保留策略配置,将值设置为 0

bin/pulsar-admin namespaces set-retention  public/default --size 0 --time 0