开云体育官方注册网址Debezium MongoDB的连接器

概述

MongoDB的复制机制提供冗余和高可用性,并在生产中运行MongoDB的首选方法。MongoDB连接器抓住了一套副本或分片集群的变化。

一个MongoDB副本集由一组服务器都有相同的数据的副本,和复制确保所有更改由客户文件副本集的正确应用于其他副本的服务器,叫什么次要的人。MongoDB复制作品通过主记录的变化oplog(或操作日志),然后每个中学读的主要oplog和适用于所有操作自己的文档。当一个新的服务器添加到一个副本,该服务器首先执行快照所有的数据库,并在主节点上集开云体育电动老虎机合,然后读取主oplog应用以来的所有更改,可能是快照。这个新的服务器变成二级(和能够处理查询)时赶上oplog主要的尾巴。

改变流

尽管Debezium Mo开云体育官方注册网址ngoDB连接器不成为一套副本的一部分,它使用一个类似的复制机制来获取oplog数据。主要的区别在于,连接器并不直接读取oplog。相反,它代表oplog数据的捕获和解码到MongoDB改变流特性。与改变流,MongoDB服务器暴露的变化发生在一个集合作为一个事件流。Debe开云体育官方注册网址zium连接器下游监测变化的流,然后交付。连接器第一次检测到一个复制品,它考察了oplog获得最后一个记录的事务,然后执行主要的数据库的快照和集合。开云体育电动老虎机连接器完成复制的数据之后,它创建了一个变更流开始从oplog位置,它读。

MongoDB连接器流程变化,定期记录的位置事件起源于oplog流。连接器停止时,它记录最后oplog流位置处理,以便重启后可以恢复从那个位置。换句话说,连接器可以停止,升级或维护,并重新启动一段时间后,总是接哪里离开而不失去一个单一事件。当然,MongoDB oplogs通常限制在一个最大尺寸,如果连接器是停了很长一段时间,操作前的oplog可能清除连接器有机会阅读。在这种情况下,重新启动连接器后检测失踪oplog操作,执行一个快照,然后继续流的变化。

MongoDB连接器也很宽容的成员和领导复制集的变化,添加或删除碎片在一个分片集群,网络问题,这可能会导致通信失败。连接器总是使用复制集的主节点流变化,所以当副本集进行大选,一个不同的节点成为初级,连接器将立即停止流变化,连接到新的小学,开始使用新的主节点流的变化。类似地,如果连接器无法与副本集主要通信,它试图重新连接(使用指数倒扣,以便不压倒网络或副本集)。连接器连接恢复后,继续从最后一个事件流改变它了。这样连接器动态调整副本集成员的变化,并自动处理通信中断。

MongoDB连接器是如何运作的吗

概述的MongoDB拓扑连接器支持计划是有用的应用程序。

MongoDB连接器配置和部署时,它首先连接到MongoDB服务器在种子地址,并确定每个可用的副本集的详细信息。因为每个副本设置有自己的独立oplog,连接器将尝试使用一个单独的任务为每个副本集。连接器可以限制的最大任务数它将使用,如果没有足够的可用任务连接器将多个副本集分配给每个任务,虽然每个副本任务仍将使用一个单独的线程。

连接器对分片集群运行时,使用的价值tasks.max这是大于复制集的数量。这将允许连接器为每个副本创建一个任务集,并将让卡夫卡连接协调、分配和管理的任务在所有可用的工作进程。

MongoDB支持拓扑

MongoDB连接器支持以下MongoDB拓扑:

MongoDB副本集

Debe开云体育官方注册网址zium MongoDB连接器可以捕获从一个变化MongoDB副本集。生产副本集需要最少的至少有三个成员

使用MongoDB连接器与一套副本,您必须设置的值mongodb.connection.string财产在连接器配置副本设置连接字符串。当连接器从MongoDB准备开始捕捉变化改变流,它启动一个连接的任务。然后使用指定的连接字符串连接任务建立一个连接到一个可用的副本集成员。

由于连接器管理数据库连接方式的变化,这个版本Debezium不再支持使用开云体育官方注册网址开云体育电动老虎机mongodb.members.auto.discover属性防止连接器执行会员发现。

MongoDB集群分片

一个MongoDB集群分片包括:

  • 一个或多个碎片每个部署为一组副本;

  • 一个单独的副本,作为集群的设置配置服务器

  • 一个或多个路由器(也称为蒙戈),客户端连接请求路由到适当的碎片

    与分片集群使用MongoDB的连接器,连接器的配置,设置的值mongodb.connection.string财产分片集群连接字符串

mongodb.connection.string属性取代了弃用mongodb.hosts属性是用来提供早期版本的连接器的主机地址配置服务器复制品。在当前版本中,使用mongodb.connection.string为连接器提供MongoDB路由器的地址,也被称为蒙戈

当连接器连接到分片集群,它发现的每个副本的信息集代表一个集群中的碎片。连接器使用一个单独的任务从每个碎片捕捉变化。碎片从集群添加或删除,连接器动态调整任务的数量来弥补。

MongoDB独立服务器

MongoDB连接器有能力监测的变化不是一个独立的MongoDB服务器,因为没有oplog独立服务器。连接器将如果独立服务器转换为一套副本的一个成员。

MongoDB不建议在生产中运行一个独立的服务器。有关更多信息,请参见MongoDB文档

逻辑连接器名称

连接器配置属性topic.prefix作为一个逻辑名MongoDB集群复制设置或分片。连接器使用逻辑名以多种方式:所有主题名称的前缀,作为唯一标识符时记录改变流每个副本集的位置。

你应该给每个MongoDB连接器独特的逻辑名,有意义地描述了源MongoDB系统。我们建议逻辑名以字母或下划线开始,和剩下的字母数字或下划线字符。

执行一个快照

使用一套副本任务启动时,它使用连接器的逻辑名称和副本集名称找到一个抵消描述的位置连接器之前停止阅读修改。如果可以找到一个偏移量,它仍然存在于oplog,然后立即收益的任务流的变化,从记录的偏移位置。

然而,如果没有找到抵消或如果oplog不再包含那个位置,这个任务必须首先获取当前状态通过执行复制集的内容快照。这个过程开始通过记录当前位置的oplog和记录作为偏移量(连同一个标记,表示一个快照已经启动)。的任务,将继续复制每个集合,产生尽可能多的线程(的值snapshot.max.threads并行配置属性)来执行这项工作。连接器将一个单独的记录读取事件为每个文档它看到,读取事件将包含对象的标识符,对象的完整状态MongoDB的信息副本集对象被发现的地方。源信息还将包括一个国旗,表示事件时产生一个快照。

这个快照将继续直到复制所有集合相匹配的连接器的过滤器。如果连接器停止任务之前的快照完成后,在重新启动连接器快照再次开始。

尽量避免任务分配和重新配置而连接器执行快照副本集。连接器生成日志消息报告进展的快照。提供最大的控制,运行一个单独的卡夫卡为每个连接器连接集群。

特别的快照

默认情况下,一个连接器运行初始快照操作之后才开始第一次。这个初始快照后,在正常情况下,连接器不重复快照过程。未来的任何更改事件的数据连接器捕捉只通过流过程。

然而,在某些情况下获得的数据连接器在初始快照可能变得陈旧,丢失,或不完整的。提供一个机制来重新夺回收集数据,Debezium包括一个选项来执行特定的快照。开云体育官方注册网址以下更改数据库中可能导致执行一个特设快照:开云体育电动老虎机

  • 连接器配置修改获取一组不同的集合。

  • 卡夫卡主题删除,必须重建。

  • 数据损坏发生由于配置错误或者其他问题。

你可以重新运行快照收集你之前启动一个所谓的捕获快照特别的快照。特别的快照的使用要求信号集合。你发起一个特设快照通过发送一个信号请求Debezium信号集合。开云体育官方注册网址

当你启动一个特设的快照现有的集合,连接器附加内容的主题已经存在的集合。如果以前现有主题是移除,Debezium可以自动创建一个主题开云体育官方注册网址自动主题创建启用。

特设快照信号中包含指定集合的快照。快照可以捕捉数据库的全部内容,或捕获数据库中只有一个子集的集合。开云体育电动老虎机

您指定的集合来捕获通过发送一个execute-snapshot信息信号集合。设置的类型execute-snapshot信号增量,并提供集合的名称中包含快照,下表中描述:

表1。一个特别的例子execute-snapshot信号记录
默认的 价值

类型

增量

指定类型的快照,你想要运行。
设置类型是可选的。目前,你只能请求增量快照。

数据收集

N /一个

一个数组,其中包含正则表达式匹配集合的完全限定名称快照。
名字的格式是一样的signal.data.collection配置选项。

触发一个特别的快照

你发起一个特设的快照通过添加一个条目execute-snapshot信号类型信号集合。连接器处理消息之后,它开始快照操作。快照过程读取第一个和最后一个主键值,并使用这些值作为开始和结束点为每个集合。基于集合中的条目的数量,和配置的块大小,Debezium将集合划分为块,每个块和收益快照,在继承,一次一个。开云体育官方注册网址

目前,execute-snapshot动作类型触发增量快照只有。有关更多信息,请参见增量快照

增量快照

快照管理上提供了很大的灵活性,Debezium包括补充快照机制,称为开云体育官方注册网址增量快照。增量快照依靠Debezium机制开云体育官方注册网址Debezium连接器发送信号开云体育官方注册网址。基于增量快照DDD-3设计文档。

在增量快照,而不是捕捉数据库的完整状态,在一个初始快照,Debezium捕捉每个集合在阶段,在一系列的配置块。开云体育官方注册网址开云体育电动老虎机您可以指定集合,你希望快照捕获和每个数据块的大小。块大小确定的行数的快照收集在每个提取操作数据库。开云体育电动老虎机默认增量快照块大小为1024行。

