Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >进击消息中间件系列(十六):Kafka 数据备份与恢复

进击消息中间件系列(十六):Kafka 数据备份与恢复

作者头像
民工哥
发布于 2023-08-22 06:22:08
发布于 2023-08-22 06:22:08
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

kafka的备份策略

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

Kafka 数据备份

Kafka的数据备份包括两种类型:全量备份和增量备份。

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

下面分别介绍两种备份方式:

全量备份
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定备份的主题
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 工具将主题 BACKUP_DIR 目录下的

增量备份

增量备份需要借助第三方工具,例如 Kafka 的 MirrorMaker 等实现 。

下面是 MirrorMaker 的用法示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定源和目的地址
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 数据恢复

全量恢复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定恢复的主题
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

上述代码将数据恢复到 RESTORE_TOPIC 主题中。

注意:该脚本也是同步操作,恢复时间较长时建议使用异步操作。

增量恢复

增量恢复需要使用 MirrorMaker 来实现,下面是 MirrorMaker 的用法示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建MirrorMaker 配置文件
cat > /tmp/mirror-maker.properties <<EOF
consumer.bootstrap.servers=backup-host:9092
producer.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

上述代码中创建一个 MirrorMaker 配置文件将备份端的数据同步到目标端 $RESTORE_TOPIC 主题中。

脚本编写(备份和恢复)

下面是一个简单的脚本,用于备份和恢复 Kafka 数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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_topicrestore_topic,分别用于备份和恢复 Kafka 主题数据。在这个脚本中备份的主题是 example-topic,备份数据存储的目录是 /tmp/backup

Kafka 跨集群备份

  • 备份 : 把数据在单个集群下不同节点之间的拷贝
  • 镜像 (Mirroring) : 把数据在集群间的拷贝

MirrorMaker 工具 : 实现消息或数据从一个集群到另一个集群的拷贝,

MirrorMaker : 消费者 + 生产者的程序,

  • 消费者 : 从源集群(Source Cluster)消费数据
  • 生产者 : 向目标集群(Target Cluster)发送消息
整个镜像流程
多套集群镜像
运行 MirrorMaker
  • consumer.config : 指定 MirrorMaker 中消费者的配置文件地址 (bootstrap.servers) : 该 MirrorMaker 从哪个 Kafka 集群读取消息。因为 MirrorMaker 有可能在内部创建多个消费者实例并使用消费者组机制,设置 group.id 。配置 auto.offset.reset=earliest
  • producer.config : 指定 MirrorMaker 内部生产者组件的配置文件地址。bootstrap.servers : 配置拷贝的消息要发送到的目标集群。
  • num.streams : 创建多少个 KafkaConsumer 实例。
  • whitelist : 接收一个正则表达式。所有匹配该正则表达式的主题都会被自动地执行镜像。.* : 同步源集群上的所有主题。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-mirror-maker.sh \
--consumer.config ./config/consumer.properties \
--producer.config ./config/producer.properties \
--num.streams 8 --whitelist ".*"
启动 MirrorMaker

consumer.properties:

  • 用轮询策略,手动增加 partition.assignment.strategy
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bootstrap.servers=localhost:9092
group.id=mirrormaker
auto.offset.reset=earliest

producer.properties :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bootstrap.servers=localhost:9093

启动 MirrorMaker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-mirror-maker.sh \
--producer.config ../producer.config \
--consumer.config ../consumer.config \
--num.streams 4 \
--whitelist ".*"

验证拷贝成功

两位移值的差值 = 该分区当前的消息数

获取最早的位移

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list localhost:9093 \
--topic test --time -2

获取最新的位移

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list localhost:9093 \
--topic test --time -1

