Kafka数据迁移


发布于 2024-04-20 / 0 阅读 / 0 评论 /
kafka数据迁移方案

kafka数据包含元数据和消息数据,元数据保存在zookeeper或kraft中,消息数据保存在磁盘中。

kafka元数据迁移

kafka元数据包括:集群信息、topic信息、分区和副本信息、topic配置信息、acl权限策略信息等。除了与集群本身绑定的数据,都需要进行迁移。

基于kafka-topics.sh的手动迁移方案

最简单的就是通过Kafka官方提供的kafka-topics.sh工具进行topic的拷贝。

首先,在源集群,通过kafka-topics.sh获取topic的元数据信息。

然后,在目标集群,通过kafka-topics.sh创建相同配置的topic。

注意进行topic配置信息的同步。

方案优缺点

方案的优点是:简单,可控,支持自定义,元数据和消息数据的迁移工作完全分离。

方案的缺点是:需要开发工具对整个过程进行串联,不然操作会比较繁琐

Kafka MirrorMaker 1.0

通过Kafka官方提供的kafka-mirror-maker.sh工具来实现,这是kafka2.4.0之前的版本官方推荐的迁移工具。

方案优缺点

MirrorMaker1有以下不足之处:

(1)目标集群的Topic使用默认配置创建,但通常需要手动repartition

(2)acl和配置修改的时候不会自动同步,给多集群管理带来一些困难

(3)消息会被DefaultPartitioner打散到不同分区,即对一个topic,目标集群的partiton与源集群的partition不一致。

(4)任何配置修改,都会使得集群变得不稳定。比如常见的增加topic到whitelist

(5)无法让源集群的producer或consumer直接使用目标集群的topic

(6)不保证exectly-once,可能出现重复数据

(7)MirrorMaker1支持的数据备份模式较简单,比如无法支持active<->active互备

(8)rebalance会导致延迟

Kafka MirrorMaker 2.0

通过Kafka官方提供的connect-mirror-maker.sh工具来实现。

MirrorMaker2是在2019年12月随kafka2.4.0版本一起推出的(可参考https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0),主要是为了解决Kafka集群之间数据复制和数据同步而诞生的kafka官方数据复制工具。在实际生产中,常用来实现kafka数据的备份、迁移和灾备等目的。

MirrorMaker2作为数据复制工具,具有以下功能:

(1)复制topic数据以及配置信息

(2)复制consumer groups及其消费topic的offset信息

(3)复制ACLs

(4)自动检测新的topic以及partition

(5)提供MirrorMaker2的metrics

(6)高可用以及可水平扩展的架构

MirrorMaker2适用场景

MirrorMaker2适用以下场景:

(1)远程数据同步:通过MirrorMaker2,Kafka数据可以在不同地域的集群进行传输复制。

(2)灾备场景:通过MirrorMaker2,可以构建不同数据中心的主备两个集群容灾架构,MirrorMaker2实时同步两个集群的数据。当其中一个集群不可用时,可以将上面的应用程序切换到另一个集群,从而实现异地容灾功能。

(3)数据迁移场景:在业务上云、混合云、集群升级等场景,存在数据从旧集群迁移到新集群的需求。此时,我们可以使用MirrorMaker2实现新旧数据的迁移,保证业务的连续性。

(4)聚合数据中心场景:通过MirrorMaker2,可以将多个Kafka子集群的数据同步到一个中心kafka集群,实现数据的汇聚。

MirrorMaker2模式

MirrorMaker2任务执行方式有三种:

(1)Distributed Connect集群的connector方式:社区推荐方式,在已有的Connect集群中执行MirrorMaker2 connector任务的方式。

(2)Dedicated MirrorMaker集群方式:不需要使用Connect集群执行MirrorMaker2 connector任务,而是直接通过Driver程序管理MirrorMaker2的所有任务。

(3)Standalone Connect的worker方式:执行单个MirrorSourceConnector任务,适合在测试场景下使用。

方案优缺点

该方案优点:MirrorMaker2解决了MirrorMaker1的问题,可以同步元数据和消息数据;kafka官方支持;

该方案缺点:topic名称带有集群配置名,kafka3.1之后的版本才提供原名同步。

kafka消息数据迁移

kafka消息就是保存在磁盘中的segment数据。

不进行数据迁移实现业务上的无缝切换

需要业务系统配合,通过切换,来实现业务系统的无缝衔接。

源系统的生产者不再生产数据,且消费者消费完所有的数据,然后直接把源系统的生产者和消费者都切换到目标集群。实现业务上的连续性。

这里有个切换过程,可参考下图进行切换。