作为增量快照,Debezium使用水印追踪其进展,保持每个行集合,它捕获的开云体育官方注册网址记录。分阶段方法捕获数据提供了以下优势标准初始快照过程:

  • 您可以运行增量快照与流数据获取,而不是推迟直到快照完成流媒体。连接器继续捕获实时事件从快照过程中更改日志,也操作模块。

  • 如果中断增量快照的进步,你可以恢复它而不会丢失任何数据。流程简历后,快照开始时它不禁停了下来,而不是重新夺回收集从一开始。

  • 您可以运行一个增量快照随时点播,并根据需要重复这个过程适应数据库更新。开云体育电动老虎机例如,您可以重新运行快照后修改连接器配置添加一个收集它collection.include.list财产。

增量快照过程

当您运行一个增量快照,Debezium每个集合通过主键,然后将集合分为块的基开云体育官方注册网址础上配置块大小。块的块,然后捕捉每个集合在一块行。对于每一行,它捕获快照发出事件。事件所代表的价值当块的快照开始的行。

作为一个快照,很可能其他进程继续访问数据库,收集潜在的修改记录。开云体育电动老虎机反映这种变化,插入,更新,或删除操作是致力于按平常的事务日志。同样,持续Debezium流过程继续检测这些事开云体育官方注册网址件并发出相应的改变事件记录卡夫卡。

Debe开云体育官方注册网址zium如何解决碰撞中记录主键相同的吗

在某些情况下,更新删除收到的事件流过程排放的序列。即流过程可能会发出一个事件,修改前一组行快照捕获块包含事件这一行。当最终发出相应的快照行活动,其价值已经取代了。以确保增量快照事件到达的顺序处理正确的逻辑顺序,Debezium采用缓冲方案解决冲突。开云体育官方注册网址只有在快照之间的碰撞事件和事件流解析对卡夫卡Debezium发出一个事件记录。开云体育官方注册网址

快照窗口

协助解决后面到达之间的碰撞事件和事件流,修改相同的行集合,Debezium雇佣了一个所谓的开云体育官方注册网址快照窗口。快照windows的划定了间隔期间指定增量快照捕获数据块集合。在一块的快照窗口打开之前,Debezium遵循其一贯的行为和直接从事务日志发出事件下游目标卡开云体育官方注册网址夫卡的话题。但从特定块快照打开,直到关闭,Debezium执行重复数据删除步骤解决之间的碰撞事件具有相同的主键. .开云体育官方注册网址

对于每个数据收集,Debezium发出两种类型的事件,并存储开云体育官方注册网址记录它们在单个目的地卡夫卡的话题。它捕获快照记录直接从表发出操作。与此同时,随着用户继续更新记录的数据收集,和事务日志更新以反映每一个提交,Debezium发出开云体育官方注册网址更新删除为每个变更操作。

快照窗口打开,Debezium开始处理一块快照,它提供了快照记录到内开云体育官方注册网址存缓冲区。在快照windows,主键的事件缓冲比较传入流的主键事件。如果没有发现匹配,直接发送到卡夫卡流事件记录。如果D开云体育官方注册网址ebezium检测到一个匹配,它丢弃缓冲事件,并将流记录写入目标主题,因为流事件逻辑取代静态快照事件。块的快照窗口关闭后,缓冲区只包含事件相关的事务日志事件存在。开云体育官方注册网址Debezium发出这些剩余事件收集的卡夫卡的话题。

连接器为每个快照块重复这个过程。

增量快照需要稳定的主键。然而,字符串不能保证稳定排序编码和特殊字符会导致意外的行为(蒙戈排序字符串)。请考虑使用其他类型的主键在执行增量快照。

使用增量快照分片MongoDB集群,必须设置特定的值以下属性:

触发一个增量快照

目前,启动增量快照的唯一方法是发送一个特设快照信号源数据库上的信号集合。开云体育电动老虎机

你提交一个信号信号收集使用MongoDBinsert ()方法。

Debezi开云体育官方注册网址um检测信号的变化收集后,它读取信号,请求的快照操作运行。

你提交的查询指定集合中包含快照,而且,还指定了快照的操作。目前,快照操作的唯一有效的选项是默认值,增量

指定集合中包含快照,提供一个数据收集数组列表集合或数组的正则表达式用于匹配集合,例如,
{“数据收集”:["。文物”、“public.Collection2 ")}

数据收集数组增量快照信号没有默认值。如果数据收集数组为空,Debezium检测到开云体育官方注册网址不需要行动,不执行一个快照。

如果一个集合的名称你想要包含在一个快照包含一个点()数据库的名称、模式或表,添加到集合开云体育电动老虎机数据收集数组,你必须摆脱在双引号的每一部分的名字。

例如,包含一个数据收集中存在公共开云体育电动老虎机数据库,这个名字MyCollection使用以下格式:“公共”。“MyCollection”

