您正在查看的文档Debezium的过时的版本。开云体育官方注册网址
如果你想查看这个页面的最新稳定版本,请走吧在这里

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

开云体育官方注册网址Debezium MongoDB连接器跟踪一组MongoDB副本或MongoDB分片集群数据库和文档更改的集合,作为事件记录这些变化在卡夫卡的话题。开云体育电动老虎机连接器自动处理的添加或删除碎片在分片集群中,每个副本集成员的变化,选举在每个副本集,和等待解决通信问题。

概述

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

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

MongoDB连接器使用同样的复制机制,但它实际上并没有成为一个复制集的成员。就像MongoDB次要的,然而,连接器总是读取oplog复制集的主。当连接器首次看到一套副本,它着眼于oplog得到最后一个记录的事务,然后执行开始同步主要的数据库和集合。开云体育电动老虎机当所有数据复制,连接器然后开始阅读oplog早些时候读的位置。在MongoDB oplog操作幂等,所以不管多少次的操作应用,它们导致相同的结束状态。

MongoDB连接器处理oplog,定期记录位置oplog事件源自哪里。MongoDB连接器停止时,它记录最后oplog位置处理,以便重新启动时它只是从这个位置开始读取oplog。换句话说,连接器可以停止,升级或维护,并重新启动一段时间后,它将完全离开而不失去一个单一事件。当然,MongoDB的oplogs通常限制在一个最大尺寸,这意味着连接器不能停太久,否则一些操作前的oplog可能清除连接器有机会阅读。在这种情况下,重新启动时连接器将检测丢失的oplog操作,执行初始同步,然后继续oplog尾巴。

MongoDB连接器也很宽容的成员和领导复制集的变化,添加或删除碎片在一个分片集群,网络问题,这可能会导致通信失败。连接器总是使用复制集的主节点oplog尾巴,所以当副本集进行大选,一个不同的节点成为初级,连接器将立即停止跟踪oplog,连接到新主,尾矿oplog开始使用新的主节点。同样,如果连接器与副本集交流主要经历任何问题,它将尝试重新连接(使用指数倒扣,以便不压倒网络或副本集),继续跟踪oplog从去年离开。用这种方法连接器能够动态适应变化的副本集成员和自动处理失败的沟通。

设置MongoDB

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

你也必须有一个MongoDB用户阅读适当的角色管理开云体育电动老虎机数据库oplog可以阅读的地方。此外,用户还必须能够阅读配置开云体育电动老虎机数据库分片的配置服务器集群。

MongoDB支持拓扑

MongoDB连接器可以用于各种各样的MongoDB拓扑。

MongoDB副本集

MongoDB连接器可以捕获从一个变化MongoDB副本集。生产副本集需要最少的至少有三个成员

使用MongoDB连接器与一套副本,提供一个或多个副本设置服务器的地址种子地址通过连接器的mongodb.hosts财产。连接到连接器将使用这些种子副本集,一旦连接会复制设置配套的成员和主要成员。连接器将开始一个任务连接到小学和捕获主要oplog的变化。副本集选举新主时,任务会自动切换到新的主。

当MongoDB的代理(如码头工人在OS X或Windows),当一个客户端连接到副本集和发现成员,MongoDB客户机将排除代理作为一个有效的成员和尝试,不能直接连接到成员而不是通过代理。

在这种情况下,设置连接器的可选的mongodb.members.auto.discover配置属性指导连接器放弃会员发现,而是简单地使用第一种子地址(通过指定mongodb.hosts主节点属性)。这也许可行,但仍使选举时导致问题发生。

MongoDB集群分片

一个MongoDB集群分片包括:

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

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

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

与分片集群使用MongoDB的连接器,连接器配置的主机地址配置服务器副本集。当连接器连接到这个副本集,它发现它是作为分片集群的配置服务器,发现每个副本的信息作为集群中的碎片,然后启动一个单独的任务来捕获每个副本的更改集。如果新碎片被添加到集群或现有的碎片移除,连接器将自动调整其相应的任务。

MongoDB独立服务器

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

MongoDB不建议在生产中运行一个独立的服务器。

MongoDB连接器是如何运作的吗

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

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

逻辑连接器名称

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

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

初始同步

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

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

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

尽量避免任务分配和重新配置连接器时执行初始同步的副本集。连接器日志消息和进展的初始同步。最大限度控制,运行一个单独的集群卡夫卡为每个连接器连接。

尾矿的oplog

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

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

