Когда Debezium работает в качестве источника в kafka connect, и если какое-то время не происходит никаких обновлений в этой целевой базе данных MySQL (инстанс Amazon RDS), через некоторое время я оказываюсь ниже ошибки.
[2018-04-25 21:30:14,526] INFO Step 0: Get all known binlogs from MySQL (io.debezium.connector.mysql.MySqlConnectorTask:310)
[2018-04-25 21:30:14,536] INFO Connector requires binlog file 'mysql-bin-changelog.002640', but MySQL only has mysql-bin-changelog.002663, mysql-bin-changelog.002664, mysql-bin-changelog.002665 (io.debezium.connector.mysql.MySqlConnectorTask:323)
[2018-04-25 21:30:14,536] INFO MySQL has the binlog file 'mysql-bin-changelog.002640' required by the connector (io.debezium.connector.mysql.MySqlConnectorTask:325)
[2018-04-25 21:30:14,536] INFO Stopping MySQL connector task (io.debezium.connector.mysql.MySqlConnectorTask:239)
[2018-04-25 21:30:14,536] INFO WorkerSourceTask{id=swiggy-connector-0} Committing offsets (org.apache.kafka.connect.runtime.WorkerSourceTask:328)
[2018-04-25 21:30:14,536] INFO WorkerSourceTask{id=swiggy-connector-0} flushing 0 outstanding messages for offset commit (org.apache.kafka.connect.runtime.WorkerSourceTask:345)
[2018-04-25 21:30:14,536] ERROR WorkerSourceTask{id=swiggy-connector-0} Task threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask:172)
org.apache.kafka.connect.errors.ConnectException: The connector is trying to read binlog starting at binlog file 'mysql-bin-changelog.002640', pos=470, skipping 4 events plus 0 rows, but this is no longer available on the server. Reconfigure the connector to use a snapshot when needed.
at io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:117)
at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:45)
at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:164)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Когда я захожу в БД и проверяю журналы в MySQL
mysql> show binary logs;
+----------------------------+-----------+
| Log_name | File_size |
+----------------------------+-----------+
| mysql-bin-changelog.002664 | 479 |
| mysql-bin-changelog.002665 | 120 |
+----------------------------+-----------+
mysql> show binlog events;
+----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+
| mysql-bin-changelog.002664 | 4 | Format_desc | 1550192458 | 120 | Server ver: 5.6.39-log, Binlog ver: 4 |
| mysql-bin-changelog.002664 | 120 | Query | 1550192458 | 201 | BEGIN |
| mysql-bin-changelog.002664 | 201 | Query | 1550192458 | 391 | use `mysql`; INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1524671965007) ON DUPLICATE KEY UPDATE value = 1524671965007 |
| mysql-bin-changelog.002664 | 391 | Xid | 1550192458 | 422 | COMMIT /* xid=308462 */ |
| mysql-bin-changelog.002664 | 422 | Rotate | 1550192458 | 479 | mysql-bin-changelog.002665;pos=4 |
+----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+
Вопрос:
- Почему Дебезий простаивает ?Почему он не прочитал файлы из MySQL после файла 002640?Это не было использовано ни одной службой.Таким образом, не могло быть сценария, когда слишком много записей происходило до того, как Debezium мог прочитать его.
- Почему Amazon MySQL RDS удалял файлы binlog, когда не было активности?Это тестовая база данных, и только я вставляю записи в нее.Таким образом, здесь не было никакой активности внешних приложений.
- Есть ли способ Возобновить Дебезиум Соединитель и начать обработку записей из журнала времени, доступных в настоящее время на MySQL?(Если я в порядке с потерянными непрочитанными записями).Я попытался перезапустить работу, удалив и добавив соединитель, но у меня всегда возникает одна и та же ошибка.Единственное решение, которое сработало для возобновления события
- Удалите автономный раздел Kafka Connect.
- Удалите и снова добавьте разъем дебезиума.Я хотел другой подход, так как на производстве у нас будет много разъемов, которые будут использовать одну и ту же тему смещения.Таким образом, удаление будет невозможно.