这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
相关:Kafka 目录里的脚本那么多,它们都是用来干什么的?
在 《Kafka 目录里的脚本那么多,它们都是用来干什么的?》这篇里,介绍了一些 Kafka 运维脚本,在 Kafka 的脚本目录中,还有一个 kafka-mirror-maker.sh
脚本,这篇与它有关。
在绝大多数生产场景下,Kafka 都是作为集群来使用的,在灾备、基于地理位置的低延迟服务等场景下,甚至会部署多个集群,在集群之间进行数据同步。当前,实现集群间数据拷贝的方案有很多,MirrorMaker 是 Kafka 社区提供的方案,最主要的功能就是实现集群到集群的数据拷贝。
下面简单介绍 MirrorMaker。
MirrorMaker 本质上是一个「消费者+生产者」的程序,它实现数据拷贝的方式,是作为消费者从源 Kafka 集群获取消息,然后又作为生产者把消息提交到目标 Kafka 集群。
如果不深入细节的话,它的原理看起来非常容易理解,下面看一下它的用法。
运行 MirrorMaker 主要是通过 Kafka 目录下的 bin/kafka-mirror-maker.sh
脚本完成的。运行脚本的时候,需要我们提供如下的参数:
consumer.config
:这个参数用来指定一个文件路径,作为 MirrorMaker 作为消费者的配置信息,其中最重要的配置是bootstrap.servers
也就是消费消息的源 Kafka 集群。除此之外,MirrorMaker 会在内部创建不止一个消费者实例,因此需要再指定一个group.id
。为了让 MirrorMaker 可以从头消费信息,再配置auto.offset.reset=earliest
。以上这些是最小必要的配置,其它的配置视情况而定。producer.config
:作用与consumer.config
类似,是 MirrorMaker 作为生产者的配置参数文件,在这个文件中,最少需要配置bootstrap.servers
即可。num.streams
:这个参数用来告诉 MirrorMaker,需要创建多少个消费者实例,在 MirrorMaker 中,多个消费者实例的创建是通过多线程来实现的。whitelist
:这里可以让我们提供一个正则表达式,只有名称匹配这个正则表达式的主题会被拷贝数据。这样,可以将不同主题的数据拷贝到不同的目标集群中。
结合这些参数,最终的命令类似一下内容:
1 | css复制代码$ bin/kafka-mirror-maker.sh --consumer.config path/to/consumer-config.properties --producer.config ./path/to/producer-config.properties --num.streams 7 --whitelist ".*" |
如果已经成功启动了源 Kafka 集群和目标 Kafka 集群,那么在需要启动 MirrorMaker 的机器上,运行这个命令即可。
有一点要注意的是,如果目标集群上还没有创建要拷贝数据的 Topic,那么,它会根据 Broker 端的参数重指定的分区数和副本数,这可能和源 Kafka 集群上的该主题的分区数和副本数不一致,或者不符合我们的预期,因此,推荐提前在目标集群上创建好主题。
本文转载自: 掘金