kafka的备份策略:从备份到恢复

文章目录

  • 一、全量备份
  • 二、增量备份
  • 三、全量恢复
  • 四、增量恢复

前言:Kafka的备份的单元是partition,也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互,follow从leader副本进行拉数据进行同步,从而保证数据的冗余,防止数据丢失的目的。如图:
在这里插入图片描述
Kafka 数据备份类型:

  • 全量备份
  • 增量备份

全量备份是将整个 Kafka 的数据复制到一个不同的地方。
增量备份是在全量备份后仅仅备份增量的数据。

一、全量备份

# 指定备份的主题
BACKUP_TOPIC=test #指定备份的数据目录
BACKUP_DIR=/tmp/backup #创建备份目录
mkdir -p $BACKUP_DIR #备份主题数据
kafka-console-consumer.sh --bootstrap-server localhost:9092  --topic $BACKUP_TOPIC --from-beginning > $BACKUP_DIR/$BACKUP_TOPIC.txt。

以下是该命令的详细解释:

kafka-console-consumer.sh:这是 Kafka 提供的命令行消费者工具的可执行文件路径。
--bootstrap-server localhost:9092:指定 Kafka 的引导服务器地址和端口,这里是 localhost 的 9092 端口。
--topic $BACKUP_TOPIC:指定要消费的 Kafka 主题,这里是变量 $BACKUP_TOPIC 指定的主题。
--from-beginning:指定从主题的起始位置开始消费消息,而不是从最新的消息开始。
>:这是一个重定向符号,将输出导入到指定的文件中。
$BACKUP_DIR/$BACKUP_TOPIC.txt:指定输出文件的路径和名称,这里是变量 $BACKUP_DIR 指定的目录下创建名为 $BACKUP_TOPIC.txt 的文件。
通过执行这个命令,Kafka 将从指定的主题中读取消息,并将它们写入到指定的文本文件中,从而实现备份的目的。即使用kafka-console-consumer.sh,工具将主题$BACKUP_TOPIC的数据备份到$BACKUP_DIR目录下的$BACKUP_TOPIC.txt文件中。

二、增量备份

增量备份需要借助第三方工具,例如 Kafka 的 MirrorMaker 等实现 。
下面是 MirrorMaker 的用法示例:

# 指定源和目的地址
SOURCE_HOST=localhost:9092
DESTINATION_HOST=backup-host:9092。
# 创建 MirrorMaker 配置文件
cat > /tmp/mirror-maker.properties <<EOF
consumer.bootstrap.servers=$SOURCE_HOST
producer.bootstrap.servers=$DESTINATION_HOST
EOF。
# 运行 MirrorMaker
kafka-run-class.sh kafka.tools.MirrorMaker \
  --consumer.config /tmp/mirror-maker.properties \
--producer.config /tmp/mirror-maker.properties \
--whitelist $BACKUP_TOPIC。

上述代码中创建一个 MirrorMaker 配置文件将源端的数据同步到目标端–whitelist参数指定备份的主题。

下面介绍Kafka数据恢复

三、全量恢复

# 指定恢复的主题
RESTORE_TOPIC=test 
# 指定备份文件路径
BACKUP_FILE=/tmp/backup/$RESTORE_TOPIC.txt。
# 恢复主题数据
kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic $RESTORE_TOPIC  \
--new-producer \
< $BACKUP_FILE

上述代码将$BACKUP_FILE文件中的数据恢复到$RESTORE_TOPIC主题中。
注意:该脚本也是同步操作,恢复时间较长时建议使用异步操作。

kafka-console-producer.sh \
--broker-list localhost:9092 \
--topic $RESTORE_TOPIC  \
--new-producer  \
--async \
< $BACKUP_FILE。

四、增量恢复

增量恢复需要使用 MirrorMaker 来实现,下面是 MirrorMaker 的用法示例:
# 创建MirrorMaker 配置文件
cat > /tmp/mirror-maker.properties <<EOF
consumer.bootstrap.servers=backup-host:9092producer.bootstrap.servers=localhost:9092 
EOF
# 运行MirrorMaker
kafka-run-class.sh kafka.tools.MirrorMaker \
--consumer.config /tmp/mirror-maker.properties \
--producer.config /tmp/mirror-maker.properties \ 
--whitelist $RESTORE_TOPIC  (或者是*,如: --whitelist “.*”)

上述代码中创建一个 MirrorMaker 配置文件将备份端的数据同步到目标端$RESTORE_TOPIC主题中。
注意:增量恢复会将备份端数据的变化同步到目标端,因此恢复时必须先将备份端数据同步完整。
实例:
consumer.properties文件:

#cat consumer.properties
bootstrap.servers=192.168.3.194:9092
group.id=mirrormaker
auto.offset.reset=earliest

producer.properties文件:
#cat producer.properties
bootstrap.servers=192.168.2.123:9092

运行mirror-maker
cat run-mirrormaker.sh
kafka-run-class.sh kafka.tools.MirrorMaker \
 --consumer.config ./consumer.properties \
