Debezium MongoDB连接器不执行初始快照



我使用的是带有分片副本集集群的MongoDB图谱,带有文档中描述的Debezium MongoDB连接器。

这就是我当前的配置(运行独立设置(:

name=dev-mongodb
connector.class=io.debezium.connector.mongodb.MongoDbConnector
tasks.max=4
mongodb.hosts=<some-url>.mongodb.net:27017
mongodb.name=mongodb
mongodb.user=<admin_user>
mongodb.password=<admin_user_pw>
database.include.list=<list_of_databases>
database.history.kafka.bootstrap.servers=<list_of_aws_msk_brokers>
database.history.kafka.topic=mongodb.history
include.schema.changes=true
mongodb.ssl.enabled=true

我可以在kafka主题中接收CDC事件,但文档描述的初始快照从未制作完成。我尝试过使用不同的mongodb.name,结果创建和使用了完全不同的主题集,但结果相同。

MongoDB操作日志有大约2M行,kafka主题总共只有几千条消息。

在进一步挖掘时,连接器似乎记录了oplog最后一个位置的偏移量。是否可以重置此偏移?

在我看来,您在多个部署中使用了相同的连接器名称,这意味着尽管更改了配置并试图重置连接器的状态,但它仍会继续查找先前的偏移并恢复oplog位置。

有两种选择:

  • 创建一个具有完全不同连接器名称的新连接器
  • 手动清除连接器的偏移

很多用户更喜欢第一个选项,因为它是最简单的。Kafka根据连接器的name记录连接器的偏移量,因此,只需调整连接器的名称,就会告诉Kafka连接器是全新的,它找不到任何要恢复的持久偏移量。

第二个选项有点复杂,因为您需要首先找到存储偏移量的Kafka主题,通常默认情况下这是connect-offsets,但可以重写。了解该主题后,应关闭所有使用该主题的连接器。如果在连接器使用此主题时对其进行调整,则可能会导致意外行为。

使用Kafka提供的kafkacat工具,您将希望运行以下程序,该程序假定默认的连接偏移量主题名称,因此相应地进行调整:

$ kafkacat -b localhost:9092 -t connect-offsets -C -f 'nKey (%K bytes): %k
Value (%S bytes): %s
Timestamp: %T
Partition: %p
Offset: %on'

这将产生一些输出;键";以及";分区";。为了重置偏移量,您需要使用正确的"将NULL(或tombstone(有效地写入主题;键";以及";分区";价值观

假设以上提供了此输出:

% Reached end of topic connect-offsets [0] at offset 0
% Reached end of topic connect-offsets [1] at offset 0
[…]
Key (52 bytes): ["source-file-01",{"filename":"/data/testdata.txt"}]
Value (15 bytes): {"position":87}
Timestamp: 1565859303551
Partition: 20
Offset: 0
[…]

您需要执行以下命令:

$ echo '["source-file-01",{"filename":"/data/testdata.txt"}]#' | 
kafkacat -b localhost:9092 -t connect-offsets -P -Z -K# -p 20

在echo语句中,我们指定密钥,然后指定由kafkacat参数-K#定义的密钥分隔符#和将空值作为NULL发送的-Z选项。-p参数是要指定分区的位置,正确设置键和分区很重要。

完成此操作后,您可以安全地重新启动使用该偏移主题的连接器,并且您应该看到该连接器的行为就像是一个全新的部署。

请注意,如果您使用的连接器使用数据库历史主题,如MySQL、SQL Server或Oracle,则还需要清除数据库历史主题。

然而,正如我之前所说,使用新名称重新部署连接器会更简单,从而避免需要使用所有kafka主题魔法来获得相同的结果。

最新更新