kafka-mirror-maker.sh脚本

一、MirrorMaker介绍
MirrorMaker是Kafka附带的一个用于在Kafka集群之间制作镜像数据的工具。该工具从源集群中消费并生产到目标群集。这种镜像的常见用例是在另一个数据中心提供副本。
其实现原理是通过从源集群中消费消息,然后将消息生产到目标集群中,也就是普通的生产和消费消息。
用户只需要在启动Kafka Mirror Maker时指定一些简单的消费端和生产端配置就可以实现准实时的数据同步。
二、kafka-mirror-maker.sh脚本参数
kafka-mirror-maker.sh脚本中有多个可配置的参数,如下表所示:
参数 释义
abort.on.send.failure 默认为true,决定生产者写入失败时的处理机制
consumer.config 用于指定消费者的配置文件,配置文件里有两个必填的参数:bootstrap.servers 和 group.id
consumer.rebalance.listener 指定再均衡监听器
help 打印帮助信息
message.handler 指定消息的处理器。这个处理器会在消费者消费到消息之后且在生产者发送消息之前被调用
message.handler.args 指定消息处理器的参数,同message.handler一起使用
num.streams 指定消费线程的数量
offset.commit.interval.ms 指定消费位移提交间隔
producer.config 用于指定生产者的配置文件,配置文件里唯一必填的参数是 bootstrap.servers
rebalance.listener.args 指定再均衡监听器的参数,同consumer.rebalance.listener一起使用
whitelist 指定需要复制的源集群中的主题。这个参数可以指定一个正则表达式,比如a|b表示复制源集群中主题a和主题b的数据。为了方便使用,这里也允许将“|”替换为“,”
三、kafka-mirror-maker.sh脚本使用
3.1、先决条件
首先目标集群的kafka服务端必须开启 auto.create.topics.enable=true ,以允许自动创建topic;或者对于需要进行镜像的topic都自己手动进行创建。自动创建的topic会根据服务端配置的num.partitions、default.replication.factor决定。
3.2、演示使用
演示从集群1中将主题test-perf的数据同步到集群2中,首先创建并配置两个配置文件,参考如下:
#consumer.properties的配置
bootstrap.servers=kafka1:9092
group.id=groupIdMirror
client.id=sourceMirror
partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAsignor

#producer.properties的配置
bootstrap.servers=kafka2:9092
client.id=sinkMirror

consumer.properties和producer.properties这两个配置文件中的配置对应消费者客户端和生产者客户端的配置。

下面启动Kafka Mirror Maker:
./kafka-mirror-maker.sh --consumer.config …/config/consumer.properties --producer.config …/config/producer.properties --whitelist ‘test-perf’ --num.streams 6
3.3、使用注意事项
kafka mirror maker中对于生产者写入失败时,会根据abort.on.send.failure的配置分两种处理方法;
abort.on.send.failure=true ,此时如果生产者经过多次重试依然无法完成消息写入,则会直接停止kafka mirror maker进程;
abort.on.send.failure=false ,此时如果生产者经过多次重试依然无法完成消息写入,则会直接跳过当前写入的批次数据,直接进行下一轮消息的写入;

源集群和目标集群是两个完全独立的实体,对每个主题而言,两个集群之间的分区数可能不同;就算分区数相同,那么经过消费再生产之后消息所规划到的分区号也有可能不同;就算分区数相同,消息所规划到的分区号也相同,那么消息所对应的offset也有可能不相同,例如,源集群中由于执行了某次日志清理操作,某个分区的logStartOffset值变为10,而目标集群中对应分区的logStartOffset还是0,那么从源集群中原封不动的复制到目标集群时,同一条消息的offset也会不相同。

你可能感兴趣的:(Kafka)