参考文章:https://blog.csdn.net/qq_44226094/article/ details/124163789 https://baixinan.blog.csdn.net/ article/details/130474601

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kafka MirrorMaker 跨集群同步工具详解
MirrorMaker是Kafka附带的一个用于在Kafka集群之间制作镜像数据的工具。该工具从源集群中消费并生产到目标群集。这种镜像的常见用例是在另一个数据中心提供副本。
迁云小助手
2018/10/25
14K1
Kafka实战宝典:如何跨机房传输数据
MirrorMaker 为Kafka 内置的跨集群/机房数据复制工具,二进制包解压后bin目录下有kafka-mirror-maker.sh,Mirror Maker启动后,包含了一组消费者,这些消费者属于同一个group,并从多个topic上读取数据,所有的topic均使用该group.id,每个MirrorMaker 进程仅有一个生产者,该生产者将数据发送给目标集群的多个topic;
数据社
2020/05/25
3.2K0
Kafka:MirrorMaker-V1搭建步骤
通过上一篇文章Kafka:MirrorMaker-V1我们已经知道了MirrorMaker-V1的基本概念,这篇文章我们来给Kafka-cluster搭建一个mirror。
cosmozhu
2020/06/15
1.2K0
Kafka运维命令大全
1、集群管理 前台启动broker bin/kafka-server-start.sh <path>/server.properties Ctrl + C 关闭 后台启动broker bin/kafka-server-start.sh -daemon <path>/server.properties 关闭broker bin/kafka-server-stop.sh 2、Topic管理 创建topic bin/kafka-topics.sh --create --zookeeper localhost:21
用户6070864
2019/09/17
1.2K0
Kafka运维命令大全
Kafka的基本概念与安装指南(单机+集群同步)
最近在搞spark streaming,很自然的前端对接的就是kafka。不过在kafka的使用中还是遇到一些问题,比如mirrormaker莫名其妙的丢失数据[原因稍后再说],消费数据offset错乱[之后介绍spark streaming的时候再解释] 总之,还是遇到了不少的问题。本篇就从下面几个方面介绍一下kafka: 基本介绍 安装与helloworld producer consumer mirror maker跨集群同步 控制台 基本介绍 Kafka是一款分布式的消息队列框架,它由三个重要
用户1154259
2018/01/17
9600
Kafka的基本概念与安装指南(单机+集群同步)
独家分享:Kafka集群间信息复制攻略来了!
自2006年以来,曾就职于SonyEricsson、SAP等多家公司,历任软件开发工程师,数据开发工程师,解决方案架构师
腾讯云中间件团队
2021/03/24
2.2K0
独家分享:Kafka集群间信息复制攻略来了!
进击消息中间件系列(三):Kafka 中 shell 命令使用
注:partitions指定topic分区数,replication-factor指定topic每个分区的副本数。
民工哥
2023/08/22
5340
进击消息中间件系列(三):Kafka 中 shell 命令使用
3.【kafka运维】Topic的生产和发送运维脚本(3)
4.2 生产有key消息 加上属性--property parse.key=true
石臻臻的杂货铺[同名公众号]
2021/08/03
5670
3.【kafka运维】Topic的生产和消费运维脚本
1.2 生产有key消息 加上属性--property parse.key=true
石臻臻的杂货铺[同名公众号]
2022/04/13
7450
teg kafka命令大全
有很多kafka安装者都会把kafka路径设置为/usr/local/kafka。无法得知kafka是什么版本,并且也没有像-version类似的命令。
葫芦
2019/10/16
6750
进击消息中间件系列(五):Kafka 生产者 Producer
在消息发生的过程中,设计到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列线程将消息发给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到Kafka Broker。
民工哥
2023/08/22
3610
进击消息中间件系列(五):Kafka 生产者 Producer
【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议收藏!!!)
本文所有命令,博主均全部操作验证过,保证准确性; 非复制粘贴拼凑文章; 如果想了解更多工具命令,可在评论区留下评论,博主会择期加上;
石臻臻的杂货铺[同名公众号]
2021/07/08
5.8K0
【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议收藏!!!)
Kafka ACL使用实战(单机版)
自0.9.0.0.版本引入Security之后,Kafka一直在完善security的功能。当前Kafka security主要包含3大功能:认证(authentication)、信道加密(encryption)和授权(authorization)。信道加密就是为client到broker、broker到broker以及工具脚本与broker之间的数据传输配置SSL;认证机制主要是指配置SASL,而授权是通过ACL接口命令来完成的。
py3study
2020/02/19
2K0
Kubernetes 部署kafka ACL(单机版)
在Kafka0.9版本之前,Kafka集群时没有安全机制的。Kafka Client应用可以通过连接Zookeeper地址,例如zk1:2181:zk2:2181,zk3:2181等。来获取存储在Zookeeper中的Kafka元数据信息。拿到Kafka Broker地址后,连接到Kafka集群,就可以操作集群上的所有主题了。由于没有权限控制,集群核心的业务主题时存在风险的。
py3study
2020/02/19
2.9K0
进击消息中间件系列(九):Kafka 各类 API 使用
interceptors拦截器过滤 —–> serializer序列化器进行序列化方便数据的传输 —–> partitions分区
民工哥
2023/08/22
3830
进击消息中间件系列(九):Kafka 各类 API 使用
kafka 认证和鉴权方式_kafka实际应用
在每个Kafka broker的config目录中添加一个类似下面的JAAS文件,我们称之为kafka_server_jaas.conf,这个文件我们用于启动Kafka服务端:
全栈程序员站长
2022/11/17
3.5K0
kafka 认证和鉴权方式_kafka实际应用
【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议保存)
本文所有命令,博主均全部操作验证过,保证准确性; 非复制粘贴拼凑文章; 如果想了解更多工具命令,可在评论区留下评论,博主会择期加上;
石臻臻的杂货铺[同名公众号]
2021/12/31
2.2K1
【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议保存)
进击消息中间件系列(二十):Kafka 生产调优最佳实践
服务器台数= 2 * (生产者峰值生产速率 * 副本 / 100) + 1,即 2 * (20m/s * 2 / 100) + 1= 3 台。建议 3 台服务器。
民工哥
2023/08/22
6090
进击消息中间件系列(二十):Kafka 生产调优最佳实践
微系列:5、在Centos系统中,搭建Kafka集群
1、需安装Java环境并配置环境变量 https://jdk.java.net/java-se-ri/11
老张的哲学
2023/01/09
9690
微系列:5、在Centos系统中,搭建Kafka集群
Kafka 服务器 PLAINTEXT 和 SASL_PLAINTEXT 配置 及 consumer/producer 脚本连接配置
更多安全配置,参见 https://kafka.apache.org/documentation/#security
rabbit_lei
2024/06/03
7950
推荐阅读
相关推荐
Kafka MirrorMaker 跨集群同步工具详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验