#mysql #apache-kafka #apache-kafka-streams #debezium
#mysql #apache-kafka #apache-kafka-streams #debezium
Вопрос:
Цель:
Необходимо добавить новую таблицу в существующий соединитель Debezium MySQL версии 1.1.1.Final. Данные из таблицы должны быть заполнены в теме после перезапуска соединителя с обновленными конфигурациями (новые таблицы в таблице.белый список).
Проблема:
Не существует четкой стратегии добавления новой таблицы (таблиц), которая будет добавлена в Kafka с ее данными после того, как был сделан первоначальный снимок (предыдущая версия соединителя работает). Мы ищем что-то похожее на snapshot.select.statement.overrides только для рабочего соединителя. snapshot.select.statement.overrides не работает, когда снимок уже создан и соединитель перезапущен с новыми таблицами.
Возможное решение:
Создайте и запустите новый соединитель для таблиц, которые должны быть инициализированы данными (snapshot.mode=initial). Недостаток: каждый выпуск может включать новый соединитель.
или
- Создать соединитель миграции (v2) для таблиц (с конфигурациями snapshot.mode=initial и new database.history.kafka.topic)
- Удалить соединитель v2 после завершения моментальной съемки
- Удалить database.history.kafka.topic для предыдущего соединителя (v1)
- Обновите соединитель (v1) с таблицами из соединителя (v2) — поместите их в таблицу.белый список
- Измените snapshot.mode на schema_only_recovery и запустите соединитель (v1)
Вопрос:
Какой способ является официальным? Может быть, я что-то упустил, и есть более простой способ, чем второй?
UPD: согласно комментарию @Matar и некоторому расследованию, похоже, нет необходимости удалять database.history.kafka.topic, потому что в конфигурации по умолчанию он все равно собирает весь DDL из БД.
Комментарии:
1. Я работаю над чем-то похожим на вашу задачу (MSSQL). Я пошел с решением (2). Мне просто интересно, зачем вам создавать новую database.history.kafka.topic? не могу ли я просто использовать этот из V1, поскольку все таблицы принадлежат одной и той же БД.
2. @matar Я думаю, вы правы. Нет необходимости заново создавать тему, особенно если вы используете свой соединитель, который прослушивает все изменения в БД. Мне интересно, что Debezium еще не поддерживает сценарий обновления спустя годы.
Ответ №1:
С последней версией Debezium Server вы можете добавить следующее значение конфигурации
debezium.snapshot.new.tables=parallel
В случае, если вы используете Debezium, вы можете попробовать это значение конфигурации
snapshot.new.tables=parallel
Примечание: сервер Debeziyum поддерживает Kinesis, Google Pub sub и Apache Pulsar. Я использую это, и его конфигурация немного отличается. Мне пришлось добавлять «debezium» перед каждым элементом
Как только эта конфигурация будет добавлена, любое добавление в tables.whitelist Для этих дополнительных таблиц Debezium создаст моментальные снимки.