--producer.config ./producer.properties \
--offset.commit.interval.ms 5000 --num.streams 2 \
--whitelist "test0428"

参数说明:
–consumer.config 消费者的配置文件(要消费的集群)
–producer.config 指定生产配置文件(要发送到的目标集群)
–whitelist 要同步的topic白名单,可以匹配正则,也可以指定具体topic
–offset.commit.interval.ms 消费端提交offset时间间隔
–num.streams MirrorMaker 要创建多少个 KafkaConsumer 实例

运行后会提示:
WARNING: The default partition assignment strategy of the mirror maker will change from ‘range’ to ‘roundrobin’ in an upcoming release (so that better load balancing can be achieved). If you prefer to make this switch in advance of that release add the following to the corresponding config: ‘partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor’
主要是说MirrorMaker使用的消费策略是 Range ,以后可能改成 “轮训策略” ,我们可以手动指定“轮询策略”。

在Consuemr.properties中设置:

partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor

此时我们已经运行成功,直接去查看是否可以消费成功即可。
注意:同步前最后将目标集群的Topic创建好,否则会使用Broker默认配置。
使用一个脚本来做备份和恢复:
简单的脚本,用于备份和恢复kafka数据:

#!/bin/bash
function backup_topic() {
    local topic=$1
    local backup_dir=$2

    echo "Starting backup for topic: $topic"

    mkdir -p $backup_dir
    kafka-console-consumer.sh \
        --bootstrap-server localhost:9092 \
        --topic $topic \
        --from-beginning \
        > $backup_dir/$topic.txt

    echo "Backup completed for topic: $topic"
}
function restore_topic() {
    local topic=$1
    local backup_file=$2

    echo "Starting restore for topic: $topic"
    kafka-console-producer.sh \
        --broker-list localhost:9092 \
        --topic $topic \
        --new-producer \
        < $backup_file
    echo "Restore completed for topic: $topic"
}
backup_topic example-topic /tmp/backup
restore_topic example-topic /tmp/backup/example-topic.txt

上述代码中定义了两个函数 backup_topic 和 restore_topic,分别用于备份和恢复 Kafka主题数据。
在这个脚本中备份的主题是 example-topic,备份数据存储的目录是 /tmp/backup。
要恢复数据,请调用 restore_topic 函数,并通过参数指定要恢复的主题和备份文件的路径。在脚本的最后示例恢复了 example-topic 主题的备份数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CHM助手 >> 如何安装CHM助手

1 如何安装CHM助手 下载CHM助手.ezip&#xff0c;下载地址打开EverEdit&#xff0c;选择主菜单“扩展 -> 扩展管理 -> 从本地文件安装扩展”&#xff0c;在弹出的文件浏览窗口中选择插件安装包&#xff0c;如下图所示&#xff1a; &#x1f56e;说明&#xff1a;   …

vulnhub靶场【shuriken】之node

前言 靶机&#xff1a;shuriken-node&#xff0c;ip地址192.168.1.127 攻击&#xff1a;kali&#xff0c;ip地址192.168.1.16 主机发现 使用arp-scan -l或者netdiscover -r 192.168.1.1/24扫描 信息收集 使用nmap扫描端口 网站信息探测 访问8080端口网站&#xff0c;可以…

数据仓库工具箱—读书笔记02(Kimball维度建模技术概述04、使用一致性维度集成)

Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 第二章前言部分作者提到&#xff1a;技术的介绍应该通过涵盖各种行业的熟悉的用例展开&#xff08;赞同…

[实战]推流服务SRS安装

业务场景 在Web浏览器端展示摄像头的视频数据。 协议 物联代理推流协议&#xff1a;rtmp 浏览器器拉流协议&#xff1a;http-flv 推流方案 1、Nginx加nginx-http-flv-modules模块 2、采用SRS服务器 推流服务SRS网站&#xff1a;https://ossrs.io/lts/zh-cn/ 推流服务…

PH热榜 | 2024-12-25

1. Assistive24 标语&#xff1a;为残障人士提供的免费辅助技术 介绍&#xff1a;Assistive24 是一款免费的 Chrome 浏览器扩展程序&#xff0c;可以帮助患有注意力缺陷多动障碍 (ADHD)、阅读障碍 (dyslexia) 和低视力等障碍的用户更方便地浏览网页。它提供语音导航、自定义…

Java中三大构建工具的发展历程(Ant、Maven和Gradle)

&#x1f438; 背景 我们要写一个Java程序&#xff0c;一般的步骤是编译&#xff0c;测试&#xff0c;打包。 这个构建的过程&#xff0c;如果文件比较少&#xff0c;我们可以手动使用java, javac,jar命令去做这些事情。但当工程越来越大&#xff0c;文件越来越多&#xff0c…

自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统

在完成了HarmonyOS Camera API的开发之后&#xff0c;我开始关注更复杂的系统级功能。在浏览HarmonyOS Next文档时&#xff0c;我发现了一个非常有趣的领域&#xff1a;数字版权管理&#xff08;DRM&#xff09;。最新的DRM API 13提供了强大的工具&#xff0c;用于保护数字内容…

