El blog de tecnología de Uber publicó un artículo, Introducción al almacenamiento por niveles de Kafka en Uber, con el objetivo de maximizar la retención de datos con menos agentes de Kafka y menos memoria. Esto permite tiempos de retención de mensajes más largos en varias aplicaciones comerciales.
Una solución común es integrar el almacenamiento externo manualmente, sincronizando periódicamente los datos con el sistema externo. Sin embargo, esto implica importantes esfuerzos de desarrollo y mantenimiento, como determinar cómo guardar los datos, configurar la frecuencia de sincronización, activar procesos, recuperar datos y utilizar la indexación.
Por lo tanto, Uber propuso una solución que encapsula la lógica del almacenamiento externo, haciéndolo plug-and-play con configuraciones simples. Esta función se está desarrollando en colaboración con la Fundación Apache y estará disponible en versiones futuras.
Es importante comprender que Kafka es un componente de cola de mensajes (MQ) de solo agregar con capacidades de rendimiento muy alto. Kafka almacena registros en el almacenamiento local del corredor y los usuarios pueden configurar el tiempo de retención o el tamaño del registro. En mi empresa anterior (Lenovo), usábamos Flink para consumir datos continuamente. Un gran volumen de datos haría que Kafka excediera el límite de almacenamiento en disco, lo que provocaría fallas en la escritura de datos y errores comerciales. Para reducir costos, en lugar de implementar más máquinas, solo pudimos ajustar el tiempo de retención.
Además, si cada empresa desarrollara su propio sistema para guardar datos antiguos en un almacenamiento externo, implicaría una gran cantidad de trabajo de desarrollo. También habría numerosos problemas relacionados con la sincronización y la coherencia de los datos.
La esencia es transformar el Broker añadiéndole gestión remota de registros y almacenamiento.
RemoteLogManager: gestiona el ciclo de vida de los segmentos de registros remotos, incluida la copia, la limpieza y la recuperación.
RemoteStorageManager: administra acciones para segmentos de registros remotos, incluida la copia, la recuperación y la eliminación. Los metadatos asociados con los segmentos de registros remotos incluyen información sobre las compensaciones de inicio y fin del segmento, marcas de tiempo, instantáneas del estado del productor y puntos de control de la época del líder.
RemoteLogMetadataManager realiza un seguimiento de estos metadatos para garantizar que el sistema sepa dónde comienza y termina cada segmento, y otra información crítica necesaria para la recuperación y administración de datos.
RemoteLogMetadataManager: gestiona el ciclo de vida de los metadatos para segmentos de registros remotos con gran coherencia.
Entre ellos, RemoteLogManager actúa como un componente de control, conectándose directamente al disco en el Broker para recuperar los datos leídos. También es responsable de devolver la llamada a los datos remotos. RemoteStorageManager es la entidad que opera con los datos y RemoteLogMetadataManager es responsable de administrar los metadatos.
Resumen de las tres acciones en el almacenamiento por niveles de Kafka
Copiar segmentos al almacenamiento remoto
Un segmento de registro se considera elegible para copiarse en almacenamiento remoto si su desplazamiento final (el desplazamiento del último mensaje en el segmento) es menor que el último desplazamiento estable de la partición.(Último desplazamiento estable (LSO): el desplazamiento más alto para lo cual todas las réplicas sincronizadas reconocen completamente todos los mensajes anteriores, lo que garantiza que no se pierdan datos.)RemoteStorageManager maneja la copia de segmentos de registro junto con sus índices asociados, marcas de tiempo, instantáneas de productor y caché de época líder.
Limpieza de segmentos remotos
Los datos remotos se limpian a intervalos regulares calculando los segmentos elegibles mediante un grupo de subprocesos dedicado. Esto es diferente de la limpieza asincrónica de los segmentos de registro locales. Cuando se elimina un tema, la limpieza de los segmentos de registro remoto se realiza de forma asincrónica y no bloqueará la operación de eliminación existente ni recreará un tema nuevo.
Obteniendo segmentos del almacenamiento remoto
RemoteLogManager determina el segmento remoto de destino en función del desplazamiento deseado y la época del líder examinando el almacén de metadatos mediante RemoteLogMetadataManager. Utiliza RemoteStorageManager para encontrar la posición dentro del segmento y comenzar a buscar los datos deseados.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3