Docs 主页 → 开发应用程序 → MongoDB Kafka Connector
无效的恢复令牌
概述
了解如何从 MongoDB Kafka 源连接器中的无效恢复令牌中恢复。
堆栈跟踪
以下堆栈追踪显示,源连接器有无效的恢复令牌:
... org.apache.kafka.connect.errors.ConnectException: ResumeToken not found. Cannot create a change stream cursor ... Command failed with error 286 (ChangeStreamHistoryLost): 'PlanExecutor error during aggregation :: caused by :: Resume of change stream was not possible, as the resume point may no longer be in the oplog ...
原因
当源连接器的恢复令牌的 ID 与 MongoDB 部署的 oplog中的任何条目都不对应时,连接器将无法确定从哪里开始处理 MongoDB 变更流。单击以下标签页,查看您可能遇到此问题的场景:
有关 oplog 的更多信息,请参阅MongoDB 手册。
有关变更流的更多信息,请参阅变更流指南。
解决方案
您可以使用以下策略之一从无效的恢复令牌中恢复:
暂时容许的错误
您可以将源连接器配置为在生成变更流事件以更新连接器的恢复令牌时允许出现错误。此恢复策略最简单,但存在连接器短暂忽略与无效恢复令牌无关的错误的风险。如果您不能暂时容忍部署中的错误,则可以改为删除存储的偏移量。
要将源连接器配置为暂时容许错误,请执行以下操作:
设置
errors.tolerance
选项以容许所有错误:errors.tolerance=all 在源连接器引用的集合中插入、更新或删除文档,生成变更流事件以更新连接器的恢复令牌。
生成变更流事件后,将
errors.tolerance
选项设置为不再容忍错误:errors.tolerance=none
有关 errors.tolerance
选项的更多信息,请参阅错误处理和从中断属性恢复页面。
重置存储的偏移
您可以重置包含恢复令牌的 Kafka Connect 偏移数据,支持连接器恢复处理变更流。
要重置偏移数据,请将 offset.partition.name
配置属性的值变更为 Kafka 部署中不存在的分区名称。您可以按如下方式设置 offset.partition.name
属性:
offset.partition.name=<a string>
提示
为偏移分区命名
请考虑使用以下模式命名偏移分区:
offset.partition.name=<source connector name>.<monotonically increasing number>
此模式具有以下优点:
记录重置连接器的次数
偏移分区所属连接器的文档
例子
假设您将源连接器命名为 "source-values"
,并且是首次设置 offset.partition.name
属性。您将按如下方式配置连接器:
offset.partition.name=source-values.1
下次重置连接器的偏移数据时,请按以下方式配置连接器:
offset.partition.name=source-values.2
要了解有关 offset.partition.name
配置属性的详情,请参阅错误处理和从中断恢复属性页面。
要了解如何命名连接器,请参阅官方 Apache Kafka 文档。
防止
为防止因命名空间不频繁更新而导致无效恢复令牌错误,请启用heartbeats 。 Heartbeats 是源连接器的一项功能,可让连接器定期以及在源 MongoDB 命名空间的内容发生更改时更新其恢复令牌。
在源连接器配置中指定以下选项以启用 heartbeats:
heartbeat.interval.ms=<a positive integer>
要了解有关心跳的更多信息,请参阅中断属性中的错误处理和恢复指南。