Возобновить коннектор Debezium MySQL после неожиданного удаления журналов AWS RDS - PullRequest
0 голосов
/ 25 апреля 2018

Когда 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                                                                                                |
+----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+

Вопрос:

  1. Почему Дебезий простаивает ?Почему он не прочитал файлы из MySQL после файла 002640?Это не было использовано ни одной службой.Таким образом, не могло быть сценария, когда слишком много записей происходило до того, как Debezium мог прочитать его.
  2. Почему Amazon MySQL RDS удалял файлы binlog, когда не было активности?Это тестовая база данных, и только я вставляю записи в нее.Таким образом, здесь не было никакой активности внешних приложений.
  3. Есть ли способ Возобновить Дебезиум Соединитель и начать обработку записей из журнала времени, доступных в настоящее время на MySQL?(Если я в порядке с потерянными непрочитанными записями).Я попытался перезапустить работу, удалив и добавив соединитель, но у меня всегда возникает одна и та же ошибка.Единственное решение, которое сработало для возобновления события
    • Удалите автономный раздел Kafka Connect.
    • Удалите и снова добавьте разъем дебезиума.Я хотел другой подход, так как на производстве у нас будет много разъемов, которые будут использовать одну и ту же тему смещения.Таким образом, удаление будет невозможно.

1 Ответ

0 голосов
/ 26 апреля 2018

, пожалуйста, посмотрите heartbeat.interval.ms свойство config - это должно предотвратить ситуации, когда у вас есть таблица с низким трафиком, отслеживаемая Debezium в среде с высоким трафиком.В таком случае может случиться так, что binlog сбрасывается, но текущие координаты binlog не записываются в теме смещений.

Что касается резюме - вы можете исправить ситуацию, изменив тему смещений.здесь вам нужно будет вставить запись смещения для плагина и координат бинлога, которые доступны на сервере.Существует Kafka KIP для инструмента, который поможет с этим.Теперь вам нужно сделать это вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...