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