zookeeper数据恢复

删除topic

kafka未设置delete.topic.enable=true时, 尝试删除topic会显示test - marked for deletion
于是登录zookeeper客户端(zkCli.sh), 尝试删除topic

  1. 查看topic所在的目录: ls /brokers/topics;
  2. 查看marked for deletion标记的topic: ls /admin/delete_topics
    删除此处的topic, 可以恢复
  3. ls /config/topics, 也有所有topic的信息, 但用途不明
    删除zookeeper上对应的节点之后, kafka上对应的topic从列表中消失
  4. 最后删除磁盘上的对应文件.
    server.properties中, 设置了log.dirs. 在该目录下可以找到所有的topic文件, 在每个kafka节点删除的指定topic, 就手动删除了topic

误删除zookeeper文件

删除指定topic时, 把zookeeper上的所有topic都删除掉了
于是考虑数据恢复

1. 查看快照和日志

$ZOOKEEPER_HOME/data$ZOOKEEPER_HOME/datalog文件夹中, 有zookeeper的快照和增量日志, 根据快照和增量日志, 可以将zookeeper恢复到指定的状态
快照和日志文件都是可读的, 参考使用下述指令

# 查看Log
java -cp dist-maven/zookeeper-3.4.9.jar;lib/log4j-1.2.16.jar;lib/slf4j-log4j12-1.6.1.jar;lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.4115cad8c1
# 查看快照
java -cp dist-maven/zookeeper-3.4.9.jar;lib/log4j-1.2.16.jar;lib/slf4j-log4j12-1.6.1.jar;lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.4115cad8bf

实际操作中, 无法使用-cp+;指定多个jar包, 于是将所需jar包放到同一个文件夹下, 指定整个文件夹为环境变量, 假设jar包都放在lib文件夹里, 可以使用参数java -Djava.ext.dirs=lib test

2. 恢复zookeeper状态

ls -lt根据更改时间排序, $ZOOKEEPER_HOME/data$ZOOKEEPER_HOME/datalog文件夹中, 只保留最接近异常之前的 快照和增量日志, 然后重启zk集群即可

rename时遇到的问题
  1. 计划将文件夹下的数据全部加.bak后缀, 只保留正确的快照
  2. 考虑到mv无法批量改名, 因此尝试使用rename
  3. 谷歌了rename批量改名的语法, 给出的解决方案是使用正则.
  4. 尝试使用正则语法, 发现在环境中该语法是无效的
  5. rename有两个版本, 输入rename --help提示call: rename from to files...说明不支持正则语法, 提示rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]说明支持
  6. 最终选择使用shell脚本实现该功能, 如下
for f in `ls ./`
do
mv $f ${f}.bak
done
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值