当一切都操作名义上,卡夫卡消费者会看到每一个消息只有一天。然而,当事情出错卡夫卡只能保证消费者将看到每条消息至少一次。因此,消费者需要预测不止一次看到消息。

如上所述,连接器的任务总是使用复制集的主节点到尾oplog,确保连接器看到最新的操作,可以捕获具有低延迟的变化比中学要使用。副本集选举新主时,连接器将立即停止跟踪oplog,连接到新的初选,并开始跟踪新的主oplog开始在同一位置。同样,如果连接器任何问题与副本集成员交流经验,它将尝试重新连接(使用指数倒扣,以便不淹没副本集),一旦连接继续尾矿oplog从去年离开。这样连接器能够动态适应变化的副本集成员和自动处理失败的沟通。

底线是,MongoDB连接器将继续运行在大多数情况下,虽然沟通问题可能会导致连接器等到问题解决。

主题名称

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

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

  • fulfillment.inventory.products

  • fulfillment.inventory.products_on_hand

  • fulfillment.inventory.customers

  • fulfillment.inventory.orders

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

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

分区

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

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

事件

所有数据更改事件产生的MongoDB连接器有一个键和一个值。

卡夫卡从卡夫卡0.10开始,可以记录消息键和值时间戳的消息是由生产者(记录)或由卡夫卡写入到日志。

开云体育官方注册网址Debezium和卡夫卡连接的设计连续的事件消息流的结构,这些事件可能会随时间改变,如果这些事件改变了结构的来源或者连接器改进或改变。这可能是消费者很难处理,因此使它非常容易卡夫卡连接使每个事件自包含的。每条消息键和值有两个部分:一个模式有效载荷。模式描述了结构的负载,而负载包含实际的数据。

更改事件的关键

对于一个给定的集合,包含一个更改事件的关键id字段。它的值是文档的标识符表示为字符串的MongoDB扩展JSON序列化严格模式。考虑一个连接器的逻辑名称实现包含一个,一套副本库存开云体育电动老虎机数据库与一个客户集合包含文件如:

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

每一个事件的变化客户集合将功能相同的关键结构,JSON是这样的:

{"模式":{“类型”:“结构”、“名称”:“fulfillment.inventory.customers。关键”“可选”:假的,“字段”:[{”字段”:“id”、“类型”:“弦”、“可选”:假}]},“有效载荷”:{" id ": " 1004 "}}

模式部分包含一个卡夫卡连接模式描述的关键是有效载荷部分,在我们的案例中,意味着有效载荷值不是可选的,是一个结构由模式定义命名fulfillment.inventory.customers.Key,有一个必需的字段命名id类型的字符串。如果我们观察的价值的关键有效载荷领域,我们会发现它的确是一个结构(在JSON只是一个对象)和单一id字段,其值是一个字符串包含整数1004年

这个例子使用一个文档和一个整数标识符,但任何有效的MongoDB文档标识符(包括文件)。的值id字段有效载荷将只是一个字符串代表MongoDB扩展原始文档的JSON序列化(严格的模式)_id字段。发现以下几个例子说明_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 \ "}"}

确保所有卡夫卡连接MongoDB连接器模式名有效Avro模式名。这意味着逻辑服务器名称必须从拉丁字母或下划线(例如,[a - z、a - z _]),剩下的字符在逻辑服务器名和数据库中所有的人物和集合名称必须是拉丁字母,数字或下划线(例如,[a - z、a - z 0 - 9, \ _])。开云体育电动老虎机如果不是这样,那么所有无效字符将自动替换为下划线字符。

这可能会导致意想不到的冲突模式名称时逻辑服务器名称,数据库名称、表名包含其他字符,表之间唯一的区别人物全名是无效的,因此替换为下划线。开云体育电动老虎机连接器试图产生一个异常在这种情况下,但是只有当冲突之间存在模式中使用一个连接器。

更改事件的价值

