Saltar a contenido

Valores de desplazamiento inicial personalizados

Un valor de offset de inicio representa un punto desde el cual comenzar la replicación, de manera similar al LSN de reanudación de PostgreSQL. Cuando el motor Debezium runner inicia, comenzará la replicación desde este valor de offset. Establecer este valor de offset a un valor anterior hará que el motor Debezium runner comience la replicación desde registros anteriores, posiblemente replicando registros de datos duplicados. Debemos ser extremadamente cautelosos al establecer valores de offset de inicio en Debezium.

Registrar Valores de Offset Configurables

Durante la operación, se generarán nuevos offsets y se guardarán en disco por el motor Debezium runner. El último offset guardado puede recuperarse desde el comando de utilidad synchdb_state_view():

postgres=# select * from synchdb_state_view;
 id | connector | conninfo_name  |  pid   |  state  |   err    |                                          last_dbz_offset
----+-----------+----------------+--------+---------+----------+---------------------------------------------------------------------------------------------------
  0 | mysql     | mysqlconn      | 461696 | syncing | no error | {"ts_sec":1725644339,"file":"mysql-bin.000004","pos":138466,"row":1,"server_id":223344,"event":2}
  1 | sqlserver | sqlserverconn  | 461739 | syncing | no error | {"event_serial_no":1,"commit_lsn":"00000100:00000c00:0003","change_lsn":"00000100:00000c00:0002"}
  3 | null      |                |     -1 | stopped | no error | no offset
  [... el resto de las filas ...]

Dependiendo del tipo de conector, este valor de offset difiere. Del ejemplo anterior, el último offset guardado del conector mysql es {"ts_sec":1725644339,"file":"mysql-bin.000004","pos":138466,"row":1,"server_id":223344,"event":2} y el último offset guardado de sqlserver es {"event_serial_no":1,"commit_lsn":"00000100:00000c00:0003","change_lsn":"00000100:00000c00:0002"}.

Debemos guardar estos valores regularmente, para que en caso de que tengamos un problema, conozcamos la ubicación del offset en el pasado que se puede establecer para reanudar la operación de replicación.

Pausar el Conector

Un conector debe estar en estado paused antes de que se pueda establecer un nuevo valor de offset.

Use la función SQL synchdb_pause_engine() para pausar un conector en ejecución. Esto detendrá el motor Debezium runner de replicar desde la base de datos heterogénea. Cuando está pausado, es posible alterar el valor de offset del conector Debezium para replicar desde un punto específico en el pasado usando la rutina SQL synchdb_set_offset(). Toma conninfo_name como su argumento, que se puede encontrar en la salida de la vista synchdb_get_state().

Por ejemplo:

SELECT synchdb_pause_engine('mysqlconn');

Establecer el nuevo Offset

Use la función SQL synchdb_set_offset() para cambiar el offset de inicio de un trabajador del conector. Esto solo se puede hacer cuando el conector está en estado paused. La función toma 2 parámetros, conninfo_name y una cadena de offset válida, ambos se pueden encontrar en la salida de la vista synchdb_get_state().

Por ejemplo:

SELECT synchdb_set_offset('mysqlconn', '{"ts_sec":1725644339,"file":"mysql-bin.000004","pos":138466,"row":1,"server_id":223344,"event":2}');

Reanudar el Conector

Use la función SQL synchdb_resume_engine() para reanudar la operación de Debezium desde un estado pausado. Esta función toma connector name como su único parámetro, que se puede encontrar en la salida de la vista synchdb_get_state(). El motor Debezium runner reanudado comenzará la replicación desde el valor de offset recién establecido.

Por ejemplo:

SELECT synchdb_resume_engine('mysqlconn');