在意外删除aws rds binlogs后恢复debezium mysql连接器

nmpmafwu  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(945)

当debezium作为kafka connect中的源代码运行时,如果目标mysql db(amazonrds示例)上有一段时间没有更新,那么过了一段时间,我就会发现下面的错误。

  1. [2018-04-25 21:30:14,526] INFO Step 0: Get all known binlogs from MySQL (io.debezium.connector.mysql.MySqlConnectorTask:310)
  2. [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)
  3. [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)
  4. [2018-04-25 21:30:14,536] INFO Stopping MySQL connector task (io.debezium.connector.mysql.MySqlConnectorTask:239)
  5. [2018-04-25 21:30:14,536] INFO WorkerSourceTask{id=swiggy-connector-0} Committing offsets (org.apache.kafka.connect.runtime.WorkerSourceTask:328)
  6. [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)
  7. [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)
  8. 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.
  9. at io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:117)
  10. at io.debezium.connector.common.BaseSourceTask.start(BaseSourceTask.java:45)
  11. at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:164)
  12. at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
  13. at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
  14. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  15. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  16. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  17. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  18. at java.lang.Thread.run(Thread.java:748)

当我去数据库查看mysql中的binlog时

  1. mysql> show binary logs;
  2. +----------------------------+-----------+
  3. | Log_name | File_size |
  4. +----------------------------+-----------+
  5. | mysql-bin-changelog.002664 | 479 |
  6. | mysql-bin-changelog.002665 | 120 |
  7. +----------------------------+-----------+
  8. mysql> show binlog events;
  9. +----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+
  10. | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
  11. +----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+
  12. | mysql-bin-changelog.002664 | 4 | Format_desc | 1550192458 | 120 | Server ver: 5.6.39-log, Binlog ver: 4 |
  13. | mysql-bin-changelog.002664 | 120 | Query | 1550192458 | 201 | BEGIN |
  14. | 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 |
  15. | mysql-bin-changelog.002664 | 391 | Xid | 1550192458 | 422 | COMMIT /* xid=308462 */ |
  16. | mysql-bin-changelog.002664 | 422 | Rotate | 1550192458 | 479 | mysql-bin-changelog.002665;pos=4 |
  17. +----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+

问题:
为什么黛比津闲置?为什么在002640文件之后没有从mysql读取文件?
任何服务都没有使用它。因此,在debezium能够读取之前,不可能有过多的写操作发生。
为什么amazonmysql rds会在没有任何活动发生的情况下删除binlog文件?
这是一个测试数据库,只有我在其中插入记录。所以这里没有发生外部应用程序活动。
有没有办法恢复debezium连接器并开始处理mysql当前可用的时间日志中的记录(如果我不介意那些未读的记录丢失)。
我试图重新启动作业,删除和添加连接器,但我总是以相同的错误结束。
恢复事件的唯一解决方案
删除Kafka连接的offet主题。
再次删除并添加debezium连接器。
我想要一个不同的方法,因为在生产中,我们将有大量的连接器将使用相同的偏移主题。所以删除是不可能的。

k2arahey

k2arahey1#

请看 heartbeat.interval.ms config属性-这应该可以防止在高流量环境中debezium监视低流量表的情况。在这种情况下,可能会发生binlog被刷新,但当前binlog坐标没有记录在offsets主题中。
关于简历-你可以通过修改主题来从这种情况中恢复过来。在这里,您需要为服务器上可用的插件和binlog坐标插入一个偏移记录。有一个Kafkakip的工具,将有助于这一点。现在你需要手动操作。

相关问题