的值改变事件消息是更复杂的。像的关键信息,它有一个模式节和有效载荷部分。每一个变化的有效载荷部分由MongoDB连接器有一个事件的价值信封结构有以下字段:

  • 人事处是一个强制性的字段,其中包含一个字符串值描述操作的类型。值MongoDB连接器c创建(或插入),u对于更新,d删除,r为阅读(在初始同步的情况下)。

  • 是一个可选的字段,如果存在包含文档的状态事件发生。MongoDB的oplog条目只包含一个文档的完整状态创建事件,这些是包含一个唯一的事件字段。

  • 是一个强制性的字段,其中包含一个结构描述元数据来源,在MongoDB中包含几个字段:Debezium版本,逻辑名称,复制集的名称,名称空间的集合,MongoDB的时间戳(和顺序的事件在时间戳)的事件发生,MongoDB操作的标识符(例如,开云体育官方注册网址h字段oplog事件)和初始同步标记如果事件导致在开始同步。

  • ts_ms是可选的,如果存在包含时间(使用系统时钟在JVM中运行卡夫卡连接任务)的连接器处理事件。

当然,模式部分事件消息的值包含一个模式描述了这个信封的结构和嵌套的字段。

让我们看看创建/事件的价值为我们的样子客户表:

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

如果我们看一下模式这个事件的一部分价值,我们可以看到的模式信封特定于收集、和的模式吗结构(这是特定于MongoDB连接器和重用所有事件)。还注意到值始终是一个字符串,按照惯例,它将包含一个文档的JSON表示。

如果我们看一下有效载荷这个事件的一部分价值事件,我们可以看到的信息,即是描述文档阅读作为一个初始的一部分(因为同步op = rinitsync = true),字段值包含文档的JSON字符串表示。

似乎的JSON表示的事件是远远大于他们描述的行。这是真的,因为JSON表示必须包括模式有效载荷的部分信息。它甚至是可能的,推荐使用Avro转换器大幅减少的大小实际写入卡夫卡主题的消息。

的价值更新更改事件在这个会有完全相同的集合模式,它的有效载荷结构相同但将持有不同的价值观。具体地说,将不会有一个更新事件价值和将有一个补丁字符串包含JSON表示的幂等更新操作。这里有一个例子:

{"模式":{…},“有效载荷”:{“人事处”:“u”,“ts_ms”: 1465491461815,“补丁”:“{\“\”美元:{\“first_name \”, \“安妮玛丽\}}”,“源”:{“版本”:“1.0.3。最后”、“连接器”:“mongodb”、“名称”:“满足”、“ts_ms”: 1558965508000,“快照”:真的,“分贝”:“库存”、“rs”:“rs0”、“收藏”:“客户”、“奥德”:6,“h”: 1546547425148721999}}}

当我们比较的价值插入事件中,我们看到一些差异有效载荷部分:

  • 人事处字段值现在u,表示该文件改变了,因为一个更新

  • 补丁字段出现,stringified JSON表示的实际MongoDB文档幂等的改变,在这个例子中包括设置first_name领域一个新值

  • 场不再出现

  • 场结构有相同的字段,但值是不同的,因为这在oplog事件从不同的位置

  • ts_ms显示了Debezium处理这个事件的时间戳开云体育官方注册网址

MongoDB提供的补丁的内容字段本身和它的确切格式取决于特定的数据库版本。开云体育电动老虎机你应该准备潜在的更改格式MongoDB实例升级到新版本。

本文档中所有的例子都来自MongoDB 3.4和可能不同,如果你使用一个不同的一个。

更新事件在MongoDB的oplog没有之前改变文档的状态,所以没有办法为连接器提供这些信息。然而,由于创建事件包含起始状态,下游的消费者流可以fully-reconstruct每个文档的状态保持最新状态和应用的每个事件的状态。开云体育官方注册网址Debezium连接器不能保持这样的状态,所以它不能这样做。

到目前为止,我们已经看到样品创建/更新事件。现在,让我们看的价值删除事件相同的表。的价值删除事件收集也会相同的模式,它的有效载荷结构相同但将持有不同的价值观。特别是,不会有一个删除事件值或补丁值:

{"模式":{…},“有效载荷”:{“人事处”:“d”、“ts_ms”: 1465495462115,“源”:{“版本”:“1.0.3。最后”、“连接器”:“mongodb”、“名称”:“满足”、“ts_ms”: 1558965508000,“快照”:真的,“分贝”:“库存”、“rs”:“rs0”、“收藏”:“客户”、“奥德”:6,“h”: 1546547425148721999}}}

当我们比较这价值在其他事件,我们看到一些差异有效载荷部分:

  • 人事处字段值现在d,表示这个文件被删除

  • 补丁场没有出现

  • 场没有出现

  • 场结构有相同的字段,但值是不同的,因为这在oplog事件从不同的位置

  • ts_ms显示了Debezium处理这个事件的时间戳开云体育官方注册网址