先决条件
利用源信号通道触发增量快照
  1. 插入一个信号文档转换成信号收集快照:

    < signalDataCollection >.insert ({”id: _ < idNumber >“类型”:< snapshotType >“数据”:{“数据收集”(“< collectionName >”、“< collectionName >”,“类型”:< snapshotType >}});

    例如,

    db.开云体育官方注册网址debeziumSignal.insert ({(1)“类型”:“execute-snapshot”,(2)(3)“数据”:{“数据收集”(“\”公共\”。\“文物\””、“\“公共\”,\“Collection2 \],(4)“类型”:“增量”}(5)});

    的值id,类型,数据参数对应的命令信号收集的字段

    下表描述了参数的例子:

    表2。描述字段的MongoDB插入()命令发送增量快照信号信号集合
    价值 描述

    1

    db.开云体育官方注册网址debeziumSignal

    指定完全限定名称的信号集合在源数据库上。开云体育电动老虎机

    2

    _id参数指定一个任意字符串,指定的id标识符的请求信号。
    插入的方法在前面的示例中省略了使用可选的_id参数。因为文件不明确赋值为参数,任意id MongoDB文档成为自动分配的id标识符的请求信号。
    使用这个字符串来识别信号收集日志信息条目。开云体育官方注册网址Debezium不使用这个标识符字符串。相反,在快照,Debezium生成自己的开云体育官方注册网址id字符串作为水印信号。

    3

    execute-snapshot

    指定类型参数指定的操作信号触发。

    4

    数据收集

    一个必需的组成部分数据领域的一个信号,指定数组的集合名称或正则表达式匹配集合名称中包含快照。
    数组列表正则表达式匹配集合完全限定名称,使用相同的格式使用指定连接器的信号集合的名称signal.data.collection配置属性。

    5

    增量

    一个可选的类型组件的数据领域的一个信号,表明指定的快照操作运行。
    目前,唯一有效的选项是默认值,增量
    如果你不指定一个值,连接器运行增量快照。

下面的例子,显示了JSON增量快照捕获的事件连接器。

例如:增量快照事件消息
{“前”:零,“后”:{“pk”:“1”,“价值”:“新数据”},“源”:{…“快照”:“增量”(1)},“人事处”:“r”,(2)“ts_ms”:“1620393591654”,“交易”:零}
字段名 描述

1

快照

指定类型的快照操作运行。
目前,唯一有效的选项是默认值,增量
指定一个类型在你提交的SQL查询信号集合是可选的。
如果你不指定一个值,连接器运行增量快照。

2

人事处

指定事件类型。
快照事件的值r,标志着一个操作。

程序使用卡夫卡信号通道

你可以发送一条消息配置卡夫卡的话题要求连接器运行一个临时增量快照。

卡夫卡的关键消息的值必须匹配topic.prefix连接器配置选项。

消息是一个JSON对象的值类型数据字段。

信号类型execute-snapshot,数据字段必须有以下字段:

表3。执行快照数据字段
默认的 价值

类型

增量

执行快照的类型。目前Debezium开云体育官方注册网址只支持增量类型。
详细信息,请参阅下一节。

数据收集

N /一个

逗号分隔的正则表达式匹配数组中包含的完全限定名称表快照。
指定名称需要通过使用相同的格式signal.data.collection配置选项。

附加条件

N /一个

一个可选的字符串,指定一个条件是连接器评估指定列的一个子集,包括在一个快照。

的一个例子execute-snapshot卡夫卡的信息:

关键= ' test_connector ' Value = '{“类型”:“execute-snapshot”、“数据”:{代码基于schema1中“数据收集”:["。表1”、“代码基于schema1中。table2"], "type": "INCREMENTAL"}}`
临时增量快照与附加条件

开云体育官方注册网址Debezium使用附加条件字段选择的内容集合的一个子集。

通常,当Debezium运行一个开云体育官方注册网址快照,它运行一个SQL查询,如:

SELECT * FROM<表>…。

当请求包含一个快照附加条件,附加条件添加到SQL查询,例如:

SELECT * FROM<表>在哪里<附加条件>…。

例如,给定一个产品收集与列id(主键),颜色,品牌,如果你想要一个快照只包括的内容颜色=蓝色当你请求快照,您可以添加一个附加条件声明内容过滤:

关键= ' test_connector ' Value = '{“类型”:“execute-snapshot”、“数据”:{代码基于schema1中“数据收集”:["。产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"}}

您可以使用附加条件声明中通过条件基于多个列。例如,使用相同的产品收集与前面的例子,如果你想要一个快照只包括的内容产品收集的颜色=蓝色,品牌= MyBrand你可以发送以下请求:

关键= ' test_connector ' Value = '{“类型”:“execute-snapshot”、“数据”:{代码基于schema1中“数据收集”:["。产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色和品牌= MyBrand "}}

停止一个增量快照

你也可以停止增量快照通过发送一个信号集合在源数据库上。开云体育电动老虎机你提交一个停止快照将文档插入到信号的信号集合。Debezi开云体育官方注册网址um检测信号的变化收集后,它读取信号,停止增量快照操作如果是在进步。

你提交的查询指定快照的操作增量的集合,选择要删除当前运行快照。

先决条件
使用一个源信号通道停止增量快照
  1. 插入一个停止信号文档转换成信号收集快照:

    < signalDataCollection >.insert ({”id: _ < idNumber >“类型”:“stop-snapshot”、“数据”:{“数据收集”(“< collectionName >”、“< collectionName >”,“类型”:“增量”}});

    例如,

    db.开云体育官方注册网址debeziumSignal.insert ({(1)“类型”:“stop-snapshot”,(2)(3)“数据”:{“数据收集”(“\”公共\”。\“文物\””、“\“公共\”,\“Collection2 \],(4)“类型”:“增量”}(5)});

    的值id,类型,数据参数对应的信号命令信号收集的字段

    下表描述了参数的例子:

    表4。的描述字段插入命令发送停止增量快照文件收集信号
    价值 描述

    1

    db.开云体育官方注册网址debeziumSignal

    指定完全限定名称的信号集合在源数据库上。开云体育电动老虎机

    2

    插入的方法在前面的示例中省略了使用可选的_id参数。因为文件不明确赋值为参数,任意id MongoDB文档成为自动分配的id标识符的请求信号。
    使用这个字符串来识别信号收集日志信息条目。开云体育官方注册网址Debezium不使用这个标识符字符串。

    3

    stop-snapshot

    类型参数指定的操作信号触发。

    4

    数据收集

    一个可选的组成部分数据领域的一个信号,指定数组的集合名称或正则表达式匹配集合名称删除快照。
    数组列表正则表达式匹配集合完全限定名称,使用相同的格式使用指定连接器的信号集合的名称signal.data.collection配置属性。如果该组件数据省略字段,那么信号停止整个增量快照的进展。

    5

    增量

    一个必需的组成部分数据领域的一个信号,表明指定的快照操作停止。
    目前,唯一有效的选项增量
    如果你不指定一个类型值时,信号无法停止增量快照。

使用卡夫卡信号通道停止增量快照

你可以发送消息到一个信号卡夫卡信号配置主题停止一个临时增量快照。

卡夫卡的关键消息的值必须匹配topic.prefix连接器配置选项。

消息是一个JSON对象的值类型数据字段。

信号类型stop-snapshot,数据字段必须有以下字段:

表5所示。执行快照数据字段
默认的 价值

类型

增量

执行快照的类型。目前Debezium开云体育官方注册网址只支持增量类型。
详细信息,请参阅下一节。

数据收集

N /一个

一个可选的逗号分隔的正则表达式匹配的完全限定名称中包含的表快照。
指定名称需要通过使用相同的格式signal.data.collection配置选项。

下面的例子显示了一个典型stop-snapshot卡夫卡的信息:

关键= ' test_connector ' Value = '{“类型”:“stop-snapshot”、“数据”:{代码基于schema1中“数据收集”:["。表1”、“代码基于schema1中。table2"], "type": "INCREMENTAL"}}`

流的变化

连接器的任务后一套副本记录一个偏移量,它使用偏移量来确定位置在oplog它应该开始流的变化。然后任务(根据配置)连接到主节点集的复制品或连接到一个replica-set-wide改变流,从这个位置开始流的变化。它处理所有的创建、插入和删除操作,并将它们转换为Debezium开云体育官方注册网址更改事件。每个更改事件包括位置在oplog操作被发现,和连接器定期记录这是最近的偏移量。的时间间隔记录是由抵消offset.flush.interval.ms,这是一种卡夫卡连接工人配置属性。

在连接器停止时优雅,最后抵消处理记录,在重新启动后,连接器将继续完全离开。如果连接器的任务意外终止,然而,那么任务可能处理和生成的事件后,最后记录偏移量但在最后抵消记录;在重新启动后,连接器在最后开始记录抵消,可能产生一些以前生成的相同事件之前就崩溃。

当所有组件在卡夫卡管道操作名义上,卡夫卡消费者收到的每条消息只有一天。然而,当事情出错,卡夫卡只能保证消费者获得每条消息至少一次。为了避免意想不到的结果,消费者必须能够处理重复的消息。

如前所述,连接器的任务总是使用复制集的主节点从oplog流变化,确保连接器看到最新的操作,可以捕获具有低延迟的变化比中学要使用。副本集选举新主时,连接器立即停止流变化,连接到新小学,开始流变化的新的主节点在同一位置。同样,如果连接器经历任何问题与副本集成员,它试图重新连接,利用指数倒扣,以便不压倒副本集,一旦连接它继续流从最后一个离开的。这样,连接器能够动态适应变化的副本集员和自动处理通信失败。

总而言之,MongoDB连接器继续运行在大多数情况下。沟通问题可能会导致连接器等到问题解决。

原像支持

在MongoDB 6.0及以后,您可以配置变化流发出的原像状态文档填充之前场MongoDB变化事件。要启用在MongoDB中使用原像,你必须设置changeStreamPreAndPostImages通过使用集合db.createCollection (),创建,或collMod。使Debezium Mong开云体育官方注册网址oDB在改变事件,包括原像设置capture.mode连接器的一个* _with_pre_image选项。

MongoDB变化大小限制流事件

MongoDB的大小变化流事件仅限于16 mb。使用原像因此增加的可能性超过这个阈值,从而导致失败。如何避免超过信息变化流极限,看到MongoDB文档

主题名称

MongoDB连接器写事件对于所有插入、更新和删除操作文档在每个集合到一个卡夫卡的话题。卡夫卡的话题总是表单的名称logicalName开云体育电动老虎机数据库名collectionName,在那里logicalName逻辑名与指定的连接器topic.prefix配置属性,开云体育电动老虎机数据库名是数据库的名称,操作发生,然后呢开云体育电动老虎机collectionNameMongoDB集合的名称中受影响的文件存在。

例如,考虑一个MongoDB设置一个复制品库存开云体育电动老虎机数据库包含四个集合:产品,products_on_hand,客户,订单。如果连接器监控这个数据库的逻辑名称开云体育电动老虎机实现,那么连接器生产这四个卡夫卡事件主题:

  • fulfillment.inventory.products

  • fulfillment.inventory.products_on_hand

  • fulfillment.inventory.customers

  • fulfillment.inventory.orders

注意,主题名称不包含副本集名称或碎片的名字。结果,所有更改到分片集合(每个碎片都包含集合的一个子集的文档)都去同一个卡夫卡的话题。

您可以设置卡夫卡自动创建的话题,因为他们是必要的。如果不是,那么您必须使用卡夫卡管理工具来创建主题开始前连接器。

分区

MongoDB连接器不作任何明确的决心如何分区主题活动。相反,它允许卡夫卡决定如何分区主题基于事件的钥匙。你可以改变卡夫卡的分区逻辑通过定义的名称瓜分者在卡夫卡连接工人配置实现。

卡夫卡维护总订单只有事件写入单个主题分区。分区键的事件意味着所有事件具有相同关键总是相同的分区。这将确保所有事件为一个特定的文档总是完全命令。

事务的元数据

开云体育官方注册网址Debezium可以生成事件表示事务边界和丰富变化数据事件消息的元数据。

限制当Debezium接收事务开云体育官方注册网址的元数据

开云体育官方注册网址Debezium寄存器和接收元数据只对交易发生后部署连接器。交易发生之前部署连接器的元数据是不可用的。

对每一笔交易开始结束De开云体育官方注册网址bezium生成一个事件,包含以下字段:

状态

开始结束

id

唯一的事务标识符的字符串表示。

event_count(结束事件)

发出的事件总数事务。

data_collections(结束事件)

对的数组data_collectionevent_count提供的事件数量发出的变化来自给定的数据收集。

下面的示例显示了一个典型的信息:

{“状态”:“开始”,“id”:“1462833718356672513”,“event_count”:空,“data_collections”:零}{“状态”:“结束”,“id”:“1462833718356672513”,“event_count”: 2,“data_collections”: [{:“data_collection rs0.testDB。collectiona”、“event_count”: 1}, {:“data_collection rs0.testDB。collectionb”、“event_count”: 1}]}

除非通过覆盖topic.transaction选择,交易事件写入主题命名< topic.prefix >.transaction

改变数据事件浓缩

启用事务元数据时,数据信息信封富含是新的吗事务字段。这个领域提供关于每一个事件的信息的形式复合的字段:

id

唯一的事务标识符的字符串表示。

total_order

事件在所有事件的绝对位置生成的事务。

data_collection_order

每个数据收集事件在所有事件的位置,发出的事务。

下面是一个例子,一个消息是什么样子:

{“后”:“{\“_id \”: {\“numberLong美元\”:\“1004 \”},\“first_name \”, \“安妮\”,\“last_name \”, \“Kretchmar \”, \“邮件\”:\“annek@noanswer.org \“}”,“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“1462833718356672513”,“total_order”:“1”,“data_collection_order”: " 1 "}}

数据更改事件

Debe开云体育官方注册网址zium MongoDB连接器生成一个数据更改事件为每个文档级操作,插入、更新或删除数据。每个事件都包含一个键和一个值。键和值的结构取决于收集的改变。

开云体育官方注册网址Debezium和卡夫卡连接的设计连续的事件消息流。然而,这些事件的结构可能会改变随着时间的推移,可以让消费者难以处理。为了解决这个问题,每个事件包含模式的内容或,如果您正在使用一个模式注册表,一个模式ID,一个消费者可以使用从注册表获取模式。这使得每个事件自包含的。

下面的骨架JSON显示了更改事件的基本四个部分。然而,如何配置卡夫卡连接转换器,你选择在应用程序中使用的决定表示这四个部分的更改事件。一个模式字段的更改事件只有当你配置转换器装出来的。同样,事件关键和事件有效负载的变化事件只有在你配置一个转换器装出来的。如果你使用JSON转换器配置它来生产所有四个基本事件部分改变,改变事件有一个结构:

{"模式":{(1)…},“有效载荷”:{(2)…},"模式":{(3)…},“有效载荷”:{(4)…}},
表6所示。更改事件基本内容的概述
字段名 描述

1

模式

第一个模式字段是关键事件的一部分。它指定了卡夫卡连接模式描述的事件的关键有效载荷部分。换句话说,第一个模式字段描述的关键文档的结构改变。

2

有效载荷

第一个有效载荷字段是关键事件的一部分。前面描述的结构模式字段和它包含文档的关键是改变。

3

模式

第二个模式场活动价值的一部分。它指定了卡夫卡连接模式描述的事件值有效载荷部分。换句话说,第二模式描述了文档的结构改变。通常,这个模式包含嵌套模式。

4

有效载荷

第二个有效载荷场活动价值的一部分。前面描述的结构模式场和它包含文档的实际数据,改变。

默认情况下,连接器流改变事件记录主题名称是一样的事件的原始集合。看到主题名称

MongoDB连接器确保所有卡夫卡连接模式名坚持Avro模式名称格式。这意味着逻辑服务器名称必须开始用拉丁字母或下划线,也就是说,a - z、a - z,或_。每个剩余字符在逻辑服务器名称和数据库和集合中的每个字符的名称必须是一个拉丁字母,数字,下划线,也就是说,a - z、a - z, 0 - 9,或\ _。开云体育电动老虎机如果有一个无效的字符替换为下划线字符。

这可能会导致意想不到的冲突如果逻辑服务器名称,数据库名称,或一组名称包含无效字符,和唯一的字符,区分名称从一个另一个无效,从而替换为下划开云体育电动老虎机线。

更改事件的钥匙

改变事件的主要包含的模式改变了文档的关键和改变文档的实际的关键。对于一个给定的集合,模式和相应的载荷包含一个id字段。这个字段的值是文档的标识符表示为一个字符串,来自MongoDB扩展JSON序列化严格模式

考虑一个连接器的逻辑名称实现包含一个,一套副本库存开云体育电动老虎机数据库,客户集合包含以下文件。

示例文档
{" _id ": 1004年,“first_name”:“安妮”,“last_name”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”}
示例更改事件关键

每一个变化事件,抓住了改变客户收集关键事件的模式相同。只要客户收集之前的定义,每一个更改事件捕获的变化客户收集以下关键结构。在JSON,看起来像这样:

{"模式":{(1)“类型”:“结构”、“名称”:“fulfillment.inventory.customers.Key”,(2)“可选”:假的,(3)“字段”:[(4){“字段”:“id”,“类型”:“弦”、“可选”:假}},“有效载荷”:{(5)" id ": " 1004 "}}
表7所示。描述变化事件的关键
字段名 描述

1

模式

模式的关键部分指定了卡夫卡连接模式,描述了什么是关键的有效载荷部分。

2

fulfillment.inventory.customers.Key

的名字的结构模式,它定义了关键的负载。该模式描述了文档的结构的关键是改变。关键模式名的格式connector-name开云体育电动老虎机数据库名称集合名称关键。在这个例子中:

  • 实现连接器的名称,生成的这一事件。

  • 库存是数据库包含集开云体育电动老虎机合的改变。

  • 客户是集包含的文档更新。

3

可选

表明事件的键必须包含一个值有效载荷字段。在这个例子中,一个关键的价值的有效载荷是必需的。关键的负载值字段是可选的文档时没有一个关键。

4

字段

指定每个字段,预计有效载荷,包括每个字段的名称、类型和是否需要它。

5

有效载荷

包含这一变化的关键文档生成事件。在这个例子中,包含一个单一的关键id字段的类型字符串的值是1004年

这个例子使用一个文档和一个整数标识符,但任何有效的MongoDB文档标识符相同的方式工作,包括文档标识符。文档标识符,一个事件的关键payload.id值是一个字符串,该字符串代表了原始文档的更新_id场作为MongoDB使用严格模式扩展的JSON序列化。下表提供了对不同类型的例子_id字段表示。

表8所示。代表文档的例子_id在事件关键载荷
类型 MongoDB_id价值 关键的负载

整数

1234年

{" id ": " 1234 "}

浮动

12.34

{" id ": " 12.34 "}

字符串

“1234”

{" id ": " \ " 1234 \ "}

文档

{“嗨”:“卡夫卡”、“num”: (10.0, 100.0, 1000.0)}

{" id ": "{\“嗨\”,\“卡夫卡\”,\“num \”: [10.0, 100.0, 1000.0]} "}

ObjectId

ObjectId (“596 e275826f08b2730779e1f”)

{" id ": "{\“美元oid \”: \ " 596 e275826f08b2730779e1f \ "} "}

二进制

BinData (“a2Fma2E = ", 0)

{" id ": "{\“二进制美元\”:\“a2Fma2E = \”, \“美元类型\”:\ " 00 \ "}"}

更改事件值

改变的价值比的关键事件更复杂。像的关键,有价值模式部分和一个有效载荷部分。的模式部分包含模式描述信封的结构有效载荷部分,包括其嵌套的字段。改变事件的操作创建、更新或删除数据有效载荷与信封结构都有一个值。

考虑相同的示例文档,用于显示的一个例子改变事件的关键:

示例文档
{" _id ": 1004年,“first_name”:“安妮”,“last_name”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”}

的价值部分的更改事件改变本文档描述为每个事件类型:

创建事件

下面的例子显示了更改事件的价值部分的连接器生成创建数据的操作客户集合:

{"模式":{(1)“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:真的,“名字”:“io.debezium.data.Json”,开云体育官方注册网址(2)“版本”:1、“字段”:“后”},{“类型”:“弦”、“可选”:真的,“名字”:“io.debezium.data.Json”、“版本”:1、“字段”:“补丁”},{“开云体育官方注册网址类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:假的,“场”:“版本”},{“类型”:“弦”、“可选”:假的,“场”:“连接器”},{“类型”:“弦”、“可选”:假的,“场”:“name”},{“类型”:“int64”、“可选”:假的,“场”:“ts_ms”},{“类型”:“布尔”、“可选”:真的,“默认”:假的,“场”:“快照”},{“类型”:“弦”、“可选”:假的,“场”:“分贝”},{“类型”:“弦”、“可选”:假的,“场”:“rs”},{“类型”:“弦”、“可选”:假的,“场”:“集合”},{“类型”:“int32”、“可选”:假的,“场”:“奥德”},{“类型”:“int64”、“可选”:真的,“场”:“h”}],“可选”:假的,“名字”:“io.debezium.connector.mongo.Source”,(3)“字段”:“源”},{“类型”:“弦”、“可选”:真的,“场”:“人事处”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”}],“可选”:假的,“名字”:“dbserver1.inventory.customers.Envelope”(4)},“有效载荷”:{(5)“后”:“{\“_id \”: {\“numberLong美元\”:\“1004 \”},\“first_name \”, \“安妮\”,\“last_name \”, \“Kretchmar \”, \“邮件\”:\“annek@noanswer.org \“}”,(6)“源”:{(7)“版本”:“tripwire。最后”、“连接器”:“mongodb”、“名称”:“满足”、“ts_ms”: 1558965508000,“快照”:假的,“分贝”:“库存”、“rs”:“rs0”、“收藏”:“客户”、“奥德”:31日“h”: 1546547425148721999},“人事处”:“c”,(8)“ts_ms”: 1558965515240(9)}}
表9所示。的描述创建事件值字段
字段名 描述

