mirror maker2背景
通常情况下,我们都是使用一套kafka集群处理业务。但有些情况需要使用另一套kafka集群来进行数据同步和备份。在kafka早先版本的时候,kafka针对这种场景就有推出一个叫mirror maker的工具(mirror maker1,以下mm1即代表mirror maker1),用来同步两个kafka集群的数据。
最开始版本的mirror maker本质上就是一个消费者 + 生产者的程序。但它有诸多诸多不足,包括
目标集群的Topic使用默认配置创建,但通常需要手动repartition。
acl和配置修改的时候不会自动同步,给多集群管理带来一些困难
消息会被DefaultPartitioner打散到不同分区,即对一个topic ,目标集群的partition与源集群的partition不一致。
任何配置修改,都会使得集群变得不稳定。比如比较常见的增加topic到whitelist。
无法让源集群的producer或consumer直接使用目标集群的topic。
不保证exactly-once,可能出现重复数据到情况
mm1支持的数据备份模式较简单,比如无法支持active <-> active互备
rebalance会导致延迟
因为存在这些问题,mirror maker难以在生产环境中使用。所以kafka2.4版本,推出一个新的mirror maker2(以下mm2即代表mirror maker2)。mirror maker2基于kafka connect工具,解决了上面说的大部分问题。
今天主要介绍mirror maker2的设计,主要功能和部署。
设计和功能
整体设计
mirror maker2是基于kafka connect框架进行开发的,可以简单地将mirror maker2视作几个source connector和sink connector的组合。包括:
MirrorSourceConnector, MirrorSourceTask:用来进行同步数据的connector
MirrorCheckpointConnector, MirrorCheckpointTask:用来同步辅助信息的connector,这里的辅助信息主要是consumer的offset
MirrorHeartbeatConnector, MirrorHeartbeatTask:维持心跳的connector
不过虽然mirror maker2岁基于kafka connect框架,但它却做了一定的改造,可以单独部署一个mirror maker2集群,当然也可以部署在kafka connect单机或kafka connect集群环境上。这部分后面介绍部署的时候再介绍。
和mm1一样,在最简单的主从备份场景中,mm2建议部署在目标(target