Kafka MirrorMaker1集群间切换后切回数据集群多出了10000条数据?

江西老表 发表于: 2021-08-31   最后更新时间: 2021-08-31 17:42:29   999 游览

Kafka MirrorMaker1集群间切换后切回数据未同步

  • kafka版本 0.10.0.1
  • zookeeper版本 3.4.6

测试内容

AB两个集群,从A同步到B,从B同步到A,切回从A同步到B 使用mirrormaker做集群数据同步

步骤

A集群同步到B集群

1、配置

A集群配置
consumer.config
zookeeper.connect=127.0.0.1:2181
bootstrap.servers=192.168.10.13:9092,192.168.10.14:9092,192.168.10.15:9092 #A集群地址
group.id=mirrormaker
auto.offset.reset=earliest

producer.config
bootstrap.servers=192.168.10.16:9092,192.168.10.17:9092,192.168.10.18:9092 #B集群地址

2、启动命令

./bin/kafka-mirror-maker.sh --new.consumer --consumer.config config/consumer.config --num.streams 1 --producer.config config/producer.config --whitelist 'ABTestMsg'

3、A集群使用kafka-producer-perf-test脚本模拟发送10000条消息

4、验证B集群同步成功10000条

停掉A集群mirrormaker切换B同步A

1、配置

B集群配置
consumer.config
zookeeper.connect=127.0.0.1:2181
bootstrap.servers=192.168.10.16:9092,192.168.10.17:9092,192.168.10.18:9092 #B 集群地址
group.id=mirrormaker
auto.offset.reset=latest

producer.config
bootstrap.servers=192.168.10.13:9092,192.168.10.14:9092,192.168.10.15:9092 #A集群地址

2、启动命令

./bin/kafka-mirror-maker.sh --new.consumer --consumer.config config/consumer.config --num.streams 1 --producer.config config/producer.config --whitelist 'ABTestMsg'

3、B集群使用kafka-producer-perf-test脚本模拟发送10000条消息

4、验证A集群同步成功10000条 AB集群partition Latest offset 20000

停掉B切回A集群

1、停掉B集群

2、启动命令

./bin/kafka-mirror-maker.sh --new.consumer --consumer.config config/consumer.config --num.streams 1 --producer.config config/producer.config --whitelist 'ABTestMsg'

3、验证 A集群partition Latest offset 20000 B集群partition Latest offset 30000

问题

在切回A集群后,启动mirrormaker, B集群多出了10000条。

发表于 2021-08-31
添加评论

首先,镜像同步2个集群之间的offset完全是独立的,是不一样的,可查看镜像集群之间的数据下面的评论。

那我们来分析一下你的情况。

1、A->B,ok没问题,这个时候创建了group.id=mirrormaker,从此刻开始,A->B如果有新的未同步的消息,就知道了。

2、B->A,ok没问题,同时创建了group.id=mirrormaker,从此刻开始,B->A未同步的消息,就知道了,(因为是刚创建的group.id=mirrormaker,所以之前A发给B的消息不会在重新发给A)。

3、当你启动A的时候,A因为记录了group.id=mirrormaker,发现新的10000条消息(重点,kafka认为这10000个消息是新的,不管来自哪里),这个时候A将这新收到的10000条消息,发送给B。

江西老表 -> 半兽人 3年前

A为什么还要记录group.id=mirrormaker呢?发现新的10000条消息是我B->A的吧 起A的时候然后它认为新增了10000条然后又同步过去了是这样么? 我该如何解决呢

半兽人 -> 江西老表 3年前

group.id=mirrormaker是消费者组,这kafka的基础,MirrorMaker的底层功能,也是作为消费者组,将数据传输到B的。

你每次启动它的时候,换个消费者组名字就不会发了。

我想不到其他的办法了(因为本身同一时刻,只有一个kafka集群提供服务)。

你的答案

查看kafka相关的其他问题或提一个您自己的问题