1

模式

价值的模式,描述了价值的有效载荷的结构。更改事件的价值模式都是一样的在每一个更改事件的连接器生成一个特定的集合。

2

的名字

模式节中,每的名字字段指定模式的一个字段值的有效载荷。

io.开云体育官方注册网址debezium.data.Json是负载的模式吗,补丁,过滤器字段。该模式是特定的客户收集。一个创建事件是唯一的事件,包含一个字段。一个更新事件包含一个过滤器字段和一个补丁字段。一个删除事件包含一个过滤器场,但不是一个场,也不是补丁字段。

3

的名字

io.开云体育官方注册网址debezium.connector.mongo.Source是负载的模式吗字段。该模式是特定于MongoDB连接器。连接器使用它生成的所有事件。

4

的名字

dbserver1.inventory.customers.Envelope是模式的总体结构载荷,在哪里dbserver1连接器的名称,库存是数据库,开云体育电动老虎机客户是集。该模式是特定于集合。

5

有效载荷

价值的实际数据。这是改变事件提供的信息。

它可能出现的JSON表示事件是远远大于他们描述的文档。这是因为JSON表示必须包括的模式和有效载荷部分信息。然而,通过使用Avro转换器,你可以显著减少连接器的消息流的大小,卡夫卡的话题。

6

一个可选的字段指定文档事件发生后的状态。在这个例子中,字段包含新文档的值_id,first_name,last_name,电子邮件字段。的价值始终是一个字符串。按照惯例,它包含一个文档的JSON表示。MongoDB oplog条目包含一个文档的完整状态只有_create_和事件更新事件,当capture.mode选项设置为change_streams_update_full;换句话说,一个创建事件是唯一的事件,包含一个场,不管capture.mode选择。

7

强制性字段描述了事件源的元数据。该字段包含信息,您可以使用它来比较这一事件与其他事件,关于事件的起源,事件发生的顺序,事件是否相同的事务的一部分。元数据来源包括:

  • 开云体育官方注册网址Debezium版本。

  • 连接器生成事件的名称。

  • MongoDB副本集合的逻辑名称,形成一个名称空间用于卡夫卡的生成的事件和主题名称的连接器写道。

  • 的名称和数据库包含新文档的集合。开云体育电动老虎机

  • 如果事件是一个快照的一部分。

  • 时间戳为数据库中更改时间和顺序的事件在时间戳。开云体育电动老虎机

  • 唯一标识符(MongoDB的操作h字段oplog事件)。

  • MongoDB的惟一标识符lsid和交易数量txnNumber的变化是在一个事务执行(仅改变流捕获模式)。

8

人事处

强制性的描述类型的字符串操作导致连接器生成事件。在这个例子中,c表明操作创建一个文档。有效值:

  • c=创建

  • u=更新

  • d=删除

  • r=阅读(只适用于快照)

9

ts_ms

可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。

对象,ts_ms显示的时间更改到数据库中。开云体育电动老虎机通过比较的值payload.source.ts_ms的价值payload.ts_ms,您可以确定源数据库更新和Debezium之间的滞后。开云体育官方注册网址开云体育电动老虎机

更新事件

改变流捕获模式

