错误处理
概述
在此指南中,您可以了解如何处理 MongoDB Kafka 接收连接器中的错误。以下列表显示了导致您的接收连接器出现错误的常见场景
您使用 Avro 序列化写入主题,并尝试使用 Protobuf 反序列化从该主题解码消息
您在不含变更事件文档的消息上使用变更数据捕获处理程序
您对传入文档应用了无效的单条消息转换
当您的下水道连接器遇到错误时,它会执行两个操作
处理错误
当您的连接器遇到错误时,它需要以某种方式处理它。您的下水道连接器在遇到错误时可以执行以下操作
对所有错误停止
默认情况下,当您的下水道连接器遇到错误时,它会终止并停止处理消息。如果您下水道连接器中的任何错误都表明存在严重问题,则这是一个不错的选择。
当您的下水道连接器崩溃时,您必须执行以下操作之一,然后重新启动您的连接器以继续处理消息
允许您的下水道连接器临时容忍错误
更新您的下水道连接器的配置,以允许它处理消息
从您的主题中删除错误消息
您可以通过不指定任何值来让您的下水道连接器在遇到错误时停止,或者向您的连接器配置中添加以下内容errors.tolerance
选项,或者添加以下内容到您的连接器配置
errors.tolerance=none
容忍所有错误
您可以将您的接收连接器配置为容忍所有错误并永不停止处理消息。这是一个快速启动接收连接器的不错选择,但您可能会错过连接器中的问题,因为在出现错误时您不会收到任何反馈。
您可以通过指定以下选项使您的接收连接器容忍所有错误
errors.tolerance=all
警告
有序批量写入可能导致跳过消息
如果您将连接器设置为容忍错误并使用有序批量写入,您可能会丢失数据。如果您将连接器设置为容忍错误并使用无序批量写入,您丢失的数据会少一些。有关批量写入操作的更多信息,请参阅写入模型策略页面.
容忍数据错误
您可以将接收连接器配置为仅容忍数据错误,并停止处理其他所有错误。使用此设置,连接器会将数据错误发送到已配置的死亡信箱队列中。
通过指定以下选项配置接收连接器以仅容忍数据错误
errors.tolerance=data
将写入错误和异常消息写入一个主题
您可以将接收连接器配置为将错误和异常消息写入一个主题,称为死亡信箱队列,以便您进行检查或进一步处理。死亡信箱队列是消息队列系统(如Apache Kafka)中的一个位置,系统将错误消息路由到该位置,而不是崩溃或忽略错误。死亡信箱队列结合了停止程序的反馈与容忍所有错误的持久性,并且是大多数部署的错误处理起点。
通过指定以下选项,使您的接收连接器将所有错误消息路由到死亡信箱队列
errors.tolerance=all errors.deadletterqueue.topic.name=<name of topic to use as dead letter queue>
如果您想包含错误的具体原因以及异常消息,请使用以下选项
errors.deadletterqueue.context.headers.enable=true
要了解有关死信队列的更多信息,请参阅Confluent指南中的《死信队列》:死信队列。
要查看另一个死信队列配置示例,请参阅死信队列配置示例。
要了解您的连接器定义的异常以及将其作为上下文头写入死信队列的异常,请参阅批量写入异常。
记录错误
您可以将可容忍和不可容忍的错误记录到日志文件中。点击选项卡查看如何记录错误
以下默认选项使Kafka Connect仅将其应用程序日志中的不可容忍错误写入
errors.log.enable=false
以下选项使Kafka Connect将其应用程序日志中的可容忍和不可容忍错误都写入
errors.log.enable=true
如果您想记录有关消息的元数据,例如消息的主题和偏移量,请使用以下选项
errors.log.include.messages=true
获取更多信息,请参阅 Confluent 关于使用 Kafka Connect 进行 日志记录的指南。
在连接器级别处理错误
数据源连接器提供选项,允许您在连接器级别配置错误处理。选项如下
Kafka Connect 选项 | MongoDB Kafka 连接器选项 |
---|---|
errors.tolerance | mongo.errors.tolerance |
errors.log.enable | mongo.errors.log.enable |
如果您想使连接器对 MongoDB 错误和 Kafka Connect 框架错误做出不同的响应,则应使用这些选项。
有关更多信息,请参阅以下资源