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数据。
不进行数据迁移实现业务上的无缝切换
需要业务系统配合,通过切换,来实现业务系统的无缝衔接。
源系统的生产者不再生产数据,且消费者消费完所有的数据,然后直接把源系统的生产者和消费者都切换到目标集群。实现业务上的连续性。
这里有个切换过程,可参考下图进行切换。