<배경설명>
- 특정 폴더 안에 백만개 이상의 이미지 파일이 존재함
- 해당 파일들은 원본을 보존하고 복사해야 하는데, 시스템 성능을 고려해서 압축이 필요함
- 압축파일의 형식은 'msgrok_<압축한 시각>.tar.gz'로 하려고 함
<세부 NiFi Processor>
- 전체 흐름도
- ListFile & FetchFile
원본 디렉터리에서 파일을 삭제하지 않고, 파일을 중복되게 하지 않기 위해 ListFile과 FetchFille 프로세서를 적용
- MergeContent
FetchFile로 가져온 파일들을 하나로 묶음 (tar의 역할)
여기서는 TAR로 묶었지만, 다양한 묶는 방법을 지정할 수 있음.
Minimum Numbers of Entries 와 Minimum Group Size를 조절하면,
한번 묶을 때 최소 파일의 갯수와 용량을 지정할 수 있다.
(즉, 해당 기준값 이하에서는 기다린다는 뜻)
- CompressContent
Compress는 말 그대로, 압축을 시키는 프로세서임.
여기서는 tar.gz로 압축하기 위해 'gzip'을 선택하였고,
이미지 파일의 특성 상 압축률이 낮아서 Compression Level(압축률)은 그냥 0으로 설정하였다.
gzip 뿐만 아니라 다양한 압축을 지원한다
- UpdateAttribute
압축파일(msgrok_YYYYMMDDHHmmss.tar.gz)의 이름을 지정한다.
filename이라는 속성을 'msgrok_${now():format('yyyyMMddHHmmss')}.tar.gz' 로 부여한다.
* ${now()} : 현재 시스템의 시각
* YYYY : 연도(ex. 2023), MM : 월 (ex. 03 = 3월), dd : 일, HHmmss : 시각(ex. 233500 = 23시 35분 00초)
<작업후기>
- 쉘 스크립트로 로그를 확인하는 것보다, GUI 인터페이스로 간편하게 진행현황을 확인할 수 있어서 좋음
- 각 프로세서별 'SCHEDULING' 이 가능해서, 시스템 로드를 조절할 수 있다는게 최고 장점인 듯
특히, ListFile → FetchFile 단계에서는 list한 파일의 목록만 가지고 있으므로, 용량적으로는 부하가 적다.
FetchFile 프로세서가 실제로 파일을 읽고/가져오므로 FetchFile의 스케쥴링을 그림과 같이 하면,
30초 마다 10개의 파일을 가져오게 된다.
* NiFi에서 CRON은 초/분/시/일/월/요일 순이다! (맨 앞자리가 초 라서 서버의 cron과 헷갈릴 수 있음)