当前位置: 首页 > 知识库问答 >
问题:

意外AWS RDS binlog删除后恢复Debezium MySQL连接器

郗浩言
2023-03-14

当Debezium在kafka连接中作为源运行时,如果在目标MySQL DB(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中的binlog时

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                                                                                                |
+----------------------------+-----+-------------+------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+

问题:

  • 为什么Debezium是空闲的?为什么它在002640文件之后没有从MySQL中读取文件?
    这没有被任何服务使用。所以在Debezium可以读取之前不可能有太多的写入发生。
  • 为什么Amazon MySQL RDS在没有任何活动发生时删除数据库日志文件?
    这是一个测试数据库,只有我在其中插入记录。所以这里没有发生外部应用程序活动。
  • 有没有办法恢复Debezium连接器,并从MySQL当前可用的时间日志开始处理记录?(如果我不介意那些未读记录丢失)。
    我尝试重新启动工作,删除和添加连接器,但总是以相同的错误结束。
    唯一适用于恢复事件的解决方案
    • 删除Kafka Connect的离线主题。
    • 删除

共有1个答案

夏侯昊明
2023-03-14

请看心跳。间隔msconfig属性-这应该可以防止在高流量环境中,Debezium监视低流量表时出现这种情况。在这种情况下,可能会刷新binlog,但当前binlog坐标不会记录在偏移主题中。

关于简历——你可以通过修改主题从这种情况中恢复过来。在这里,您需要为服务器上可用的插件和binlog坐标插入偏移记录。Kafka·基普(Kafka KIP)是一个可以帮助解决这个问题的工具。现在您需要手动执行此操作。

 类似资料:
  • 问题内容: 在我们的服务器中,指向的符号链接已被删除。现在,系统中的所有二进制文件都不起作用。为了解决这个问题,我尝试: 正如预期的那样,这给了我: 我也尝试过: 结果相同。进一步失败的尝试包括cp,mv,cat。 我通过ssh连接,并且我相信关闭该会话后将无法打开另一会话。有没有办法修复此系统(也许使用bash内置)? [ 编辑 ]我所做的: 复制文件并尝试使用: 并得到: 问题答案: 您可以简

  • 我正在将数据库从MySQL切换到Postgres SQL。在MySQL中有效的select查询在Postgres中也有效,但类似的delete查询却不能。 我有两个数据表,列出了某些备份文件的位置。现有数据(ed)和新数据(nd)。此语法将挑选出可能说明文件在现有数据表中的位置的现有数据,根据相等的文件名和路径对其进行匹配,但没有关于文件在新数据中的位置的信息: 我希望使用以下语法运行删除查询:

  • 输入数据如下inpu1为{col1:“val1”,col2:“val2”,col3:“val3”,.....}输入2为acctno^^email_id我正在执行左外部联接以联接此2数据集,并给出最后的输出为{col1:“val1”,col2:“val2”,col3:“val3”,col4:email_id}请查找下面我迄今为止所做的代码片段。 但是最终输出有重复的记录,这是不需要的。我想删除重复的

  • 问题内容: 这个问题已经在这里有了答案 : 如何在迭代时从列表中删除项目? (26个答案) 4年前关闭。 我是Python的初学者。我以前学过其他语言,例如C ++(入门)和JQuery。但是我发现python中的循环非常混乱。 好吧,我想取得一个简单的结果。该程序将循环浏览单词列表,然后将与列表中 前 两个字母匹配的单词与下一个单词删除: 上面的代码应该删除,并从列表中。但实际上,这引发了一个。

  • 我正在使用jsplumb,但是我无法删除两个只有一个div的id的div之间的连接。

  • 如何恢复连接?希望不完全重新安装我的postgres?? 非常感谢:)