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