更改事件的价值更新的样本客户作为一个集合具有相同的模式创建事件的集合。同样,事件相同价值的有效载荷结构。然而,在一个事件有效负载价值包含不同的值更新事件。一个更新活动包括一个价值只有在capture.mode选项设置为change_streams_update_full。一个之前如果提供价值capture.mode选项设置为一个* _with_pre_image选择。有一个新的结构化字段updateDescription在这种情况下有几个额外的字段:

  • updatedFields是一个字符串字段包含更新的文档的JSON表示字段与他们的价值观

  • removedFields是一个列表的字段名称从文档中删除吗

  • truncatedArrays是一个列表的数组截断的文档吗

更改事件的一个例子是价值的事件连接器生成的一个更新客户集合:

{"模式":{…},“有效载荷”:{“人事处”:“u”,(1)“ts_ms”: 1465491461815,(2)“之前”:“{\“_id \”: {\“numberLong美元\”:\“1004 \”},\“first_name \”, \“未知\”,\“last_name \”, \“Kretchmar \”, \“邮件\”:\“annek@noanswer.org \“}”,(3)“后”:“{\“_id \”: {\“numberLong美元\”:\“1004 \”},\“first_name \”, \“安妮玛丽\”,\“last_name \”, \“Kretchmar \”, \“邮件\”:\“annek@noanswer.org \“}”,(4)“updateDescription”: {“removedFields”:空,“updatedFields”:“{\“first_name \”, \“安妮玛丽\“}”,(5)“truncatedArrays”:零},“源”:{(6)“版本”:“tripwire。最后”、“连接器”:“mongodb”、“名称”:“满足”、“ts_ms”: 1558965508000,“快照”:假的,“分贝”:“库存”、“rs”:“rs0”、“收藏”:“客户”、“奥德”:1、“h”: null,”托德”:空,“stxnid”: null, lsid”:“{\ " id \ ":{\“二进制美元\”:\“FA7YEzXgQXSX9OxmzllH2w = = \”, \“美元类型\”:\}“04 \”,\“uid \”:{\“二进制美元\”:\“47 deqpj8hbsa + /记时显示+ 5 jceuqerkm5nmpjwzg3hsufu = \”, \“美元类型\”:\“00”\}}”、“txnNumber”: 1}}}
表10。的描述更新事件值字段
字段名 描述

1

人事处

强制性的描述类型的字符串操作导致连接器生成事件。在这个例子中,u表明操作更新的文档。

2

ts_ms

可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。

对象,ts_ms显示的时间更改到数据库中。开云体育电动老虎机通过比较的值payload.source.ts_ms的价值payload.ts_ms,您可以确定源数据库更新和Debezium之间的滞后。开云体育官方注册网址开云体育电动老虎机

3

之前

包含实际的MongoDB文档的JSON字符串表示之前改变。+一个更新事件不包含一个值之前场,如果不设置捕获模式之一* _with_preimage选项。

4

包含实际的MongoDB文档的JSON字符串表示。
一个更新事件不包含一个值如果不设置捕获模式change_streams_update_full

5

updatedFields

包含更新的JSON字符串表示文档的字段值。在这个例子中,更新了first_name领域一个新值。

6

强制性字段描述了事件源的元数据。这个字段包含相同的信息创建事件的集合,但值是不同的,因为这在oplog事件从不同的位置。元数据来源包括:

  • 开云体育官方注册网址Debezium版本。

  • 连接器生成事件的名称。

  • MongoDB副本集合的逻辑名称,形成一个名称空间用于卡夫卡的生成的事件和主题名称的连接器写道。

  • 收集和数据库的名称包含更新的文档。开云体育电动老虎机

  • 如果事件是一个快照的一部分。

  • 时间戳为数据库中更改时间和顺序的事件在时间戳。开云体育电动老虎机

  • MongoDB的惟一标识符lsid和交易数量txnNumber的变化是在一个事务执行。

事件的价值应作为at-point-of-time值处理的文档。价值不是动态计算,而是从集合中获得的。因此有可能如果多个更新关注一个接一个,所有的更新更新事件将包含相同的值将代表最后一个值存储在文档。

如果您的应用程序依赖于逐渐改变那么你应该依靠进化updateDescription只有。

删除事件

在一个值删除有相同的变化事件模式部分为创建更新事件的集合。的有效载荷在一个部分删除事件包含的值是不同的创建更新事件的集合。特别是,一个删除事件不包含一个价值也不是updateDescription价值。这里的一个例子删除事件的文档客户集合:

{"模式":{…},“有效载荷”:{“人事处”:“d”,(1)“ts_ms”: 1465495462115,(2)“之前”:“{\“_id \”: {\“numberLong美元\”:\“1004 \”},\“first_name \”, \“安妮玛丽\”,\“last_name \”, \“Kretchmar \”, \“邮件\”:\“annek@noanswer.org \“}”,(3)“源”:{(4)“版本”:“tripwire。最后”、“连接器”:“mongodb”、“名称”:“满足”、“ts_ms”: 1558965508000,“快照”:真的,“分贝”:“库存”、“rs”:“rs0”、“收藏”:“客户”、“奥德”:6,“h”: 1546547425148721999}}}
表11所示。的描述删除事件值字段
字段名 描述

1

人事处

强制性的字符串描述操作的类型。的人事处字段值是d,表示这个文件被删除。

2

ts_ms

可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。

对象,ts_ms显示的时间更改到数据库中。开云体育电动老虎机通过比较的值payload.source.ts_ms的价值payload.ts_ms,您可以确定源数据库更新和Debezium之间的滞后。开云体育官方注册网址开云体育电动老虎机

3

之前

包含实际的MongoDB文档的JSON字符串表示之前改变。+一个更新事件不包含一个值之前场,如果不设置捕获模式之一* _with_preimage选项。

4

强制性字段描述了事件源的元数据。这个字段包含相同的信息创建更新事件的集合,但值是不同的,因为这在oplog事件从不同的位置。元数据来源包括:

  • 开云体育官方注册网址Debezium版本。

  • 连接器生成事件的名称。

  • MongoDB副本集合的逻辑名称,形成一个名称空间用于卡夫卡的生成的事件和主题名称的连接器写道。

  • 收集和数据库的名称包含删除文档。开云体育电动老虎机

  • 如果事件是一个快照的一部分。

  • 时间戳为数据库中更改时间和顺序的事件在时间戳。开云体育电动老虎机

  • 唯一标识符(MongoDB的操作h字段oplog事件)。

  • MongoDB的惟一标识符lsid和交易数量txnNumber的变化是在一个事务执行(仅改变流捕获模式)。

MongoDB事件连接器设计卡夫卡日志压实。日志压实使删除一些旧消息只要至少每个关键是保持最新的消息。这使卡夫卡回收存储空间同时确保主题包含一个完整的数据集,可用于重新加载密钥的状态。

墓碑上的事件

MongoDB连接器事件唯一标识文档都有完全相同的关键。当一个文件被删除,删除事件价值仍然使用日志压实之前因为卡夫卡可以删除所有消息同样关键。然而,对于卡夫卡移除所有关键消息,消息一定价值。使这一切成为可能,Debezium MongoDB连接器后开云体育官方注册网址发出删除事件,连接器发出一种特别的墓碑上活动,但是有相同的关键价值。墓碑事件告知卡夫卡,与相同的键可以删除所有消息。

设置MongoDB

MongoDB连接器使用MongoDB的流捕获的变化而变化,所以连接器只能与MongoDB副本集或分片集群,每个碎片都是一个独立的副本集。请参阅MongoDB文档设置副本集分片集群。另外,一定要了解如何启用访问控制和认证副本集。

你也必须有一个MongoDB用户阅读适当的角色管理开云体育电动老虎机数据库oplog可以阅读的地方。此外,用户还必须能够阅读配置开云体育电动老虎机数据库的配置服务器集群的分片和必须list开云体育电动老虎机Databases特权操作。当使用改变流(默认)用户也必须整个集群范围的特权操作找到changeStream

当你打算利用原像和填充之前字段,您首先需要启用changeStreamPreAndPostImages一组使用db.createCollection (),创建,或collMod

MongoDB在云中

您可以使用MongoDB的Deb开云体育官方注册网址ezium连接器MongoDB阿特拉斯。注意,MongoDB Atlas只支持通过SSL安全连接,即+ mongodb.ssl.enabled连接器的选择必须被设置为真正的

部署

部署Debezium M开云体育官方注册网址ongoDB连接器,安装Debezium MongoDB连接器存档,配置连接器,并开始通过添加其配置卡夫卡连接连接器。

过程
  1. 下载连接器的插件存档,

  2. 将JAR文件提取到您的卡夫卡连接环境。

  3. 添加JAR文件的目录卡夫卡连接的plugin.path

  4. 重新启动卡夫卡连接过程去接新的JAR文件。

如果你正在与不可变的容器,明白了开云体育官方注册网址Debezium集装箱的图片Apache管理员、Apache卡夫卡和卡夫卡与MongoDB连接器已经安装并准备运行。

的Deb开云体育官方注册网址ezium教程走你通过使用这些图片,这是一个伟大的方式了解Debezium。开云体育官方注册网址

MongoDB连接器配置示例

下面是一个例子,一个连接器的配置实例,从MongoDB捕获数据副本集rs0在端口27017上192.168.99.100,我们逻辑上的名字fullfillment。通常,您在JSON文件中配置Debezium MongoD开云体育官方注册网址B连接器通过设置配置属性可用于连接器。

你可以选择生成特定事件,MongoDB集群复制设置或分片。可选地,您可以过滤掉不需要的集合。

