apache-kafka-connect - Debezium MySQL (MariaDB) 连接器:如何从以前的 bin-log 文件位置恢复
问题描述
我正在使用Debezium-connector-mysql-0.7.5-plugin为 CDC 连接 MariaDB v10.0.32。CDC 记录保存在 HDFS 中以供进一步处理。一切都很完美,直到出现以下情况:
- 停止连接
- 完全停止卡夫卡
- 停止 MariaDB 服务器
从CDC Records可以看出,最新处理的bin log坐标如下:
File : mysql-bin.000008
Position: 2155
由于上述行为,我面临以下后果:
MariaDB 在重启期间轮换它的 bin 日志,当前状态如下
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000009 | 326 | | | +------------------+----------+--------------+------------------+
- 我之前注册的 Debezium 连接器在新启动的 Kafka 中不再可用
在这种情况下,如果我从头开始,连接器将通过以下操作获取初始快照:
- 放置锁然后从所有表中读取数据
- 完成后,它开始读取最新的 bin 日志文件,即 mysql-bin.000009
考虑到我的情况,有没有办法指示 Debezium 从 mysql-bin.000008 - 位置 2155 恢复其操作并绕过初始快照。
在此先感谢您的帮助。
解决方案
您可以尝试在 Connect 的偏移主题中插入一条记录,表示您想继续的位置。但在这种情况下,我真的不建议这样做,因为您会在连接器离开的时间和日志轮换时间之间丢失事件。因此,确实拍摄新快照会更安全。
推荐阅读
- laravel-5 - 如何通过控制器存储方法将数据存储在表中?我在一个迁移文件中有两个表
- javascript - 如何在Typescript Angular中获取鼠标移动xy坐标的十进制值?
- c++ - Should methods returning const std::string& return const std::string_view instead?
- arrays - 数组元素上的 ReactJS onClick 事件
- typescript - 如何让 Typescript 识别我的自定义全局过滤器?
- tensorflow-federated - 拥有 keras tff NN 模型时访问客户端丢失
- postgresql - 在 PostgreSQL 中从没有时区的时间戳中提取 EPOCH 值
- elasticsearch - 如何让 filebeat 忽略某些容器日志
- python - 注册时尝试登录用户时,auth 返回为 none
- python-3.x - 语音识别。模块已安装但无法工作