Я разработал наш продукт репликации (IDR от IBM), чтобы отвечать сценарию ios, как это, и проблемное пространство на самом деле гораздо более запутано, чем может показаться на первый взгляд. Я не могу дать вам все наши секреты, но, возможно, некоторые области, которые вы, вероятно, должны будете рассмотреть, если это ценно для вас.
Скорее всего, вам понадобится понятие согласованности транзакций. У вас должен быть способ гарантировать, что данные, которые вы применяете из Kafka обратно в исходную базу данных, транзакционно согласованы во всех таблицах в вашем наборе репликации.
То есть вы хотите убедиться, что если вы применяете данные из транзакции 33, которая перешла в topi c 1 (представляющую таблицу 1), вам также необходимо убедиться, что вы применили данные из транзакция 33, которая перешла в топи c 2 (представляющая таблицу 2). Вам также необходимо убедиться, что вы находитесь на границе транзакции, иначе у вас будет поврежденная база данных, поскольку частичные транзакции вряд ли будут приемлемы. Наконец, вам нужен относительный порядок, если в исходной базе данных имеется ссылочная целостность, что означает, что при применении данных из транзакции, записанной в нескольких темах, вам необходимо выяснить, какая из них предшествовала другой, если исходные таблицы имеют RI. Вот некоторые из основных, затем вы начинаете рассматривать крайние случаи и то, как рассматриваются дубликаты.
Я выступил с докладом о нашем решении и теории, стоящей за ним, на саммите кафки в Сан-Франциско в 2018 году. Если вам интересно, послушайте .....
https://www.confluent.io/kafka-summit-sf18/a-solution-for-leveraging-kafka-to-provide-end-to-end-acid-transactions/