Overview
En esta guía, puedes aprender cómo gestionar errores en tu conector de sumidero MongoDB Kafka. La siguiente lista muestra algunos escenarios comunes que causan que tu conector de destino experimente un error:
Escribe en un tema utilizando la serialización Avro e intentas decodificar tus mensajes de ese tema utilizando la deserialización Protobuf
Utiliza un controlador de captura de datos de cambios en un mensaje que no contiene documentos de eventos de cambio
Aplica una transformación de mensaje único no válida a los documentos entrantes
Cuando tu conector de sumidero encuentra un error hace dos acciones:
Gestionar errores
Cuando el conector encuentra un error, debe gestionarlo de alguna manera. Su conector de sink puede hacer lo siguiente en respuesta a un error:
Detener ante cualquier error predeterminado
Detener ante cualquier error
Por defecto, tu conector de destino termina y deja de procesar mensajes cuando encuentra un error. Esta es una buena opción si cualquier error en el conector de destino indica un problema grave.
Cuando tu conector de destino se bloquea, debes realizar una de las siguientes acciones y luego reiniciar el conector para reanudar el procesamiento de mensajes:
Permite que tu conector de destino tolere temporalmente errores
Actualiza la configuración del conector de sumidero para que pueda procesar el mensaje
Remueve el mensaje erróneo de tu tema
Puede hacer que su conector de salida se detenga cuando encuentre un error al no especificar ningún valor para el errors.tolerance opción, o añadiendo lo siguiente a tu configuración de conector:
errors.tolerance=none
Tolerar todos los errores
Puede configurar el conector del destino para que tolere todos los errores y nunca deje de procesar mensajes. Esta es una buena opción para poner en funcionamiento tu conector de lavabo rápidamente, pero corres el riesgo de pasar por alto problemas en tu conector, ya que no recibirás ningún aviso si algo sale mal.
Puedes permitir que tu conector de salida tolere todos los errores especificando la siguiente opción:
errors.tolerance=all
Advertencia
Los guardados en bloque ordenados pueden generar mensajes omitidos
Si configuras tu conector para tolerar errores y utilizas guardados por lotes ordenados, podrías perder datos. Si configuras tu conector para tolerar errores y usar guardados masivos desordenados, perderás menos datos. Para obtener más información sobre las operaciones de escritura masiva, consulta la Guardar la página de Estrategias de modelos.
Tolerar errores en los datos
Puede configurar su conector de sumidero para tolerar solo errores de datos y detener el procesamiento para todos los demás. Con este ajuste, el conector envía errores de datos a la fila de letra muerta, si se ha configurado una.
Configura tu conector de destino para tolerar únicamente errores de datos, especificando la siguiente opción:
errors.tolerance=data
Guardar errores y mensajes erróneos en un tema
Puedes configurar tu conector sumidero para que escriba errores y mensajes erróneos en un tema, llamado fila de letra muerta, para que los inspecciones o proceses más a fondo. Una fila de letra muerta es una ubicación en sistemas de encolamiento de mensajes como Apache Kafka, donde el sistema redirige los mensajes erróneos en lugar de bloquearse o ignorar el error. Las filas de letra muerta combinan la retroalimentación de detener el programa con la durabilidad de tolerar todos los errores y son un buen punto de partida para el manejo de errores en la mayoría de las implementaciones.
Puede configurar su conector de sumidero para dirigir todos los mensajes erróneos a una fila de letra muerta especificando las siguientes opciones:
errors.tolerance=all errors.deadletterqueue.topic.name=<name of topic to use as dead letter queue>
Si deseas incluir el motivo específico del error, así como el mensaje erróneo, utiliza la siguiente opción:
errors.deadletterqueue.context.headers.enable=true
Para obtener más información sobre las filas de letra muerta, consulte la guía de Confluent sobre filas de letra muerta.
Para ver otro ejemplo de configuración de la fila de letra muerta, consulte Ejemplo de configuración de la fila de letra muerta.
Para aprender sobre las excepciones que define tu conector y que escribe como encabezados de contexto en la fila de letra muerta, consulta Excepciones de escritura por lotes a granel.
Errores de registro
Puedes registrar los errores tolerados y no tolerados en un archivo de registro. Haz clic en las pestañas para ver cómo registrar errores:
La siguiente opción por defecto hace que Kafka Connect escriba solo los errores no tolerados en su registro de aplicación:
errors.log.enable=false
La siguiente opción hace que Kafka Connect guardar tanto los errores tolerados como los no tolerados en su registro de aplicaciones:
errors.log.enable=true
Si deseas registrar metadatos sobre tu mensaje, como el tema y el offset de tu mensaje, utiliza la siguiente opción:
errors.log.include.messages=true
Para obtener más información, consulte la guía de Confluent sobre registro (logging) con Kafka Connect.
Gestionar errores a nivel de Connector
El sink connector proporciona opciones que permiten configurar el manejo de errores a nivel de conector. Las opciones son las siguientes:
Opción de Kafka Connect | Opción de conector de Kafka para MongoDB |
|---|---|
|
|
|
|
Quieres usar estas opciones si quieres que tu conector responda de manera diferente a los errores relacionados con MongoDB que a los errores relacionados con el marco de trabajo de Kafka Connect.
Para obtener más información, consulta los siguientes recursos: