NFS에서 Kafka 워크로드로의 어리석은 이름 변경 문제에 대한 NetApp 솔루션
카프카는 기본 파일 시스템이 POSIX 호환이라는 가정 하에 구축되었습니다(예: XFS 또는 Ext4). 카프카 리소스 재조정은 애플리케이션이 파일을 계속 사용하는 동안 해당 파일을 제거합니다. POSIX 호환 파일 시스템에서는 unlink가 계속 진행됩니다. 하지만 파일에 대한 모든 참조가 사라진 후에야 파일을 제거합니다. 기본 파일 시스템이 네트워크에 연결되어 있으면 NFS 클라이언트가 연결 해제 호출을 가로채서 워크플로를 관리합니다. 연결 해제되는 파일에 보류 중인 열려 있는 작업이 있기 때문에 NFS 클라이언트는 NFS 서버로 이름 변경 요청을 보내고, 연결 해제된 파일을 마지막으로 닫을 때 이름이 변경된 파일에 대한 제거 작업을 실행합니다. 이러한 동작은 일반적으로 NFS Silly Rename이라고 불리며, NFS 클라이언트에 의해 조정됩니다.
NFSv3 서버의 저장소를 사용하는 모든 Kafka 브로커는 이러한 동작으로 인해 문제에 직면합니다. 그러나 NFSv4.x 프로토콜에는 서버가 열려 있지만 연결되지 않은 파일에 대한 책임을 맡을 수 있도록 하여 이 문제를 해결하는 기능이 있습니다. 이 옵션 기능을 지원하는 NFS 서버는 파일을 열 때 NFS 클라이언트에 소유권 기능을 전달합니다. 그러면 NFS 클라이언트는 보류 중인 열기가 있는 경우 연결 해제 관리를 중단하고 서버가 흐름을 관리하도록 허용합니다. NFSv4 사양은 구현에 대한 지침을 제공하지만 지금까지 이 선택적 기능을 지원하는 알려진 NFS 서버 구현은 없었습니다.
다음은 어리석은 이름 바꾸기 문제를 해결하기 위해 NFS 서버와 NFS 클라이언트에 필요한 변경 사항입니다.
-
NFS 클라이언트(Linux)에 대한 변경 사항. 파일을 여는 시점에 NFS 서버는 플래그로 응답하여 열린 파일의 연결을 해제할 수 있는 기능을 나타냅니다. NFS 클라이언트 측 변경을 통해 NFS 서버가 플래그가 있는 경우 연결 해제를 처리할 수 있습니다. NetApp 이러한 변경 사항으로 오픈 소스 Linux NFS 클라이언트를 업데이트했습니다. 업데이트된 NFS 클라이언트는 이제 RHEL8.7 및 RHEL9.1에서 일반적으로 사용할 수 있습니다.
-
NFS 서버 변경. NFS 서버는 오픈을 추적합니다. 기존에 열려 있는 파일의 연결을 해제하는 작업은 이제 POSIX 의미 체계와 일치하도록 서버에서 관리됩니다. 마지막으로 열린 파일이 닫히면 NFS 서버는 파일의 실제 제거를 시작하여 어리석은 이름 바꾸기 과정을 피합니다. ONTAP NFS 서버는 최신 릴리스인 ONTAP 9.12.1에서 이 기능을 구현했습니다.
NFS 클라이언트와 서버에 위와 같은 변경 사항을 적용하면 Kafka는 네트워크에 연결된 NFS 스토리지의 모든 이점을 안전하게 얻을 수 있습니다.