Я хотел бы использовать Debezium для отслеживания измененных данных (CDC) в базе данных PostgreSQL. Прямо сейчас я не совсем понимаю, как работать с транзакциями в Debezium.
Рассмотрим следующий пример - у меня есть 2 таблицы в исходной базе данных PostgreSQL. Я вставляю данные в обе эти таблицы в рамках одной транзакции базы данных. Другими словами, мне нужно выполнить два отдельных оператора INSERT
. Если я правильно понимаю, в случае Debezium CDC это приведет к двум отдельным сообщениям в двух отдельных темах Kafka (или потоках AWS Kinesis). Каждое из этих сообщений будет использовано собственным потребителем и вставлено в целевую базу данных отдельной транзакцией. В случае сбоя одной из транзакций другая может быть успешной, и я столкнусь с состоянием несогласованности данных в целевой базе данных.
Есть ли в Дебезиуме какие-то стандартные механизмы, позволяющие справиться с такой ситуацией? Или, например, чтобы этого избежать, я должен использовать Kafka Streams API и объединить эти две темы в одну (на transactionId) перед обновлением целевой базы данных?