当前位置: 首页 > news >正文

kafka mirror maker之实现两个kafka集群之间的数据同步

1 背景

现在因为消费方方和producer方位于不同的数据中心,所以公司使用了etyer数据集成平台作为中间媒介完成投送,类似mirror maker吧

2 介绍一下Kafka MirrorMaker

Kafka MirrorMaker 是 Apache Kafka 提供的一个用于在不同 Kafka 集群之间复制数据的工具。它的主要用途是在多个数据中心、地理位置或集群之间实现数据同步和冗余,以提升数据的高可用性和容灾能力。以下是关于 Kafka MirrorMaker 的详细介绍。

基本工作原理

Kafka MirrorMaker 的工作原理相对简单,包括三个主要步骤:

  1. 消费数据:MirrorMaker 从源 Kafka 集群中消费数据。
  2. 传输数据:通过内部传输机制将数据从源集群传输到目标集群。
  3. 生产数据:MirrorMaker 将消费到的数据写入目标 Kafka 集群。

架构与配置

MirrorMaker 实际上包含了 Kafka 消费者和生产者的逻辑,因此它能够从一个 Kafka 集群消费消息,并将这些消息发送到另一个 Kafka 集群。以下是配置一个简单的 MirrorMaker 实例的步骤:

步骤 1: 配置消费者

需要指定消费的源 Kafka 主题和相关的消费者属性。

# consumer.properties
bootstrap.servers=source.kafka.broker:9092
group.id=mirrormaker-group
exclude.internal.topics=true
# 其他可能需要的属性
步骤 2: 配置生产者

需要指定目标 Kafka 集群和相关的生产者属性。

# producer.properties
bootstrap.servers=target.kafka.broker:9092
acks=all
retries=3
# 其他可能需要的属性
步骤 3: 启动 MirrorMaker

使用 Kafka 自带的脚本启动 MirrorMaker 并指定消费和生产的配置文件,以及需要镜像的主题。

bin/kafka-mirror-maker.sh \--consumer.config consumer.properties \--producer.config producer.properties \--whitelist '.*'  # 或者指定特定主题,例如 'my-topic'

MirrorMaker 2.0

在 Apache Kafka 2.4.0 之后,Kafka 引入了 MirrorMaker 2.0(MM2),它提供了更先进的功能和配置选项。与传统的 MirrorMaker 相比,MirrorMaker 2.0 提供了如下增强:

  • 集群粒度的镜像:可以指定整个集群的镜像规则,而不仅仅是特定的主题。
  • 监控和管理:支持更强大的监控和管理功能,便于查看镜像状态和健康情况。
  • 自动故障转移:支持自动故障转移功能,当一个集群出现故障时,可以自动切换到另一个集群。
  • 双向同步:支持双向数据同步,实现数据在多个集群之间的完全冗余。
配置示例

MirrorMaker 2.0 的配置方式主要通过 mirrormaker.properties 文件进行配置:

clusters = A, BA.bootstrap.servers = source.kafka.broker:9092
B.bootstrap.servers = target.kafka.broker:9092# 定义 replication flow
A->B.enabled = true
A->B.topics = .*

启动命令也有所不同,需要通过 connect-mirror-maker.sh 脚本来启动:

bin/connect-mirror-maker.sh config/mirrormaker.properties

适用场景

  • 跨数据中心复制:可以在不同的数据中心之间进行数据复制,提升数据的高可用性。
  • 灾难恢复:在一个集群故障时可以快速切换到另一个集群。
  • 多活数据中心:支持多个数据中心之间的数据复制和同步,实现数据的分布式管理。

总结

Kafka MirrorMaker 是一个非常有用的工具,用于在不同 Kafka 集群之间进行数据复制和同步。无论是简单的集群间数据传输,还是复杂的多数据中心部署,MirrorMaker 都能提供可靠的解决方案。特别是 MirrorMaker 2.0 的引入,使得数据复制变得更加灵活和强大,满足了现代企业的多种需求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • freeRTOS 任务的创建、挂起、恢复
  • 使用PyTorch进行图像风格迁移:基于VGG19实现
  • 多目标优化算法求解LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集,MATLAB代码
  • Windows和Mac命令窗快速打开文件夹
  • vue 项目自适应 配置 px转rem 的插件postcss-pxtorem
  • 数据中台建设(六)—— 数据开发-提取数据价值
  • Java实现建造者模式和源码中的应用
  • 大棚分割数据集,40765对影像,16.9g数据量,0.8米高分二,纯手工标注(arcgis标注)的大规模农业大棚分割数据集。
  • 使用Flux以文生图
  • 【QT】常用类
  • php AEAD_AES_256_GCM算法 解密
  • 38. 如何在Spring Boot项目中集成MyBatis-Plus?
  • 读构建可扩展分布式系统:方法与实践04应用服务
  • 低功耗蓝牙模块在健身器材中的应用,让健身体验更智能
  • 【GoMate框架案例】讯飞大模型RAG智能问答挑战赛top10 Baseline
  • 《剑指offer》分解让复杂问题更简单
  • 10个确保微服务与容器安全的最佳实践
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 77. Combinations
  • Angular6错误 Service: No provider for Renderer2
  • C++11: atomic 头文件
  • Debian下无root权限使用Python访问Oracle
  • Javascript 原型链
  • learning koa2.x
  • LintCode 31. partitionArray 数组划分
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • oschina
  • PAT A1092
  • react-native 安卓真机环境搭建
  • Redis的resp协议
  • tensorflow学习笔记3——MNIST应用篇
  • 不上全站https的网站你们就等着被恶心死吧
  • 程序员该如何有效的找工作?
  • 前端自动化解决方案
  • 让你的分享飞起来——极光推出社会化分享组件
  • 微信支付JSAPI,实测!终极方案
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 正则表达式小结
  • 自制字幕遮挡器
  • 我们雇佣了一只大猴子...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #Z2294. 打印树的直径
  • #大学#套接字
  • $(selector).each()和$.each()的区别
  • $forceUpdate()函数
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)SpringCloud 整合Python
  • (2)MFC+openGL单文档框架glFrame
  • (C语言)逆序输出字符串
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (java)关于Thread的挂起和恢复
  • (第61天)多租户架构(CDB/PDB)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践