Flink CDC这里是我忽略了什么配置么?mongo-cdc 2.4 flink1.17.1 同步的时候出现 Caused by: org.bson.BsonInvalidOperationException: Document does not contain key $clusterTime,请问有人遇到过这问题么?
MongoDB server version: 4.4.2-4
这个问题可能是由于您的Flink CDC配置中缺少了mongo-cdc.start.at
参数导致的。这个参数用于指定从哪个时间点开始读取数据,如果不设置该参数,则默认为null
,这可能会导致同步过程中出现BsonInvalidOperationException
异常。
您可以尝试在Flink CDC的配置文件中添加以下参数:
mongo-cdc.start.at=<时间戳>
其中,<时间戳>
表示您希望从哪个时间点开始读取数据。例如,如果您希望从2023年1月1日开始读取数据,可以将其设置为:
mongo-cdc.start.at=1672444800000
请注意,时间戳的单位是毫秒。
这个问题可能是由于MongoDB的副本集设置导致的。在MongoDB中,副本集中的主节点会维护一个时间戳$clusterTime,用于同步操作。如果Flink CDC在连接到副本集时没有正确处理这个时间戳,就可能会出现这个错误。
解决这个问题的方法是确保Flink CDC在连接到MongoDB副本集时能够正确处理$clusterTime。具体来说,你需要在连接字符串中指定readPreference为primary,这样Flink CDC就会直接连接到主节点,从而获取到正确的$clusterTime。
例如,如果你的连接字符串是"mongodb://localhost:27017/?replicaSet=myReplicaSet",你可以将其修改为"mongodb://localhost:27017/?replicaSet=myReplicaSet&readPreference=primary"。
另外,你也需要确保你的Flink CDC版本支持MongoDB 4.0或更高版本,因为$clusterTime是从MongoDB 4.0开始引入的。
mongodb是什么版本呀?
看上去是isMaster命令返回值没有$clusterTime导致的。
把心跳打开试试看呢: heartbeat.interval.ms = 3000,mongo cdc 加一个心跳开起的参数试一试: heartbeat.interval.ms = 3000,此回答整理自钉群“Flink CDC 社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。