bigywater.tech
ZooKeeper · 54

快照频率与事务日志增长

ZooKeeper 默认不清理旧的快照和事务日志,磁盘会一直涨,直到写满(第 57 篇看写满的后果)。这篇量一下增长有多快,再用官方清理工具和 autopurge 清理。

38 个 / 145 MiB
6 万次写之后的快照个数与合计大小(不清理)
5 GiB vs 12.6 MiB
81 个日志文件的表观大小与实占
38 → 3
PurgeTxnLog -n 3 前后的快照数

不清理的增长

实测 · 本机执行输出
      累计写入    快照数     快照合计 MiB     日志文件数     日志表观 MiB     日志实占 MiB
     10000     13         10.6        13          832          2.1
     30000     26         51.0        40         2560          6.3
     60000     38        144.7        81         5184         12.6

磁盘监控要看实际占用(文件系统块数),不要用 ls -l 的表观大小——事务日志是预分配的稀疏文件(这是 macOS APFS 上的现象,别的文件系统可能不是稀疏的)。

PurgeTxnLog

实测 · 本机执行输出
  清理前:38 个快照、81 个日志文件;清理后:3 个快照、10 个日志文件;日志实占 12.6 → 1.4 MiB
  保留下来的快照: ['snapshot.d37b', 'snapshot.d6de', 'snapshot.e77a']
  清理后重启:znode 数 60005 (数据没丢)

autopurge

实测 · 本机执行输出
   autopurge.snapRetainCount set to 3
   autopurge.purgeInterval set to 1
   Purge task started.
   Purge task completed.

分步演示

清理
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / ZooKeeper 3.9.6(brew 安装的 jar,用 java -cp 直接启动自己的实例,OpenJDK 17 Temurin,JVM 堆 128 MiB)/ 本机回环端口 7300+,数据在临时目录;默认 tickTime=2000;计时用 time.perf_counter,数字每次运行会有小幅抖动。单机,snapCount=1000;数据 100 字节;PurgeTxnLog 是 3.9.6 jar 里的官方类
    • 没有验证:autopurge 在一小时之后的实际清理、保留数量对恢复能力的影响(保留 3 个够不够,要看备份策略)、集群里各节点各自清理的互不影响
    京ICP备2026067502号-1京公网安备11010502063487号