相关大佬博客

# zookeeper 事务日志和快照文件介绍
https://www.cnblogs.com/jxwch/p/6526271.html
# 清理文件
https://blog.csdn.net/njuptcyd/article/details/90083795

大佬手动清理的文章写得很好,就是描述能力差了不少…,走投无路之下还是看了半天zookeeper的清理脚本内容才搞清楚…

自动清理方式:添加到zoo.cfg

# 指定每隔12小时清理一次zookeeper事务日志,防止事务日志过多占用空间,清理后保留最近10份
autopurge.snapRetainCount=10
autopurge.purgeInterval=12

手动清理

zkCleanup.sh -n 10

直接-n 指定保留的文件数即可,不需要指定目录,因为配置文件中已经写了,执行这个脚本的时候,脚本会先加载Env脚本中的所有内容,然后根据Env文件中获取配置文件的位置,再去配置文件中获取这两个目录的位置,如果配置文件中写了以下内容

# 路径不一样的,但是前缀肯定有的
dataDir=/usr/local/zookeeper-3.4.13/data
dataLogDir=/usr/local/zookeeper-3.4.13/datalog

那么他会优先使用配置文件定义的,如果配置文件中没有,才会使用传入的位置.

直接运行文件所给出的提示

[root@h1 zookeeper-3.4.13]# zkCleanup.sh
Usage:
PurgeTxnLog dataLogDir [snapDir] -n count
        dataLogDir -- path to the txn log directory
        snapDir -- path to the snapshot directory
        count -- the number of old snaps/logs you want to keep, value should be greater than or equal to 3

脚本内容

ZOOBIN="${BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"
# 执行zkEnv.sh 获取变量
if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR"/../libexec/zkEnv.sh
else
  . "$ZOOBINDIR"/zkEnv.sh
fi

# 获取配置文件位置
ZOODATADIR="$(grep "^[[:space:]]*dataDir=" "$ZOOCFG" | sed -e 's/.*=//')"
ZOODATALOGDIR="$(grep "^[[:space:]]*dataLogDir=" "$ZOOCFG" | sed -e 's/.*=//')"
# 判断变量是否为空 不为空表示从配置文件获取到了快照目录和事务日志目录.
if [ "x$ZOODATALOGDIR" = "x" ]
then
"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
     -cp "$CLASSPATH" $JVMFLAGS \
     org.apache.zookeeper.server.PurgeTxnLog "$ZOODATADIR" $*
else
# 调用jar包清理
"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
     -cp "$CLASSPATH" $JVMFLAGS \
     org.apache.zookeeper.server.PurgeTxnLog "$ZOODATALOGDIR" "$ZOODATADIR" $*
fi
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