Я пытаюсь реплицировать кластер Kafka с помощью MirrorMaker 2.0. Я использую следующие свойства mm2.properties:
name = mirror-site1-site2
topics = .*
connector.class = org.apache.kafka.connect.mirror.MirrorSourceConnector
tasks.max = 1
plugin.path=/usr/share/java/kafka/plugin
clusters = site1, site2
# for demo, source and target clusters are the same
source.cluster.alias = site1
target.cluster.alias = site2
site1.sasl.mechanism=SCRAM-SHA-256
site1.security.protocol=SASL_PLAINTEXT
site1.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="<someuser>" \
password="<somepass>";
site2.sasl.mechanism=SCRAM-SHA-256
site2.security.protocol=SASL_PLAINTEXT
site2.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="<someuser>" \
password="<somepass>";
site1.bootstrap.servers = <IP1>:9093, <IP2>:9093, <IP3>:9093, <IP4>:9093
site2.bootstrap.servers = <IP5>:9093, <IP6>:9093, <IP7>:9093, <IP8>:9093
site1->site2.enabled = true
site1->site2.topics = topic1
# use ByteArrayConverter to ensure that records are not re-encoded
key.converter = org.apache.kafka.connect.converters.ByteArrayConverter
value.converter = org.apache.kafka.connect.converters.ByteArrayConverter
Итак, проблема в том, что mm2 всегда копирует сообщения x3:
# Manual message production:
kafkacat -P -b <IP1>:9093,<IP2>:9093,<IP3>:9093,<IP4>:9093 -t "topic1"
# Result in the source topic (site1 cluster):
% Reached end of topic topic1 [2] at offset 405
Message1
% Reached end of topic topic1 [2] at offset 406
Message2
% Reached end of topic topic1 [6] at offset 408
Message3
% Reached end of topic topic1 [2] at offset 407
kafkacat -P -b <IP5>:9093,<IP6>:9093,<IP7>:9093,<IP8>:9093 -t "site1.topic1"
# Result in the target topic (site2 cluster):
% Reached end of topic site1.titi [2] at offset 1216
Message1
Message1
Message1
% Reached end of topic site1.titi [2] at offset 1219
Message2
Message2
Message2
% Reached end of topic site1.titi [6] at offset 1229
Message3
Message3
Message3
Я пробовал использовать Kafka из конфлюентного пакета и kafka_2.13-2.4.0 непосредственно из Apache, оба с Debian 10.1.
Сначала я поддержал такое поведение с помощью confluent 5.4, подумав, что это может быть ошибка в их пакете, поскольку у них есть репликатор и на самом деле они не должны заботиться о мм2, но я воспроизвел точно такую же проблему с kafka_2.13-2.4.0 непосредственно из Apache без каких-либо изменение.
Я знаю, что mm2 еще не идемпотент и не могу гарантировать однократную доставку. В моих тестах (я пробовал много чего, включая настройку производителя или более крупный пакет из тысяч сообщений). Во всех этих тестах мм2 всегда X3 дублирует все сообщения.
Я что-то пропустил, кто-то поощрял то же самое? В качестве примечания к сайту с устаревшим mm1 с теми же пакетами у меня нет этой проблемы.
Ценю любую помощь ... Спасибо!
Даже если журнал изменений не дал мне уверенности в улучшении, я снова попытался запустить mm2, на этот раз с kafka 2.4.1. => Никаких изменений в этих странных дублированиях.
Я установил его на новый сервер, чтобы убедиться, что странное поведение, с которым я столкнулся, не связано с сервером.
Нужны ли мне особые права при использовании ACL? Я поставил "все", думая, что это не может быть более допустимым ... Даже если мм2 не является идемпотентным, да, я попробую правильно, связанное с этим.
Больше всего меня удивляет то, что я не могу найти ничего, что сообщало бы о такой проблеме, наверняка я должен сделать что-то не так, но в чем это вопрос ...