用于Apache Kafka的MongoDB连接器1.5版现已上市

122 阅读3分钟

今天,MongoDB发布了1.5版本的Apache Kafka的MongoDB连接器!这篇文章强调了这个新版本的一些关键功能,以及继续提高连接器的整体质量和稳定性

DeleteOne写入模型策略

当消息到达Kafka主题时,MongoDB水槽连接器会读取它们,并且默认情况下会将它们upsert 到水槽配置中指定的MongoDB集群。然而,如果你不想总是颠覆它们呢?这就是写策略的作用,它为你提供了灵活性,可以定义你想对文档做什么。

虽然写策略的概念对连接器来说并不新鲜,但在这个版本中,有一个新的写策略可用,叫做DeleteOneBusinessKeyStrategy 。当一个主题包含识别数据的记录,应该从MongoDB汇中的集合中删除时,这很有用。考虑一下下面的情况。

你经营一家销售时尚面膜的网店。作为架构的一部分,该网站将订单发送到一个Kafka主题 "web-orders",该主题在消息到达时启动了一系列动作,如发送电子邮件确认,并将订单细节插入MongoDB集群中的 "Orders "集合中。

一个订单文件的样本:

{
  _id: ObjectId("6053684f2fe69a6ad3fed028"),
  'customer-id': 123,
  'order-id': 100,
  order: { lineitem: 1, SKU: 'FACE1', quantity: 1 }
}

这个流程很好,但是,当客户取消订单时,我们需要有另一个业务流程来更新我们的库存,发送取消订单的邮件,并从我们的MongoDB水槽中删除订单。在这种情况下,取消的消息被发送到另一个Kafka主题,"canceled-orders"。对于这个主题中的消息,我们不只是想把它倒置到一个集合中,我们想从这个主题中读取消息,并使用文件中的一个字段来识别水槽中要删除的文件。对于这个例子,让我们使用order-id键字段,并使用DeleteOneBusinessKeyStrategy ,定义一个sink连接器,如下所示:

"connector.class": "com.mongodb.kafka.connect.MongoSinkConnector",
  "topics":"FaceMaskWeb.OrderCancel",
  "connection.uri":"mongodb://mdb1",  
  "database":"FaceMaskWeb",
  "collection":"Orders",
  "writemodel.strategy": 
"com.mongodb.kafka.connect.sink.writemodel.strategy.DeleteOneBusinessKeyStrategy",
  "document.id.strategy": 
"com.mongodb.kafka.connect.sink.processor.id.strategy.PartialValueStrategy",
  "document.id.strategy.partial.value.projection.type": "AllowList",
  "document.id.strategy.partial.value.projection.list": "order-id",
  "value.converter":"org.apache.kafka.connect.json.JsonConverter",
  "value.converter.schemas.enable":false,
  "document.id.strategy.overwrite.existing": true

现在当消息到达 "FakeMaskWeb.OrderCancel "主题时,"order-id "字段被用来删除Orders集合中的文档。

例如,使用上面的样本文件,如果我们把这个值放入OrderCancel主题中:

{ “order-id”: 100 }

它将导致订单集合中订单-id和值为100的文档被删除。

Qlik Replicate

Qlik Replicate被公认为是数据复制和摄取方面的行业领导者。有了这个新发布的连接器,你现在可以通过Kafka和Qlik Replicate CDC处理程序,从Oracle、MySQL、PostGres等数据源向MongoDB复制和传输异构数据。

要配置Apache Kafka的MongoDB连接器以消耗Qlik Replicate CDC事件,请使用 "com.mongodb.kafka.connect.sink.cdc.qlik.rdbms.RdbmsHandler "作为变化数据捕获处理器配置参数的值。该处理程序支持插入、刷新、读取、更新和删除事件。

错误的记录报告

Kafka Connect是管理与Kafka部署集成的连接器的服务,它能够将记录写入死信队列(DLQ)主题,如果这些记录不能被序列化或反序列化。从Apache Kafka 2.6版本开始,在sink连接器中增加了对错误报告的支持。这使得汇流连接器有能力在连接器认为记录无效或有问题的情况下将单个记录发送到DLQ。例如,如果你在汇中投射的字段在kafka消息中不存在,或者如果你的汇正在期待一个JSON文档,而消息以不同的格式到达。在这些情况下,一个错误被写入DLQ,而不是连接器失败。

各种改进

与每个版本的连接器一样,我们在不断地改进质量和功能。这个版本也不例外。你还会看到管道错误现在显示在连接日志中,而且汇流排连接器现在可以被配置为写到死信队列中