La comprensión del negocio flume del entrevistador

Concepto de transacción de canal

Cuando Flume procesa datos, hay dos lugares involucrados en el flujo de datos. Una es que cuando la Fuente coloca datos en el Canal, implica el envío de datos (transacción de transferencia). La otra es que Sink extrae datos de Channel, lo que también implica el envío de datos. Cuando se trata de operaciones por lotes de datos, las transacciones se utilizan para garantizar la coherencia e integridad de los datos.

Todos sabemos que Flume es una herramienta de transferencia de archivos de registro, el proceso de transferencia pasará por tres pasos:

1. Lea los datos de la fuente de datos (puerto de red, disco local, etc.) a
través de la fuente 2. Pase los datos al canal a través de la fuente
3. Luego transfiera los datos del canal al receptor, y el receptor transmite los datos al destino (Hdfs).
Por supuesto, el proceso de transmisión de datos no se limita a estos tres pasos. Flume en realidad transmite datos, por lo que se debe considerar la integridad de los datos durante la transmisión de datos. Es probable que Flume transmita datos debido a velocidades de transmisión inconsistentes. Causa que el canal esté lleno, lo que resulta en pérdida de datos.

El canal es pasivo, el lado de la fuente pone datos activamente en el canal y el lado del receptor extrae activamente los datos del canal, por lo que el canal se opera de forma pasiva.

Generalmente, el canal usa MemoryChannel, que es memoria. Un corte de energía causará pérdida de datos. Filechannel (disco) también se puede usar. Filechannel es lento, pero proporciona recuperación de datos a nivel de registro. Sin embargo, MemoryChannel no perderá datos cuando se encienda. Generalmente, el canal de memoria también está bien.

Cuando la fuente transmite datos al canal, no se transmite directamente al canal. También hay una transacción de colocación en el medio. Por supuesto, no se transmite directamente desde el canal al receptor, y hay una transacción de recepción en el medio.

1. Poner el
proceso de transacción : Flume establece un búfer de bloque en la memoria, y todos los datos extraídos por Source se empaquetarán en Event y se acumularán en putList. Cuando alcanza un cierto nivel (una cierta cantidad, no se extraen nuevos datos durante un cierto período de tiempo), intentará enviarlo al canal. Al enviar, se realizará un doCommit para verificar si hay suficiente espacio en el canal para acomodar todos los datos en putList. Si hay doCommit, tendrá éxito, y todos los datos en putList ingresarán al canal y borrarán los datos en putList. Si el espacio en el canal no es suficiente para acomodar los datos en putList durante la detección, la transacción se revertirá (la llamada reversión es esperar un cierto período de tiempo antes de intentar enviar los datos en putList al canal), Flume Hay dos tipos de fuentes, una se llama Fuente Pullable, TailDirSource es este tipo de Fuente, este tipo de Fuente está extrayendo datos de forma activa, en lugar de ser empujada por la fuente de datos, este tipo de Fuente no está en proceso de retroceso esperando. Continúe extrayendo datos. También hay una fuente basada en eventos. La fuente de datos envía activamente los datos de esta fuente. Cuando la transacción se revierte, dejará de recibir datos. En este momento, es posible que se pierdan datos. Esta pérdida no es Ocurre dentro de Flume, pero entre Flume y la fuente de datos. Las fuentes más utilizadas son las primeras. En pocas palabras, este proceso se puede dividir en tres pasos:
doPut: escribe primero los datos en el búfer temporal putList.
doCommit: comprueba si las colas de memoria del canal están suficientemente fusionadas.
doRollback: cuando el espacio de la cola de memoria en el canal es insuficiente, deshaga los datos.
Inserte la descripción de la imagen aquí
2.acabar asuntos

Proceso: Sink extrae datos del canal y los coloca en takeList, y envía los datos a un lugar designado, como HDFS. La comprobación de doCommit también se realiza al enviar. Si todos los datos se envían correctamente, los datos en el búfer temporal takeList se borrarán. Si la transmisión no tiene éxito, se realizará una reversión, lo que equivale a volver a poner los datos en el Canal. Estrictamente hablando, los datos no abandonan realmente el canal, pero se da una referencia. Los datos en el canal solo se limpiarán cuando tenga éxito, y luego el canal hará espacio. Si la lista de tomas no se envía correctamente, se destruirá. (Destruido porque los datos extraídos dos veces pueden ser diferentes, como algunos datos acumulados en el Canal). Simplemente hablando, se divide en tres pasos:
doTake : primero escribe los datos en el búfer temporal takeList y envía los datos a HDFS.
doCommit: si todos los datos se envían correctamente, se borrará el buffer temporal takeList.
doRollback: si ocurre una excepción durante el proceso de envío de datos, el rollback devuelve los datos en el búfer temporal takeList a la cola de memoria en el canal.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_42706464/article/details/108865343
Recomendado
Clasificación