MongoDB连接器实际上提供了另一种类型的事件。每一个删除紧随其后的是一个事件墓碑上事件,但具有相同的关键值,使卡夫卡知道它的足够信息卡夫卡日志压实机制可以删除所有与该密钥信息。

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

MongoDB连接器事件唯一标识文档将有完全相同的密钥,信号卡夫卡,只有保持最新的事件。卡夫卡,墓碑的事件通知所有消息与相同键可以删除。

部署MongoDB连接器

如果你已经安装了动物园管理员,卡夫卡,卡夫卡连接,然后使用Debezium开云体育官方注册网址 MongoDB连接器是容易的。简单地下载连接器的插件存档提取罐到卡夫卡连接环境中,并将jar文件的目录添加到卡夫卡连接使用插件的路径plugin.path配置属性。重新启动卡夫卡连接过程去接新罐。

如果你不变的容器,然后检查开云体育官方注册网址Debezium码头工人的图片对管理员、卡夫卡和卡夫卡与MongoDB连接器已经预装和准备好了。我们的教程即使走你通过使用这些图片,这是学习的极好途径Debezium都是关于什么。开云体育官方注册网址你甚至可以上运行D开云体育官方注册网址ebezium Kubernetes OpenShift

示例配置

使用连接器生产更改事件特定MongoDB集群复制设置或分片,JSON中创建一个配置文件。连接器启动时,它将执行初始同步的集合MongoDB副本集和开始阅读复制集的oplogs生产事件每插入、更新和删除行。选择性地过滤掉不需要的集合。

下面是一个例子,MongoDB连接器的配置,监控MongoDB副本集rs0在端口27017上192.168.99.100,我们逻辑上的名字fullfillment。通常,您配置Debezium MongoDB的连接器开云体育官方注册网址. json使用连接器可用的配置属性文件。

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

看到连接器属性的完整列表在这些配置可以指定。

这个配置可以通过POST发送到运行卡夫卡连接服务,然后记录配置并启动一个将连接器连接到MongoDB的任务副本集或分片集群,每个副本集分配任务,执行初始同步如果必要,阅读oplog,卡夫卡主题和记录事件。

连接器属性

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

财产 默认的 描述

的名字

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

connector.class

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

mongodb.hosts

以逗号分隔的主机名和端口对(“主机”或“主持人:港口”)的MongoDB服务器副本集。列表可以包含一个单独的主机名和端口。如果mongodb.members.auto.discover被设置为,那么主机和端口对应该与副本集名称前缀(例如,rs0 / localhost: 27017)。

mongodb.name

一个唯一的名称标识连接器和/或MongoDB集群复制设置或分片这个连接器监视器。每个服务器最多应该监视一个Debezium连接器,因为这个服务器名称前缀都坚持卡夫卡主题来自M开云体育官方注册网址ongoDB集群设置或复制品。只应该使用字母数字字符以及下划线。

mongodb.user

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

mongodb.password

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

mongodb.ssl.enabled

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

mongodb.ssl.invalid.hostname.allowed

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

开云体育电动老虎机database.whitelist

空字符串

一个可选的以逗号分隔的正则表达式匹配数据库名称被监控;开云体育电动老虎机任何数据开云体育电动老虎机库名称不包括白名单中排除在监视。默认情况下所有数据库监控。开云体育电动老虎机不得使用吗开云体育电动老虎机database.blacklist

开云体育电动老虎机database.blacklist

空字符串

一个可选的以逗号分隔的正则表达式匹配数据库名称被排除在监控;开云体育电动老虎机任何数据开云体育电动老虎机库名称不包含在黑名单监控。不得使用吗开云体育电动老虎机database.whitelist

collection.whitelist

空字符串

一个可选的以逗号分隔的正则表达式匹配完全限定名称空间MongoDB集合被监控;任何集合不包含在白名单排除在监视。每个标识符的形式开云体育电动老虎机数据库名collectionName。默认情况下,连接器将监视所有集合除外当地的管理开云体育电动老虎机数据库。不得使用吗collection.blacklist

collection.blacklist

空字符串

一个可选的以逗号分隔的正则表达式匹配完全限定名称空间MongoDB集合被排除在监控;任何集合不包含在黑名单监控。每个标识符的形式开云体育电动老虎机数据库名collectionName。不得使用吗collection.whitelist

snapshot.mode

最初的