{" name ": " inventory-connector”,(1)“配置”:{“连接器。class": "io.debezium.connector.mongodb.MongoDbConnector",(2)“mongodb.connection。字符串": "mongodb://192.168.99.100:27017/?replicaSet=rs0",(3)”的话题。前缀”:“fullfillment”,(4)“collection.include。库存清单”:“。*”(5)}}
1 我们的连接器的名称与卡夫卡连接服务注册它。
2 MongoDB连接器类的名称。
3 连接字符串使用连接到MongoDB副本集。
4 逻辑名MongoDB副本集的形式生成事件的名称空间,用于所有的名字的卡夫卡主题连接器写道,卡夫卡连接模式名称和对应的Avro模式的名称空间,当Avro使用转换器。
5 正则表达式匹配的列表集合名称空间(例如,< dbName >。< collectionName >)要监视的所有集合。这是可选的。

配置属性的完整列表,您可以设置Debezium MongoDB连接器,明白了开云体育官方注册网址MongoDB连接器配置属性

你可以发送这个配置帖子命令来运行卡夫卡连接服务。服务记录配置并启动一个连接器任务执行下列操作:

  • 连接到MongoDB集群复制设置或分片。

  • 分配任务为每个副本集。

  • 执行一个快照,如果必要的。

  • 读取流的变化。

  • 流变化事件记录卡夫卡的话题。

添加连接器配置

开始运行Debezium MongoD开云体育官方注册网址B连接器,创建一个连接器配置,配置添加到您的卡夫卡连接集群。

先决条件
过程
  1. 创建一个配置MongoDB连接器。

  2. 使用卡夫卡REST API连接卡夫卡添加连接器配置连接集群。

结果

连接器启动后,完成以下操作:

  • 执行一个一致的快照你收藏的MongoDB副本集。

  • 读取流变化的副本集。

  • 发生变化的事件每插入、更新和删除文档。

  • 流变化事件记录卡夫卡的话题。

连接器属性

Debe开云体育官方注册网址zium MongoDB连接器有许多配置属性,您可以使用它们来实现正确的连接器为您的应用程序的行为。许多属性的默认值。属性信息的组织结构如下:

以下配置属性要求除非一个默认值是可用的。

表12。需要Debeziu开云体育官方注册网址m MongoDB连接器配置属性
财产 默认的 描述

没有默认的

独特的连接器的名称。再次尝试注册名称相同的就会失败。(此属性所要求的所有卡夫卡连接连接器)。

没有默认的

连接器的Java类的名称。总是使用的值io.开云体育官方注册网址debezium.connector.mongodb.MongoDbConnectorMongoDB的连接器。

没有默认的

指定一个连接字符串连接器连接到使用MongoDB副本集。该属性取代了mongodb.hosts房地产的以前版本的MongoDB连接器。

连接器,捕捉变化从一个分片MongoDB集群使用这个连接字符串只在初始切分时发现过程mongodb.connection.mode被设置为replica_set。在最初的发现过程,生成连接字符串为每个单独的碎片。

replica_set

指定连接器使用的策略,当它连接到一个分片MongoDB集群。将此属性设置为以下值之一:

replica_set

连接器建立个人联系每个碎片复制品。

分片

连接器建立一个数据库连接,基于价值的开云体育电动老虎机mongodb-connection-string。+

replica_set选项允许连接器分发切分处理跨多个连接器的任务。然而,在这个配置中,连接器绕过了MongoDB路由器连接到单独的碎片时,不建议使用MongoDB。

连接模式之间轻松切换的无效存储补偿,触发新的快照。

没有默认的

一个唯一的名称标识连接器和/或MongoDB集群复制设置或分片这个连接器监视器。每个服务器最多应该监视一个Debezium连接器,因为这个服务器名称前缀都坚持卡夫卡主题来自M开云体育官方注册网址ongoDB集群设置或复制品。只使用字母数字字符,连字符,点和下划线组成的名字。逻辑名称应该是唯一的在所有其他连接器,因为命名的名称作为前缀接收记录该连接器的卡夫卡的话题。

不改变这个属性的值。如果你改变名称值,重启之后,而不是继续发出事件最初的话题,连接器发出后续事件主题的名字是基于新值。

没有默认的

数据库用户的名称用于连接开云体育电动老虎机到MongoDB。这是要求只有当MongoDB配置为使用身份验证。

没有默认的

使用密码时连接到MongoDB。这是要求只有当MongoDB配置为使用身份验证。

管理

开云体育电动老虎机包含MongoDB数据库(身份验证源)凭证。这是要求只有当MongoDB配置为使用身份验证与另一个身份验证数据库开云体育电动老虎机管理

连接器将使用SSL连接MongoDB实例。

当SSL启用此设置控制严格的主机名检查是否禁用连接阶段。如果真正的连接不会防止中间人攻击。

空字符串

一个可选的以逗号分隔的正则表达式匹配要监视的数据库名称。开云体育电动老虎机默认情况下,所有数据库监控。开云体育电动老虎机
开云体育电动老虎机database.include.list设置连接器只监视数据库的属性指定。开云体育电动老虎机其他数据库被开云体育电动老虎机排除在监视。

匹配一个数据库的名字,Debezium应用指定开云体育电动老虎机的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串的数据库名称;开云体育电动老虎机可能存在不匹配的子字符串在数据库名称。开云体育电动老虎机
如果包含该属性的配置,也不设置开云体育电动老虎机database.exclude.list财产。

空字符串

一个可选的以逗号分隔的正则表达式匹配数据库名称被排除在监视。开云体育电动老虎机当开云体育电动老虎机database.exclude.list设置连接器监控每个数据库属性指定的除外。开云体育电动老虎机

匹配一个数据库的名字,Debezium应用指定开云体育电动老虎机的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串的数据库名称;开云体育电动老虎机可能存在不匹配的子字符串在数据库名称。开云体育电动老虎机
如果包含该属性的配置,不设置开云体育电动老虎机database.include.list财产。

空字符串

一个可选的以逗号分隔的正则表达式匹配MongoDB集合要监视的完全限定的名称空间。默认情况下,除在连接器监控所有集合当地的管理开云体育电动老虎机数据库。当collection.include.list设置,连接器监控属性指定的集合。其他集合被排除在监视。组标识符的形式开云体育电动老虎机数据库名collectionName

匹配一个名称空间的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串名称空间的名称;它不匹配的子字符串的名字。
如果包含该属性的配置,也不设置collection.exclude.list财产。

空字符串

一个可选的以逗号分隔的正则表达式匹配完全限定名称空间对MongoDB集合被排除在监视。当collection.exclude.list设置,连接器监控每一个集合属性指定的除外。组标识符的形式开云体育电动老虎机数据库名collectionName

匹配一个名称空间的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串名称空间的名称;可能存在不匹配的子字符串在数据库名称。开云体育电动老虎机
如果包含该属性的配置,不设置collection.include.list财产。

最初的

指定的标准连接器启动时执行一个快照。将属性设置为以下值之一:

最初的

当连接器开始,如果它不检测其补偿价值的话题,它执行数据库的快照。开云体育电动老虎机

从来没有

当连接器,它跳过快照过程并立即开始改变事件流oplog的数据库记录的操作。开云体育电动老虎机

change_streams_update_full

指定连接器使用的方法来捕获更新从MongoDB服务器事件变化。将此属性设置为以下值之一:

change_streams

更新事件消息不包括完整的文档。消息不包含一个字段表示文档的状态之前的改变。

change_streams_update_full

更新事件消息包括完整的文档。不包括消息之前字段表示文档更新前的状态。事件消息返回文档的完整状态字段。

在某些情况下,当capture.mode返回完整的配置文件,updateDescription更新事件消息的字段可能报告不一致的值。这样的差异会导致多个更新后应用于文档快速连续。从MongoDB数据库连接器请求完整的文档之后才收到更新事件的描述开云体育电动老虎机updateDescription字段。如果以后的更新修改前的源文档连接器可以从数据库中检索,连接器收到修改的文档稍后更新。开云体育电动老虎机

当您配置capture.mode返回完整的文档,您可能会注意到的内容之间的差异updateDescription字段的消息。差异会导致当多个应用于文档快速连续变化。因为连接器提交请求后才完整的文档更新,更新后可以修改更新后的源文档中描述updateDescription字段。完整的文档,然后连接器收到回应其查询的结果反映了之后改变。

change_streams_update_full_with_pre_image

更新事件事件消息包括完整的文档,包含一个字段表示文档的状态之前的改变。

change_streams_with_pre_image

更新事件不包括完整的文档,但包含一个字段表示文档的状态之前的改变。

所有集合中指定collection.include.list

一个可选,以逗号分隔的正则表达式匹配的完全限定名称(<开云体育电动老虎机数据库名>< collectionName >)的模式,你想要包含在一个快照。指定的物品必须命名的连接器collection.include.list财产。这个属性生效只有连接器snapshot.mode除了属性设置为一个值从来没有
这个属性不会影响增量快照的行为。

匹配一个模式的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串的模式名称;它不可能出现在一个模式匹配的子字符串的名字。

空字符串

一个可选的以逗号分隔的字段的完全限定名称应该排除在更改事件消息值。完全限定名称字段的表单开云体育电动老虎机数据库名collectionName字段名nestedFieldName,在那里开云体育电动老虎机数据库名collectionName可能包含匹配任何字符的通配符(*)。

空字符串

一个可选的完全限定的替代品以逗号分隔的字段应该用于重命名字段更改事件消息值。完全限定替代字段的表单开云体育电动老虎机数据库名collectionName字段名nestedFieldName:newNestedFieldName,在那里开云体育电动老虎机数据库名collectionName可能包含匹配任何字符的通配符(*),使用冒号(:)确定重命名字段的映射。下一个字段替换应用于先前的结果列表中的字段替换,所以牢记这一点当重命名多个字段,在相同的路径。

1

连接器使用指定的最大数量的任务连接到集群分片。当你使用连接器与单个MongoDB副本设置,默认值是可以接受的。但是当一个集群包含多个碎片,使卡夫卡连接分配为每个副本集工作,指定的值等于或大于集群中的碎片的数量。MongoDB连接器可以使用一个单独的任务连接到集群中的每个碎片复制品。

这个属性有影响只有当连接器连接到一个分片MongoDB集群和mongodb.connection.mode属性设置为replica_set。当mongodb.connection.mode被设置为分片,或者如果连接器连接到一个unsharded MongoDB副本设置部署,连接器忽略了这个设置,默认为只使用一个单一的任务。

1

正整数的值指定线程的最大数量用于执行初始同步的集合在一个复制集。默认为1。

真正的

控制是否删除事件是紧随其后的是一个墓碑上的事件。

真正的——由一个一个删除操作删除事件和随后的墓碑事件。

——只有一个删除发送事件。

源记录被删除后,发射一个墓碑事件(默认行为)允许卡夫卡属于完全删除所有事件的关键,以防被删除的行日志压实启用主题。

没有默认的

以毫秒为单位间隔,连接器应该等待启动之前拍摄快照之后;
可以用来避免快照中断启动多个连接器时在一个集群中,这可能会导致连接器的调整。

0

指定的最大数量的文档应该读入一个从每个集合而拍摄快照。连接器将读取集合内容在多个批次的大小。
默认值为0,这意味着服务器选择一个适当的获取大小。

没有一个

指定应该如何调整的兼容模式名消息转换器使用的连接器。可能的设置:

  • 没有一个不应用任何调整。

  • avro替换字符,不能用于强调Avro类型名称。

  • avro_unicode替换下划线或字符,不能用于像_uxxxx Avro与相应的unicode类型名称。注意:_是一个转义序列类似于Java反斜杠

没有一个

指定字段名称应该如何调整的兼容性与消息转换器使用的连接器。可能的设置:

  • 没有一个不应用任何调整。

  • avro替换字符,不能用于强调Avro类型名称。

  • avro_unicode替换下划线或字符,不能用于像_uxxxx Avro与相应的unicode类型名称。注意:_是一个转义序列类似于Java反斜杠

看到Avro命名为更多的细节。

没有默认的

以逗号分隔的主机名和端口对(“主机”或“主持人:港口”)的MongoDB服务器副本集。列表可以包含一个单独的主机名和端口。

这个属性是弃用,应该取而代之+ mongodb.connection.string

以下先进的配置属性都有现成的,在大多数情况下工作,因此很少需要指定连接器的配置。

表13。开云体育官方注册网址Debezium MongoDB连接器高级配置属性
财产 默认的 描述

2048年

正整数的值指定的最大大小每一批处理的事件,应该在每个迭代的连接器。默认为2048。

8192年

正整数的值指定了阻塞队列的最大记录数所能容纳的量。当Debe开云体育官方注册网址zium从数据库读取事件流,它将事件阻塞队列之前写卡夫卡。开云体育电动老虎机阅读改变事件的阻塞队列可以提供反压力的情况下从数据库连接器吸入消息的速度比它可以编写卡夫卡,或者当卡夫卡变得不可用。开云体育电动老虎机事件队列连接器时忽视举行定期记录偏移量。总是设置的值max.queue.size更大的价值max.batch.size

0

一个长整型值,指定字节的阻塞队列的最大体积。默认情况下,体积限制不指定阻塞队列。指定的字节数,队列可以消费,将此属性设置为一个积极的长期价值。
如果max.queue.size也是集,写作时队列阻塞队列的大小达到通过属性指定的限制。例如,如果您设置max.queue.size = 1000,max.queue.size.in.bytes = 5000、写作到队列阻塞队列包含1000条记录后,或记录在队列的体积后达到5000字节。

1000年

正整数的值指定的毫秒数连接器应该在每个迭代中等待新的更改事件出现。默认为500毫秒,或0.5秒。

1000年

正整数的值指定了初始延迟当试图重新连接到主第一次连接尝试失败后或当没有主要是可用的。默认为1秒(1000毫秒)。

1000年

正整数的值指定的最大延迟当试图重新连接到主重复连接尝试失败后或当没有主要是可用的。默认值为120秒(120000毫秒)。

16

正整数的值指定的最大数量的连接尝试失败之前一套副本主要发生异常和任务将中止。默认为16,这为默认值connect.backoff.initial.delay.msconnect.backoff.max.delay.ms结果在短短20分钟的尝试之前失败。

v2

模式的版本在疾控中心事件。开云体育官方注册网址Debezium 0.10引入了一些打破
的结构变化块为了统一所有连接器接触结构。
通过设置这个选项v1早期版本中使用的结构可以产生。注意,这个设置不推荐,计划在未来取消Debezium版本。开云体育官方注册网址

0

控制频率的心跳消息被发送。
这个属性包含一个定义连接器的频率间隔以毫秒为单位发送消息到一个心跳的话题。这可以用于监控连接器是否仍然从数据库接收更改事件。开云体育电动老虎机你也应该利用心跳消息的情况下只记录未捕获的集合是更长一段时间的改变。在这种情况下,连接器将继续从数据库读取oplog /改变流但从来没有发出任何改变消息到卡夫卡,反过来意味着没有抵消更新致力于卡夫卡。开云体育电动老虎机这将导致旋转oplog文件但连接器不会注意到它在重启导致可用一些事件不再需要re-execution最初的快照。

设置这个参数0不要发送心跳消息。
默认情况下禁用。

t

一个以逗号分隔的操作类型,在流将被忽略。的操作包括:c插入/创建、u更新/替换,d删除,t截断,没有一个不要跳过任何上述操作。默认情况下,与其他Debezium连接器的一致性,截断操作跳过(不发出该连接器开云体育官方注册网址)。然而,由于MongoDB不支持截断更改事件,这是有效地指定相同没有一个

没有默认的

控制,收集项目都包含在快照。这个属性只影响快照。指定一个以逗号分隔的名称的集合开云体育电动老虎机databaseName.collectionName

还为每个集合指定,指定另一个配置属性:snapshot.collection.filter.overrides。开云体育电动老虎机数据库名collectionName。例如,其他的配置属性的名称可能是:snapshot.collection.filter.overrides.customers.orders。将此属性设置为一个有效的过滤表达式检索在快照只有你想要的东西。当连接器执行快照,它只检索项匹配筛选器表达式。

当设置为真正的开云体育官方注册网址Debezium生成事件与事务边界和丰富数据事件信封事务的元数据。

看到事务的元数据额外的细节。

10000(10秒)

之前等待的毫秒数retriable错误发生后重新启动连接器。

30000年

连接器的间隔为新的民意调查,删除或改变副本集。

10000(10秒)

司机的毫秒数将等待新的连接尝试将中止。

10000(10秒)

集群监控的频率达到每台服务器。

0

之前的毫秒数套接字上发送/接收超时之前。的值0禁用此行为。

30000(30秒)

司机会等待的毫秒数之前选择一个服务器超时,抛出一个错误。

没有默认的

当流发生变化时,该设置适用于处理改变流事件作为标准MongoDB聚合流管道的一部分。管道是一个MongoDB聚合管道组成的指令到数据库过滤或转换数据。开云体育电动老虎机这可以使用定制连接器使用的数据。这个属性的值必须是一个数组的允许的聚合管道阶段在JSON格式。注意,这是附加在内部管道用于支持连接器(如过滤操作类型、数据库名称集合名称,等等)。开云体育电动老虎机

0

指定的最大数量毫秒oplog /改变流光标前将等待服务器产生一个结果导致执行超时异常。的值0表明使用服务器/驱动程序默认等待超时。

没有默认的

完全限定的名称用于发送的数据收集信号连接器。使用以下格式指定集合名称:
<开云体育电动老虎机数据库名>< collectionName >

的信号通道名称列表启用的连接器。默认情况下,以下渠道:

  • 卡夫卡

  • 文件

  • jmx

可选地,也可以实现自定义信号通道

没有默认的

启用的通知通道名称列表的连接器。默认情况下,以下渠道:

  • 水槽

  • 日志

  • jmx

可选地,也可以实现自定义通知渠道

1024年

的最大数量的文档连接器存取和在增量快照数据块读取到内存中。增加块大小提供了更高的效率,因为快照少运行快照查询一个更大的规模。然而,更大的块的大小也需要更多的内存缓冲区快照数据。调整块大小的值提供了最佳的性能在您的环境中。

io.开云体育官方注册网址debezium.schema.DefaultTopicNamingStrategy

TopicNamingStrategy类的名称应该用于确定数据的主题名称变化,模式改变,交易,心跳事件等,默认DefaultTopicNamingStrategy

为主题名称指定分隔符,违约

10000年

大小用于举办的主题名称有界并发散列映射。这个缓存将有助于确定主题名称对应于给定的数据收集。

__开云体育官方注册网址debezium-heartbeat

控件的名称连接器发送心跳消息的主题。主题名称有这种模式:

topic.heartbeat.prefixtopic.prefix

例如,如果话题是前缀实现,默认的主题名称__开云体育官方注册网址debezium-heartbeat.fulfillment

事务

控制主题的连接器的名称发送交易信息的元数据。主题名称有这种模式:

topic.prefixtopic.transaction

例如,如果话题是前缀实现,默认的主题名称fulfillment.transaction

开云体育官方注册网址Debezium连接器卡夫卡信号配置属性

开云体育官方注册网址Debezium提供了一组信号。*属性控制连接器与卡夫卡的信号交互的话题。

下表描述了卡夫卡信号属性。

表14。卡夫卡信号配置属性
财产 默认的 描述

没有默认的

卡夫卡的名称主题,特设的连接器监控信号。

没有默认的

一个主机/端口对列表,建立一个初始的连接器使用连接到卡夫卡集群。每一对引用的卡夫卡集群Debezium卡夫卡所使用的连接过程。开云体育官方注册网址

One hundred.

一个整数值,它指定的最大数量毫秒时,连接器等轮询的信号。

开云体育官方注册网址Debezium直通信号连接器卡夫卡消费者客户端配置属性

Debe开云体育官方注册网址zium连接器提供了直通信号卡夫卡消费者的配置。直通信号属性从前缀开始signals.consumer。*。例如,连接器传递属性等signal.consumer.security.protocol = SSL卡夫卡的消费者。

一样的直通属性数据库模式历史客户开云体育电动老虎机,D开云体育官方注册网址ebezium带前缀的属性之前,会将它们传递到消费者卡夫卡信号。

开云体育官方注册网址Debezium连接器水槽通知配置属性

下表描述了通知属性。

表15。水槽通知配置属性
财产 默认的 描述

没有默认的

主题的名称,从Debezium接收通知。开云体育官方注册网址这个属性是必需的配置notification.enabled.channels财产包括水槽为启用通知渠道之一。

下表描述了通知属性。

表16所示。水槽通知配置属性
财产 默认的 描述

没有默认的

主题的名称,从Debezium接收通知。开云体育官方注册网址这个属性是必需的配置notification.enabled.channels财产包括水槽为启用通知渠道之一。

监控

Debe开云体育官方注册网址zium MongoDB连接器有两个度量类型除了动物园管理员的内置支持JMX的度量,卡夫卡,卡夫卡连接。

  • 快照指标提供连接器的信息操作在执行一个快照。

  • 流指标提供连接器的信息操作连接器时捕捉变化和流改变事件记录。

开云体育官方注册网址Debezium监控文档提供如何使用JMX公开这些指标。

快照指标

MBean开云体育官方注册网址debezium.mongodb: type = connector-metrics上下文=快照,server =< mongodb.server.name >、任务=< task.id >

快照指标并非暴露,除非一个快照操作被激活时,或者如果发生自上次快照连接器的开始。

下表列出了shapshot指标可用。

属性 类型 描述

字符串

读过的最后一个快照事件连接器。

连接器以来的毫秒数读取和处理最近的事件。

这个连接器的事件总数已经从去年开始或重置。

事件的数量已经被包括/排除列表过滤规则过滤配置连接器。

string []

表的列表被连接器。

int

队列长度用来传递事件之间的快照和主卡夫卡连接循环。

int

队列的自由能力用来传递事件之间的快照和主卡夫卡连接循环。

int

表的总数被包含在快照。

int

表的数量尚未复制快照。

布尔

快照是否开始。

布尔

快照是否停了下来。

布尔

快照是否中止。

布尔

快照是否完成。

总秒数,快照到目前为止,即使不完整。也包括时间快照时停了下来。

总秒数,快照是暂停。如果快照停了好几次,暂停时间增加。

Map < String,长>

地图包含扫描的行数为每个表的快照。表在处理过程中也逐渐被添加到地图。更新一个表扫描并完成每10000行。

的最大缓冲区队列以字节为单位。这个指标是可用的max.queue.size.in.bytes被设置为一个积极的长期价值。

当前的体积,以字节为单位,记录在队列中。

Debe开云体育官方注册网址zium MongoDB连接器还提供了以下自定义指标快照:

属性 类型 描述

NumberOfDisconnects

数量的数据库断开连接开云体育电动老虎机。

流指标

MBean开云体育官方注册网址debezium.mongodb: type = connector-metrics、上下文=流媒体服务器=< mongodb.server.name >、任务=< task.id >

下表列出了流指标可用。

属性 类型 描述

字符串

过去的流事件连接器已经阅读。

连接器以来的毫秒数读取和处理最近的事件。

事件,该连接器的总数已经重置自上次启动或指标。

创建事件的总数,这个连接器以来最后复位启动或指标。

更新事件的总数,这个连接器以来最后复位启动或指标。

删除事件,该连接器的总数已经重置自上次启动或指标。

事件的数量已经被包括/排除列表过滤规则过滤配置连接器。

string []

表的列表被连接器。

int

队列长度之间的拖缆和主要用来传递事件卡夫卡连接循环。

int

队列的自由能力用来传递事件之间的拖缆和主卡夫卡连接循环。

布尔

国旗,表示连接器是否正在连接到数据库服务器。开云体育电动老虎机

的毫秒数去年更改事件的时间戳和连接器之间的处理它。值将会把机器上的任何差异时钟运行数据库服务器和连接器。开云体育电动老虎机

处理事务的数量。

Map < String, String >

去年收到事件的坐标。

字符串

事务标识符的处理事务。

的最大缓冲区队列以字节为单位。这个指标是可用的max.queue.size.in.bytes被设置为一个积极的长期价值。

当前的体积,以字节为单位,记录在队列中。

Debe开云体育官方注册网址zium MongoDB连接器还提供了自定义流指标如下:

属性 类型 描述

NumberOfDisconnects

数量的数据库断开连接开云体育电动老虎机。

NumberOfPrimaryElections

主节点的选举。

MongoDB连接器常见问题

开云体育官方注册网址Debezium是一个分布式系统,捕获所有多个上游数据库的变化,而且永远不会错过或失去一个事件。开云体育电动老虎机当系统正常操作和精心管理,然后Debezium提供开云体育官方注册网址只有一天交付的每一个更改事件。

如果发生故障,系统不失去任何事件。然而,尽管从故障中恢复,这可能重复一些更改事件。在这种情况下,Debezium卡夫卡一样开云体育官方注册网址,提供了至少一次交付更改事件。

本节的其余部分描述如何Debezium处理各种故障和问题。开云体育官方注册网址

配置和启动错误

在下列情况下,连接失败时开始,报告错误或异常日志,并停止运行:

  • 连接器的配置是无效的。

  • 连接器不能成功地连接到MongoDB使用指定的连接参数。

在失败之后,连接器使用指数倒扣尝试重新连接。您可以配置重新连接的最大数量。

在这些情况下,错误将会有更多的细节问题和建议解决。连接器可以重新启动时配置被纠正或MongoDB问题已经解决。

MongoDB变得不可用

一旦运行连接器,如果主节点的MongoDB副本设置不可用或不可访问的,连接器将多次尝试重新连接到主节点,使用指数倒扣防止饱和网络或服务器。如果主仍然不可用后可配置数量的连接尝试,连接器将会失败。

尝试重新连接控制的三个属性:

  • connect.backoff.initial.delay.ms——推迟首次试图重新连接之前,默认为1秒(1000毫秒)。

  • connect.backoff.max.delay.ms——最大延迟试图重新连接之前,默认为120秒(120000毫秒)。

  • connect.max.attempts——尝试前一个错误产生的最大数量,默认为16。

每个延迟是之前的两倍延迟,最大延迟。给定的默认值,下表显示了每个失败的连接请求的延迟时间和总积累失败。

尝试重新连接数量 延迟在尝试之前,在几秒钟内 总延迟在尝试之前,分和秒

1

1

00:01

2

2

00:03

3

4

00:07

4

8

今日

5

16

00:31

6

32

01:03

7

64年

02:07

8

120年

04:07

9

120年

06:07

10

120年

08:07

11

120年

10:07

12

120年

12:07

13

120年

14:07

14

120年

阿联酋

15

120年

18:07

16

120年

20:07

卡夫卡连接过程停止优雅

如果卡夫卡连接正在运行在分布式模式中,优雅地和卡夫卡连接过程停止,然后关闭之前处理卡夫卡连接将迁移过程的连接器任务到另一个组的卡夫卡连接过程中,连接器和新任务将接任务之前离开的确切位置。有一个短暂的延迟在处理连接器任务优雅地停止并重新启动新的流程。

如果组只包含一个过程,过程是优雅地停了下来,然后卡夫卡连接将停止连接器和记录每个副本的最后抵消。重启后,副本集任务将继续自己的确切位置。

卡夫卡连接过程崩溃

如果卡夫卡连接器进程意外停止,然后将终止运行的任何连接器的任务是没有记录他们最最近处理补偿。当卡夫卡连接在分布式模式下运行,它将在其他进程重启这些连接器的任务。然而,MongoDB连接器将恢复从最后一个偏移量记录早些时候的过程,这意味着新的替换任务可能会产生一些相同的更改事件被处理之前就崩溃。重复事件的数量取决于抵消冲洗周期和变化的数据量就在崩溃。

因为有一个机会,一些事件可能被复制从失败中恢复期间,消费者应该预见到一些事件可能被复制。开云体育官方注册网址Debezium变化是幂等的,所以一系列事件总是导致相同的状态。

开云体育官方注册网址Debezium还包括与每个数据源特定变化事件消息事件的起源信息,包括MongoDB事件独特的事务标识符(h)和时间戳(证券交易委员会奥德)。消费者可以跟踪其他这些值知道它已经看到一个特定的事件。

卡夫卡变得不可用

连接器生成变化事件,记录这些事件在卡夫卡的卡夫卡连接框架使用卡夫卡生产商API。卡夫卡连接也会定期记录最新的抵消,出现在这些更改事件,在一个频率,卡夫卡连接指定的人员配置。如果卡夫卡经纪人不可用,卡夫卡连接工作进程运行连接器只会反复尝试重新连接卡夫卡经纪人。换句话说,连接器的任务将暂停,直到可以恢复连接,此时连接器将恢复他们到底去哪里。

连接器失败后停止了很长一段时间间隔snapshot.mode被设置为最初的

如果连接器优雅地停止,用户可能会继续执行操作复制组的成员。变化发生在连接器离线继续在MongoDB的oplog被记录。在大多数情况下,重新启动连接器后,它将读取oplog的偏移值来确定每个副本的最后一个手术,它流集,然后恢复流变化这一点。重启后,数据库操作在连接器发生停止发射开云体育电动老虎机卡夫卡像往常一样,一段时间之后,连接器赶上数据库。连接器所需的时间赶上取决于卡夫卡的功能和性能和体积的变化发生在数据库中。开云体育电动老虎机

然而,如果连接器仍然停了足够长的时间间隔,它可以发生,MongoDB清洗期间oplog连接器不活跃的时间,导致的损失信息连接器的最后位置。连接器重新启动后,它不能恢复流,因为oplog不再包含前面的偏移值,标志着连接器处理最后一个手术。连接器还不能执行一个快照,因为它通常会在snapshot.mode属性设置为最初的,没有偏移值。在这种情况下,存在不匹配,因为oplog不包含前面的偏移量的值,但是抵消价值存在于连接器的内部卡夫卡补偿的话题。一个错误结果和连接器失败。

从失败中恢复,删除失败的连接器,并创建一个新的连接器使用相同的配置,但是名称不同的连接器。当你开始新的连接器,它执行一个快照摄取的数据库,然后恢复流。开云体育电动老虎机

MongoDB失去写道

在某些失败情况下,MongoDB可以失去提交,导致MongoDB连接器无法捕获失去的更改。例如,如果主崩溃后突然变化和记录变更适用于其oplog oplog可能不可用在辅助节点可以阅读其内容。结果,辅助节点当选为新的主节点可能会丢失oplog最近的变化。

在这个时候,没有办法防止这种副作用在MongoDB。