前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进击消息中间件系列(十六):Kafka 数据备份与恢复

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

作者头像
民工哥
发布2023-08-22 14:22:08
1.9K0
发布2023-08-22 14:22:08
举报
文章被收录于专栏:民工哥技术之路

kafka的备份策略

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

Kafka 数据备份

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

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

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

全量备份
代码语言:javascript
复制
# 指定备份的主题
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_TOPIC 的数据备份到 BACKUP_DIR 目录下的

增量备份

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

下面是 MirrorMaker 的用法示例:

代码语言:javascript
复制
# 指定源和目的地址
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
复制
# 指定恢复的主题
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 主题中。

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

增量恢复

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

代码语言:javascript
复制
# 创建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
复制
#!/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
复制
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
复制
bootstrap.servers=localhost:9092
group.id=mirrormaker
auto.offset.reset=earliest

producer.properties :

代码语言:javascript
复制
bootstrap.servers=localhost:9093

启动 MirrorMaker

代码语言:javascript
复制
bin/kafka-mirror-maker.sh \
--producer.config ../producer.config \
--consumer.config ../consumer.config \
--num.streams 4 \
--whitelist ".*"

验证拷贝成功

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

获取最早的位移

代码语言:javascript
复制
bin/kafka-run-class.sh kafka.tools.GetOffsetShell \
--broker-list localhost:9093 \
--topic test --time -2

获取最新的位移

代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kafka的备份策略
  • Kafka 数据备份
    • 全量备份
    • Kafka 数据恢复
      • 全量恢复
        • 增量恢复
          • 运行 MirrorMaker
            • 启动 MirrorMaker
            • 验证拷贝成功
            相关产品与服务
            数据保险箱
            数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档