Kafka跨集群数据备份与同步:MirrorMaker运用

devtools/2025/3/18 17:49:43/

#作者:张桐瑞

文章目录

  • 前言
  • MirrorMaker是什么
  • 运行MirrorMaker
  • 各个参数的含义

前言

在大多数情况下,我们会部署一套Kafka集群来支撑业务需求。但在某些特定场景下,可能需要同时运行多个Kafka集群。比如,为了实现灾难恢复,你可以在不同机房分别部署独立的Kafka集群。如果一个机房发生故障,你可以快速切换流量到另一个正常运行的机房。另外,如果你希望为地理上较近的客户提供低延迟的消息服务,而你的主机房距离客户较远,可以在靠近客户的地区部署Kafka集群,让该集群为客户提供低延迟的服务。
要满足这些需求,除了部署多个Kafka集群外,还需要借助一些工具或框架来帮助实现数据在集群间的复制或镜像。需要注意的是,将单个集群内部不同节点之间的数据复制称为“备份”,而集群间的数据复制则称为“镜像”(Mirroring)。

Apache Kafka社区提供的MirrorMaker工具,能够帮助我们实现将消息或数据从一个Kafka集群复制到另一个集群的功能。通过使用MirrorMaker,我们可以轻松地实现跨集群的数据复制和镜像,支持多种场景,如灾难恢复、跨地域低延迟服务等。这个工具能够高效地确保不同Kafka集群间的数据一致性和可靠性,是实现集群间数据同步的重要工具之一。

MirrorMaker是什么

MirrorMaker 是 Apache Kafka 提供的一个工具,用于在不同 Kafka 集群之间复制数据。它支持将一个 Kafka 集群中的消息或数据流同步到另一个集群中,确保集群间的数据一致性和可靠性。MirrorMaker 主要用于以下几种场景:

灾难恢复:将数据从主集群复制到备用集群,如果主集群发生故障,可以快速切换到备用集群进行业务恢复。
跨地域数据同步:在不同地理位置的 Kafka 集群之间同步数据,以便为不同地区的用户提供低延迟的服务。
集群间迁移:在进行集群扩容或升级时,可以利用 MirrorMaker 在不同集群之间迁移数据,避免服务中断。

数据备份:将集群的数据复制到另一个集群作为备份,确保数据的冗余和安全性。
MirrorMaker 的工作原理是,它从源集群的一个或多个 topic 中消费消息,并将这些消息生产到目标集群中的相应 topic。通过这种方式,它能够实现跨集群的数据同步。

在使用时,可以选择使用 MirrorMaker 1(较为基础)或 MirrorMaker 2(功能更强大,支持更多特性,比如增量复制、配置更细粒度的同步等)。MirrorMaker 2 是基于 Kafka Connect 构建的,具有更高的可扩展性和容错性。
从本质上看,MirrorMaker 确实是一个消费者和生产者的结合体。消费者负责从源集群(Source Cluster)消费数据,而生产者则将这些数据发送到目标集群(Target Cluster)。整个镜像流程如下图所示:
在这里插入图片描述
MirrorMaker连接的源集群和目标集群,会实时同步消息。当然,你不要认为你只能使用一套MirrorMaker来连接上下游集群。事实上,很多用户会部署多套集群,用于实现不同的目的。

通过下面这张图,可以清晰明白通过MirrorMaker进行多集群间镜像。图中部署了三套集群:左边的源集群负责主要的业务处理;右方的目标集群可以用于执行数据分析;而右下方的目标集群则充当源集群的热备份。
在这里插入图片描述

运行MirrorMaker

Kafka默认提供了MirrorMaker命令行工具kafka-mirror-maker脚本,它的常见用法是指定生产者配置文件、消费者配置文件、线程数以及要执行数据镜像的主题正则表达式。比如下面的这个命令,就是一个典型的MirrorMaker执行命令。

# bin/kafka-mirror-maker.sh --consumer.config ./config/consumer.properties --producer.config ./config/producer.properties --num.streams 8 --whitelist ".*"

