Восстановить базу данных из Kafka

Я разрабатываю доказательство концепции системы, основанной на Kafka и имеющей базу данных.

Используя Debezium (распределенную платформу с открытым исходным кодом для сбора измененных данных из базы данных), я буду создавать события в кластере kafka, когда происходит изменение.

Имея некоторую дату хранения в Kafka, я хочу представить сценарий, при котором у меня происходит сбой в моей базе данных, и я хочу восстановить данные из кластера Kafka ..

Как лучше всего разработать такую ​​систему восстановления?

Я думаю о сопоставлении индексов базы данных и индексов Kafka ... когда проблема / потеря данных происходит в индексе базы данных, я восстанавливаю его из правильного индекса Kafka

Что вы думаете, ребята?


person Walidou    schedule 10.01.2020    source источник
comment
Взгляните на Confluent JDBC Sink Connector. Вы можете указать ему на вывод, произведенный Debezium, и он может записать эти данные обратно в базу данных.   -  person Ashhar Hasan    schedule 10.01.2020
comment
Похоже, вы на правильном пути, с какой проблемой вы столкнулись?   -  person OneCricketeer    schedule 10.01.2020


Ответы (1)


Я разработал наш продукт репликации (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