| 저장소 | 담는 것 | 사라지면 |
|---|---|---|
| FlowFile Repository | FlowFile 의 메타데이터와 큐 위치 | 큐에 있던 FlowFile 을 잃는다 |
| Content Repository | FlowFile 의 실제 내용 | 데이터 자체를 잃는다 |
| Provenance Repository | 이력(어떤 처리를 거쳤는지) | 추적만 못 하고 데이터는 유지된다 |
| Database Repository | 플로우 설정 이력·사용자 정보 | 설정 이력을 잃는다 |
용량 문제가 생기는 곳은 대개 콘텐츠 저장소와 프로비넌스 저장소다.
콘텐츠 저장소 사용량은 세 가지의 합이다.
첫째, 큐에 남아 있는 FlowFile 의 내용이다. 이것은 지울 수 없다. 처리하거나 큐를 비워야 사라진다.
둘째, 아카이브다. 처리가 끝난 내용을 곧바로 지우지 않고 보관해 두었다가 프로비넌스 화면에서 내용을 다시 볼 수 있게 하는 기능이다. 사용량이 70~80 퍼센트 언저리에서 더 내려가지 않는 가장 흔한 원인이 이것이다. 정리 기준이 사용률 이기 때문에, 기준까지 채운 뒤에는 그 선을 유지한다.
셋째, 아직 정리되지 않은 클레임이다. 여러 FlowFile 이 하나의 콘텐츠 클레임 파일을 나눠 쓰므로, 그 안의 한 건이라도 참조 중이면 파일 전체가 남는다.
nifi.content.repository.archive.enabled=true
nifi.content.repository.archive.max.retention.period=12 hours
nifi.content.repository.archive.max.usage.percentage=50%
nifi.content.claim.max.appendable.size=1 MB
max.usage.percentage 를 낮추면 그만큼 사용률이 내려간다. 모니터링 임계가 80 퍼센트인데 이 값이 50 퍼센트면 경보를 피할 수 있다. 아카이브를 아예 끄면 프로비넌스에서 내용 보기(Content View)와 재생(Replay)을 쓰지 못한다. 문제 분석 시 유용한 기능이므로 끄기보다 비율을 낮추는 편을 권한다.
nifi.properties 변경은 재기동해야 반영된다. 운영 중에 즉시 줄일 방법은 큐를 비우거나 처리를 끝내는 것뿐이다. 저장소 디렉터리의 파일을 손으로 지우면 참조가 깨져 FlowFile 이 유실되고 오류가 발생한다. 절대 하지 않는다.
이력은 별도 정책으로 관리한다.
nifi.provenance.repository.max.storage.time=24 hours
nifi.provenance.repository.max.storage.size=10 GB
nifi.provenance.repository.rollover.time=30 secs
nifi.provenance.repository.index.shard.size=500 MB
nifi.provenance.repository.indexed.attributes=
시간과 크기 중 먼저 걸리는 쪽이 적용된다. 이력 조회를 거의 쓰지 않는데 디스크가 부족하면 보관 크기를 줄이는 것이 가장 효과가 빠르다. indexed.attributes 에 속성을 많이 넣으면 색인이 커지므로 검색에 실제로 쓰는 속성만 넣는다.
사용량이 높은 것이 처리 지연 때문인지 아카이브 때문인지 먼저 가른다.
Summary 화면(우측 상단 메뉴)의 Connections 탭에서 큐가 큰 연결을 정렬해 본다. 큐가 거의 비어 있는데 디스크만 차 있으면 아카이브가 원인이다. 특정 연결에 수만 건이 쌓여 있으면 그 하류가 병목이다.
du -sh /data/nifi/content_repository /data/nifi/provenance_repository
du -sh /data/nifi/content_repository/*/archive 2>/dev/null | sort -h | tail
/opt/nifi/bin/nifi.sh diagnostics --verbose /tmp/nifi-diag.txt
처리 속도 자체는 프로세서의 5 분 통계(In · Out · Read · Write)와 프로비넌스 이벤트 발생 빈도로 본다. 들어온 건수와 나간 건수가 비슷하면 흐르고 있는 것이고, In 만 늘면 정체다.
저장소는 서로 다른 물리 디스크에 두는 것이 원칙이다. 특히 콘텐츠와 프로비넌스를 같은 디스크에 두면 I/O 경합이 심하다.
nifi.flowfile.repository.directory=/data1/flowfile_repository
nifi.content.repository.directory.default=/data2/content_repository
nifi.provenance.repository.directory.default=/data3/provenance_repository
콘텐츠 저장소는 여러 디렉터리를 지정해 분산할 수 있다. nifi.content.repository.directory.<이름> 형식으로 여러 줄을 두면 된다.