Hello,
I'm trying to work with MirrorMaker 2 and have been having some troubles with
the configuration and my end result. As I understand, it seems there's updated
documentation coming in the next Kafka release?
I've been tasked with examining MM2 as a solution to an Active->Stand-by two
cluster configuration. We would like to have our active cluster constantly
replicating to a disaster recovery cluster so that we can quickly fail-over if
something horrible happens to the active cluster. I'm aware there's other,
potentially easier, ways to solve this problem but this is what I'm tasked with
trying.
The first trouble I ran into was the difference in configuration between using
the Connect JSON API and trying to run in dedicated stand-alone mode. Perhaps
this is better documented elsewhere but it was quite confusing for me, I
ultimately ended with something resembling this:
{
"name": "efw-mirrormaker-source-nonprod-target-dr-1",
"connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
"tasks.max": 1,
"topics": "mm2\\.efw.*",
"errors.log.enable": true,
"errors.log.include.messages": true,
"key.converter": "org.apache.kafka.connect.converters.ByteArrayConverter",
"value.converter": "org.apache.kafka.connect.converters.ByteArrayConverter",
"clusters": "mm2.source.nonprod, dr",
"source.cluster.alias": "mm2.source.nonprod",
"target.cluster.alias": "dr",
"source.cluster.bootstrap.servers": "kafka-bootstrap:9092",
"target.cluster.bootstrap.servers": "kafka-boostrap-dr:9092",
"source.admin.client.id": "efwmm2sourceadmin",
"source.cluster.security.protocol": "SSL",
"target.admin.client.id": "efwmm2targetadmin"
}
Which successfully ran but has some key differences to the following properties
file I used to configure standalone mode:
name = efw-mirrormaker-source-nonprod-target-dr-2
tasks.max = 1
emit.heartbeats.enabled = false
sync.topics.configs.enabled = true
sync.topic.acls.enabled = true
errors.log.enable = true
errors.log.include.messages = true
key.converter = org.apache.kafka.connect.converters.ByteArrayConverter
value.converter = org.apache.kafka.connect.converters.ByteArrayConverter
clusters = mm2.source.nonprod, dr
mm2.source.nonprod.bootstrap.servers = kafka-bootstrap:9092
dr.bootstrap.servers = kafka-dr-bootstrap:9092
mm2.source.nonprod.client.id = efw-mm2-source-nonprod
dr.client.id = efw-mm2-dr
mm2.source.nonprod.security.protocol = SSL
mm2.source.nonprod.cluster.security.protocol = SSL
mm2.source.nonprod->dr.enabled = true
mm2.source.nonprod->dr.emit.heartbeats.enabled = false
mm2.source.nonprod->dr.emit.checkpoints.enabled = true
mm2.source.nonprod->dr.sync.topics.configs.enabled = true
mm2.source.nonprod->dr.sync.topics.acls.enabled = true
mm2.source.nonprod->dr.topics = mm2\\.efw.*
mm2.source.nonprod.group.id = efw-mm2-group1
Which leads me to the bulk of my questions:
First, does anybody have the differences in configuration well documented
anywhere? For instance, the "A->B" properties don't seem to be functional at
all on the JSON API. Additionally, configuring the admin client in JSON
requires "source.cluster.{config property}" whereas in the properties file it's
"{your source alias}.{config property}".
Secondly, I seem unable to turn off Heartbeats when using the dedicated
stand-alone method. I've tried every combination of configuration settings I
can imagine and I was never able to get it to actually stop. I mainly wanted to
turn it off because it was flooding my logs due to ACL issues on the
"heartbeat" topic. I managed to solve that part, but I still can't disable
heartbeats, am I just misconfiguring? Has anybody else had this issue?
Thirdly, and lastly, I've managed to get MirrorMaker 2 running and mirroring
data using the dedicated standalone method, but I'm receiving 3 copies of each
message on my mirrored topics (the same issue mentioned in this SO post:
https://stackoverflow.com/questions/60005462/kafka-mirrormaker-2-0-duplicate-each-messages).
For instance, if I have the message "Foo" in my active cluster, in the DR
cluster I receive 3 separate messages "Foo" "Foo" "Foo" in the same topic. This
seems independent of partition, replication factors, how many brokers are
running, if I'm running locally (in cluster) or remotely, and I'm quite
confused as to why. Does anybody have any guidance here?
Thanks for taking a moment to read this, I'm hoping I'm not alone in these
issues and I can help shine some light for others.