当前位置:首页 > 技术 > 正文内容

快速清理Kafka队列的脚本化方法

访客 技术 2026年5月22日 5
在进行性能测试时,如果Kafka消息队列堆积过长,等待程序自行消费完毕可能需要耗费大量时间。为了解决这一问题,可以通过备份和还原Kafka及Zookeeper文件夹的方式快速清理队列。以下是实现该功能的脚本化方案。
### 1. 环境清理脚本 (clean_environment.sh)
此脚本用于一次性清理并备份Kafka和Zookeeper环境。请确保路径配置正确,并且仅在没有备份文件时执行。

#!/bin/bash

# 导出Kafka Topic(可根据需求添加)
echo "Stopping Zookeeper..."
/app/zookeeper/bin/zkServer.sh stop
ps -ef | grep zookeeper | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 5

# 清理Zookeeper数据
rm -rf /app/zookeeper/data/version-2/
rm -rf /app/zookeeper/logs/*
rm -rf /app/zookeeper_backup
rm -rf /app/zookeeper_org

# 备份Zookeeper文件
cp -rp /app/zookeeper/ /app/zookeeper_backup
cp -rp /app/zookeeper/ /app/zookeeper_org

# 停止Kafka
echo "Stopping Kafka..."
/app/kafka_cluster/bin/kafka-server-stop.sh
ps -ef | grep kafka_cluster | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 5

# 清理Kafka日志目录
rm -rf /app/kafka_cluster/kafka-logs/*
rm -rf /app/kafka_cluster/logs/*
rm -rf /app/kafka_cluster_org
rm -rf /app/kafka_cluster_backup

# 备份Kafka文件
cp -rp /app/kafka_cluster/ /app/kafka_cluster_org
cp -rp /app/kafka_cluster/ /app/kafka_cluster_backup
### 2. 初始化Zookeeper脚本 (init_zk.sh)
此脚本用于停止、清理并重新启动Zookeeper服务。

#!/bin/bash

echo "Stopping Zookeeper service..."
/app/zookeeper/bin/zkServer.sh stop
sleep 3

echo "Initializing Zookeeper installation directory..."
rm -rf /app/zookeeper
cp -rp /app/zookeeper_backup /app/zookeeper

echo "Starting Zookeeper service..."
/app/zookeeper/bin/zkServer.sh start
PID=$(ps -ef | grep "/app/zookeeper/" | grep -v grep | awk '{print $2}')
echo -e "\033[42;30m Zookeeper process ID: $PID \033[0m"
### 3. 初始化Kafka脚本 (init_kafka.sh)
此脚本用于停止、清理并重新启动Kafka服务。

#!/bin/bash

KAFKA_DIR="/app/kafka_cluster"
BACKUP_DIR="${KAFKA_DIR}_backup"

echo "Stopping Kafka service..."
${KAFKA_DIR}/bin/kafka-server-stop.sh
sleep 10
ps -ef | grep kafka_cluster | grep -v grep | awk '{print $2}' | xargs kill -9

if [[ -d ${BACKUP_DIR} && ${#KAFKA_DIR} -ge 8 ]]; then
    echo "Deleting Kafka folder: ${KAFKA_DIR}"
    rm -rf ${KAFKA_DIR}
    echo "Restoring from backup folder: ${BACKUP_DIR}"
    cp -rp ${BACKUP_DIR} ${KAFKA_DIR}
else
    echo "Backup folder not found: ${BACKUP_DIR}, exiting..."
    exit 1
fi

echo "Starting Kafka service..."
${KAFKA_DIR}/bin/kafka-server-start.sh -daemon ${KAFKA_DIR}/config/server.properties
PID=$(ps -ef | grep kafka_cluster | grep -v grep | awk '{print $2}')
echo -e "\033[42;30m Kafka process ID: $PID \033[0m"
### 4. 创建Topic脚本 (create_topics.sh)
此脚本根据指定文件创建Kafka Topics。

#!/bin/bash

TOPIC_FILE="/home/root/topics.txt"
ZK_HOSTS="192.168.53.125:2181,192.168.53.126:2181,192.168.53.127:2181"
CMD="/app/kafka_cluster/bin/kafka-topics.sh"

while read -r topic; do
    ${CMD} --create --zookeeper ${ZK_HOSTS} --replication-factor 3 --partitions 8 --topic ${topic}
done < "${TOPIC_FILE}"
### Topic文件示例 (topics.txt)
以下为`topics.txt`文件内容:

test1
test2
### 执行步骤
按照以下顺序执行清理和恢复操作:
  1. 停止Kafka Manager:`ps -ef | grep manager | grep -v grep | awk '{print $2}' | xargs kill -9`
  2. 运行初始化Zookeeper脚本:`./init_zk.sh`
  3. 运行初始化Kafka脚本:`./init_kafka.sh`
  4. 启动Kafka Manager:`nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=9000 &`
  5. 创建Topics:`./create_topics.sh`

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。