指定的标准(如运行一个快照。初始同步)启动时的连接器。默认值是最初的,并指定连接器读取快照时没有找到抵消或如果oplog不再包含前面的偏移量。的从来没有选项指定连接器不应该使用快照,相反连接器应该继续尾日志。

field.blacklist

空字符串

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

field.renames

空字符串

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

tasks.max

1

的最大数量的任务应该创建连接器。MongoDB连接器将尝试使用一个单独的任务为每个副本集,所以使用时的默认是可以接受的连接器与单个MongoDB副本集。当使用MongoDB集群分片连接器,我们建议指定的值等于或超过集群中的碎片的数量,因此工作对于每个副本集可以由卡夫卡连接。

initial.sync.max.threads

1

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

tombstones.on.delete

真正的

控制一个墓碑事件是否应该删除后生成的事件。
真正的删除操作是由删除事件和随后的墓碑事件。当只发送一个删除事件。
发射墓碑事件(默认行为)允许卡夫卡完全删除所有事件属于给定关键一旦被删除原始记录。

snapshot.delay.ms

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

snapshot.fetch.size

0

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

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

财产 默认的 描述

max.queue.size

8192年

正整数的值指定的阻塞队列的最大大小改变事件从数据库读取日志放置之前写入卡夫卡。开云体育电动老虎机这个队列可以提供反压力oplog读者时,例如,写入卡夫卡是慢或者卡夫卡是不可用的。事件出现在队列中不包括补偿定期记录下这个连接器。默认为8192,应该超过规定的最大批量大小max.batch.size财产。

max.batch.size

2048年

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

poll.interval.ms

1000年

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

connect.backoff.initial.delay.ms

1000年

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

connect.backoff.max.delay.ms

1000年

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

connect.max.attempts

16

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

mongodb.members.auto.discover

真正的

布尔值,指定地址的mongodb。hosts' are seeds that should be used to discover all members of the cluster or replica set (真正的),或者是否地址(es)mongodb.hosts应该是使用()。默认值是真正的和应该使用在所有情况下除了MongoDB在哪里代理的

source.struct.version

v2

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

heartbeat.interval.ms

0

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

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

heartbeat.topics.prefix

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

控制的主题命名的心跳消息被发送。
这个话题被命名为根据模式< heartbeat.topics.prefix >。< server.name >

sanitize.field.names

真正的当连接器配置显式地指定key.convertervalue.converter参数使用Avro,否则默认

字段名是否消毒坚持Avro命名要求。看到Avro命名为更多的细节。

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。卡夫卡连接也会定期记录最新的抵消,出现在这些更改事件,在一个频率你卡夫卡连接工人配置中指定。如果卡夫卡经纪人不可用,卡夫卡连接工作进程运行连接器只会反复尝试重新连接卡夫卡经纪人。换句话说,连接器的任务将暂停,直到可以恢复连接,此时连接器将恢复他们到底去哪里。

连接器停止时间

如果连接器优雅地停止,副本设置可以继续使用和记录在MongoDB的oplog任何新的变化。连接器重新启动时,它将继续阅读每个副本的oplog组最后一个离开的,记录更改事件所做出的所有更改同时连接器停了下来。如果连接器停止足够长的时间,这样从oplog MongoDB清洗一些操作连接器没有读,然后启动时连接器将执行初始同步。

一个正确配置卡夫卡集群的能力巨大的吞吐量。卡夫卡连接与卡夫卡写的最佳实践,并给予足够的资源也能够处理大量数据库变更事件。开云体育电动老虎机正因为如此,当一个连接器已经重启过了一会儿,它很有可能赶上数据库,尽管速度取决于卡夫卡的功能和性能和体积变化的MongoDB中的数据。开云体育电动老虎机

如果连接器仍然停了足够长的时间,MongoDB会清除旧oplog文件和连接器的最后位置可能会丢失。在这种情况下,当连接器配置了最初的快照模式(默认)终于重新启动,MongoDB服务器将不再有起点和连接器与一个错误就会失败。

MongoDB失去写道

MongoDB有可能失去在具体故障情况下提交。例如,如果主要适用于变化,记录其oplog然后意外崩溃之前,二级节点可能没有有机会读这些变化从主前oplog主坠毁。如果这样一个二次被选为主要,这是oplog丢失过去的变化,旧的主记录,不再有这些变化。

在这些情况下,MongoDB失去改变记录在主的oplog, MongoDB连接器可能可能会或可能不会捕捉这些损失的变化。在这个时候,没有办法防止这种MongoDB的副作用。