各个参数的含义

consumer.config:指定MirrorMaker中消费者的配置文件地址,最主要的配置项是bootstrap.servers,也就是该MirrorMaker从哪个Kafka集群读取消息。因为MirrorMaker有可能在内部创建多个消费者实例并使用消费者组机制,因此你还需要设置group.id参数。建议额外配置auto.offset.reset=earliest,否则,MirrorMaker只会拷贝那些在它启动之后到达源集群的消息。

producer.config:指定MirrorMaker内部生产者组件的配置文件地址。通常来说,Kafka Java Producer很友好,你不需要配置太多参数。唯一的例外依然是bootstrap.servers,你必须显式地指定这个参数,配置拷贝的消息要发送到的目标集群。

num.streams:MirrorMaker要创建多少个KafkaConsumer实例。使用的是多线程的方案,即在后台创建并启动多个线程,每个线程维护专属的消费者实例。在实际使用时,可以根据你的机器性能酌情设置多个线程。

whitelist:如命令所示,这个参数接收一个正则表达式。所有匹配该正则表达式的主题都会被自动地执行镜像。在这个命令中,指定 “.*”,表明要同步源集群上的所有主题。


http://www.ppmy.cn/devtools/168118.html

相关文章

代码随想录二刷|图论6

图论 基础知识 1 无向图 (1)度:一个顶点连n条边就度为n (2)权 加权无向图:有边长的无向图 (3)通道:两个顶点之间有一些边和点,并且没有重复的边 路&am…

Python 视频爬取教程

文章目录 前言基本原理环境准备Python安装选择Python开发环境安装必要库 示例 1:爬取简单直链视频示例 2:爬取基于 HTML5 的视频(以某简单视频网站为例) 前言 以下是一个较为完整的 Python 视频爬取教程,包含基本原理…

vue3vue-elementPlus-admin框架中form组件的upload写法

dialog中write组件代码 let ImageList reactive<UploadFile[]>([])const formSchema reactive<FormSchema[]>([{field: ImageFiles,label: 现场图片,component: Upload,colProps: { span: 24 },componentProps: {limit: 5,action: PATH_URL /upload,headers: {…

游戏引擎学习第161天

回顾并计划今天的工作 我们从头开始编写一款完整的游戏&#xff0c;完全不依赖游戏引擎和库。我们会从最基本的渲染代码开始&#xff0c;一直到高层的AI代码&#xff0c;涵盖其中的一切。 目前&#xff0c;我们正在做一些比较轻松有趣的事情&#xff0c;可以说是比较随意的内…

php开发转go的学习计划及课程资料信息

以下是为该课程体系整理的配套教材和教程资源清单,包含书籍、视频、官方文档和实战项目资源,帮助你系统化学习: Go语言学习教材推荐(PHP开发者适配版) 一、核心教材(按学习阶段分类) 1. 基础语法阶段(阶段一) 资源类型名称推荐理由链接/获取方式官方教程Go语言之旅交…

AI日报 - 2025年3月18日

AI日报 - 2025年3月18日 &#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | SOO微调技术减少语言模型欺骗行为10倍 创新对齐技术为更安全AI铺路 ▎&#x1f4bc; 商业动向 | Figure推出全球最高产量人形机器人生产线BotQ 年产1.2万台&#x…

简单以太网配置

display arp //查看路由器mac地址 交换机配置命令&#xff1a; system-view // 从用户视图进入系统视图 dis mac-address //查看mac地址表 路由器配置命令: system-view // 从用户视图进入系统视图 int GigabitEthernet 0/0/0 //进入G口 0/0/0 进入之后配置网关: ip addre…

十分钟学会Git

Git 和SVN 的区别&#xff1a; 架构模式&#xff1a; Git 是分布式版本控制系统&#xff0c;每个开发者的本地仓库都包含完整的历史记录&#xff0c;可以离线操作&#xff1b;而 SVN 是集中式版本控制系统&#xff0c;所有版本数据集中存放在中央服务器上&#xff0c;操作大多依…