Solución de NetApp para el problema del cambio de nombre en cargas de trabajo de NFS a Kafka
Kafka está construido bajo el supuesto de que el sistema de archivos subyacente es compatible con POSIX: por ejemplo, XFS o Ext4. El reequilibrio de recursos de Kafka elimina archivos mientras la aplicación aún los está utilizando. Un sistema de archivos compatible con POSIX permite que la desvinculación continúe. Sin embargo, solo elimina el archivo después de que desaparezcan todas las referencias al mismo. Si el sistema de archivos subyacente está conectado a la red, entonces el cliente NFS intercepta las llamadas de desvinculación y administra el flujo de trabajo. Debido a que hay aperturas pendientes en el archivo que se va a desvincular, el cliente NFS envía una solicitud de cambio de nombre al servidor NFS y, en el último cierre del archivo desvinculado, emite una operación de eliminación en el archivo renombrado. Este comportamiento se conoce comúnmente como cambio de nombre tonto de NFS y está orquestado por el cliente NFS.
Cualquier agente de Kafka que utilice almacenamiento de un servidor NFSv3 tendrá problemas debido a este comportamiento. Sin embargo, el protocolo NFSv4.x tiene características para abordar este problema al permitir que el servidor se haga responsable de los archivos abiertos y no vinculados. Los servidores NFS que admiten esta función opcional comunican la capacidad de propiedad al cliente NFS en el momento de la apertura del archivo. El cliente NFS luego detiene la gestión de desvinculación cuando hay aperturas pendientes y permite que el servidor administre el flujo. Aunque la especificación NFSv4 proporciona pautas para la implementación, hasta ahora no se conocía ninguna implementación de servidor NFS que admitiera esta característica opcional.
Se requieren los siguientes cambios para el servidor NFS y el cliente NFS para solucionar el problema del cambio de nombre tonto:
-
Cambios en el cliente NFS (Linux). En el momento de abrir un archivo, el servidor NFS responde con una bandera, indicando la capacidad de manejar la desvinculación de los archivos abiertos. Los cambios del lado del cliente NFS permiten que el servidor NFS maneje la desvinculación en presencia del indicador. NetApp ha actualizado el cliente NFS Linux de código abierto con estos cambios. El cliente NFS actualizado ahora está disponible de forma general en RHEL8.7 y RHEL9.1.
-
Cambios en el servidor NFS. El servidor NFS realiza un seguimiento de las aperturas. La desvinculación de un archivo abierto existente ahora es administrada por el servidor para que coincida con la semántica POSIX. Cuando se cierra el último archivo abierto, el servidor NFS inicia la eliminación real del archivo y evita así el tonto proceso de cambio de nombre. El servidor NFS de ONTAP ha implementado esta capacidad en su última versión, ONTAP 9.12.1.
Con los cambios mencionados anteriormente en el cliente y el servidor NFS, Kafka puede aprovechar de forma segura todos los beneficios del almacenamiento NFS conectado a la red.