Unity中如何修改Sprite的渲染网格

首先打开SpriteEditor 选择Custom OutLine,点击Genrate 则在图片边缘会出现边缘线&#xff0c;调整白色小方块可以调整边缘 调整后&#xff0c;Sprite就会按照调整后的网格渲染了。 如何在UI中使用&#xff1f; 只要在UI的Image组件中选择Use Sprite Mesh 即可 结果&#xff1…

跟着 8.6k Star 的开源数据库,搞 RAG!

过去 9 年里&#xff0c;HelloGitHub 月刊累计收录了 3000 多个开源项目。然而&#xff0c;随着项目数量的增加&#xff0c;不少用户反馈&#xff1a;“搜索功能不好用&#xff0c;找不到想要的项目&#xff01;” 这让我意识到&#xff0c;仅仅收录项目是不够的&#xff0c;还…

Sashulin升级啦,开箱即用!

经过多年的不断投入&#xff0c;升级为了Sashulin基础软件系列&#xff0c;本系列包含&#xff1a; 1、Sashulin IDE 2025全域通用开发工具 通用型Java开发工具&#xff0c;并可以进行业务流可视化开发。 2、发布Sashulin Webserver 2025 将Html等网页文件发布成网站&#xf…

linux下搭建lamp环境(dvwa)

lamp简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1a; Linux&#xff0c;操作系统 Apache&#xff0c;网页服务器 MariaDB或MySQL&#xff0c;数据库管理系统或数据库服务器 PHP、Perl或Python&#xff0c;脚本语言 # ubuntu安装…

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 使用Ollama添加大模型

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 使用Ollama添加大模型 flyfish 当安装完ragflow之后&#xff0c;开始添加大模型 $ git clone https://github.com/infiniflow/ragflow.git $ cd ragflow $ docker compose -f docker/docker-compose.yml up -d浏览器打开http:…

NiChart 多模态神经影像(structural MRI,functional MRI,and diffusion MRI)处理和分析工具包安装

NiChart多模态神经影像部署 NiChart 本地安装Git clone 问题personal access token PAT 问题 NiChart 云端注册AWS验证问题 NiChart 是UPenn大学&#xff0c;Christos Davatzikos教授开发的一个多模态MRI影像&#xff0c;structural (sMRI), diffusion (dMRI)&#xff0c; and …

路由策略

控制层流量 --- 路由协议传递路由信息时产生的流量 数据层流量 --- 设备访问目标地址时产生的流量 所谓的路由策略----在控制层面转发流量的过程中&#xff0c;截取流量&#xff0c;之后修改流量再转发或不转发的技术&#xff0c;最终达到影响路由器路由表的生成&#xff0c…

深度学习实战之超分辨率算法(tensorflow)——ESPCN

espcn原理算法请参考上一篇论文&#xff0c;这里主要给实现。 数据集如下&#xff1a;尺寸相等即可 针对数据集&#xff0c;生成样本代码preeate_data.py import imageio from scipy import misc, ndimage import numpy as np import imghdr import shutil import os import…

Dockerfile的用法

Dockerfile的用法 示例 `Dockerfile`使用 `Dockerfile` 创建 Docker 镜像`Dockerfile` 指令详解其他常用指令总结Dockerfile 是一个文本文件,包含了用于创建 Docker 镜像的一系列指令。这些指令描述了镜像的基础、所安装的软件、文件的复制、环境变量的设置以及其他配置。下面…

【GO基础学习】gin框架路由详解

文章目录 gin框架路由详解&#xff08;1&#xff09;go mod tidy&#xff08;2&#xff09;r : gin.Default()&#xff08;3&#xff09;r.GET()路由注册 &#xff08;4&#xff09;r.Run()路由匹配 总结 gin框架路由详解 先创建一个项目&#xff0c;编写一个简单的demo&#…

直流无刷电机驱动原理1--简介和例程演示

基础知识 BLDC&#xff08;Brushless DC Motor&#xff0c;无刷直流电机&#xff09; 和 PMSM&#xff08;Permanent Magnet Synchronous Motor&#xff0c;永磁同步电机&#xff09; 都是基于永磁体技术的无刷电机&#xff0c;但它们在结构、控制方式和应用场景上存在一些区别…

qt5.12.11+msvc编译器编译qoci驱动

1.之前编译过minGW编译器编译qoci驱动,很顺利就完成了,文章地址:minGW编译qoci驱动详解,今天按照之前的步骤使用msvc编译器进行编译,直接就报错了: 查了些资料,发现两个编译器在编译时,pro文件中引用的库不一样,下面是msvc编译器引用的库,其中编译引用的库我这里安装…

【C++动态规划】1458. 两个子序列的最大点积|1823

本文涉及知识点 下载及打开打包代码的方法兼述单元测试 C动态规划 LeetCode1458. 两个子序列的最大点积 LeetCode3290 和此题几乎相同。 给你两个数组 nums1 和 nums2 。 请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。 数组的非空子序列是通过删除原数…