У меня есть сомнения относительно Специальных сигналов моментальных снимков в дебезиуме
Допустим, я создал таблицу сигналов в своей базе данных перед созданием соединителя CDC:
-- Creating the signal table
CREATE TABLE debezium_signal (id VARCHAR(42) PRIMARY KEY, type VARCHAR(32) NOT NULL, data VARCHAR(2048) NULL);
-- Starting a snapshot
INSERT INTO debezium_signal (id, type, data)
VALUES ('d139b9b7-7777-4547-917d-e1775ea61d41', 'execute-snapshot', '{"data-collections": ["servicedb.customers"]}')
Теперь, после создания и заполнения этой таблицы, я создаю соединитель CDC со следующей конфигурацией:
{
"name": "my_awesome_cdc_connector",
"database.dbname": "servicedb",
"table.include.list": "customers",
"topic.prefix": "servicedb",
"snapshot.mode": "schema_only",
"snapshot.locking.mode": "none",
"signal.enabled.channels": "source",
"signal.data.collection": "servicedb.debezium_signal",
"incremental.snapshot.allow.schema.changes": "true",
"incremental.snapshot.chunk.size": 1024,
"tombstones.on.delete": "true",
"database.ssl.mode": "preferred",
"poll.interval.ms": "1000",
"max.batch.size": "1000",
"output.data.format": "AVRO",
"tasks.max": "1",
"status": "RUNNING"
}
Мой вопрос:
Поскольку в моей таблице debezium_signal уже есть запись, когда коннектор CDC начнет работать, запустит ли он мой инкрементный снимок?
Или он будет учитывать только сигналы, отправленные после создания соединителя?
As I already have an entry in my debezium_signal table, When the CDC connector starts running, will it start my incremental snapshot?
Or will it only consider the signals sent after the connector creation?
CDC не будет запускаться для существующих данных, а только для данных, вставленных в таблицу после того, как вы создали конфигурацию CDC и запустили ее.
Но вы все равно можете повторно запустить CDC для старых данных, которые уже существовали в таблице, обновив столбец с тем же значением.
Бывший:-
UPDATE debezium_signal SET type = 'execute-snapshot' WHERE id = 'd139b9b7-7777-4547-917d-e1775ea61d41'
Это не приведет к каким-либо изменениям в существующих данных, но будет иметь запись WAL базы данных, которая будет использоваться CDC для повторного запуска.
Но я настоятельно рекомендую добавить столбец метки времени в таблицу, в которой настроен CDC, и переместить столбец данных в дочернюю таблицу, в которой есть столбец идентификатора и столбец данных, а идентификатор равен идентификатору в родительском элементе (debezium_signal). стол.
Мы видели в производстве проблему, возникающую из-за того, что некоторые события CDC не запускаются, когда частота обновления/вставки высока из-за больших данных, таких как ваш столбец данных.
Вы всегда можете запросить столбец данных из дочерней таблицы при запуске события CDC.
Эй, @shazin, большое спасибо за четкое объяснение. Что касается
snapshot.mode
, устанавливаете ли вы для него какое-то конкретное значение? Я используюschema_only
, потому что, когда коннектор CDC запускается, binlog не имеет полной истории изменений, поэтому я не хочу, чтобы произошел сбой, связанный с отсутствующей схемой, пока я не выполню свой специальный снимок. Имеет ли это смысл? Я следую подходу отсюда: debezium.io/documentation/reference/stable/connectors/… «Снимок схемы, за которым следует инкрементальный снимок»