View

 FlowFile은 NiFi에서 처리되는 기본적인 단위이다. FlowFile은 처리하고자 하는 데이터와 그 데이터를 처리할 때 필요한 속성 값을 가리키고 있다. FlowFile은 실제 데이이것은 데이터와 속성 값을 가지고 있으며, NiFi Processor에서 데이터 처리를 위해서 사용한다.

FlowFile의 구성 요소

 Processor 에서 생성/수정하는 FlowFile들은 Processor가 어떻게 FlowFile을 처리하냐에 따라서 properties와 event에 대한 정보가 달라진다. 또한 FlowFile의 처리를 위해 반드시 필요한 property 값들도 있기 때문에 flow를 구성할 때 서로 호환되는 process간에 연결을 하거나, 각 processor에 맞는 값들을 맞춰주기 위한 작업을 별도로 수행해야 한다.  

 FlowFile이라는 단어가 우리가 일반적으로 생각하는 파일과 같이 disk에 저장되는 것이라고 생각하게 만들지만, 사실 그런 파일이라기 보다 객체에 가까운 의미로 생각된다. FlowFile이 저장되는 주요한 위치는 두 곳인데, WAL(Write-Ahead-Log)가 저장되는 FlowFile Repository와 HashMap 형태로 저장되는 memory영역이다. 


 Map에 의해서 참조되는 Memory상의 객체들은 flow에서 사용되는 FlowFile(processor에서 사용되는 값과, connection queue에 저장되어 있는)과 같다. FlowFile 객체들은 memory상에 존재하기 때문에 Processor들은 ProcessSession을 통해 connection queue로부터 flow file을 가져와서 처리하게 된다. 

  FlowFile의 변경이 생기는 경우 변경사항들은 FlowFile Repository의 WAL(write ahead log) 형태로 Disk에 저장되고 memory에 있는 object들은 WAL 이 정상적으로 쓰여진 후에 그 변경사항에 따라서 수정이 된다. 이러한 방법은 시스템이 빠르게 FlowFile들을 처리할 수 있게하면서 변경사항의 이력을 보여주고 commit시에 어떻게 처리될 것인지 추적할 수 있게 된다. 이렇게 WAL파일을 먼저 쓰는 것은 일반적인 DB에서 일관성 및 지속성이 고려되는 시스템에서 일반적으로 적용되는 방법이다.

여기에 추가로 FlowFile 'swapping' 이라는 개념도 존재한다. 이것은 많은 FlowFile들이 connectionQueue에 있을 때 nifi.queue.swap.threshold 값을 넘을때 발생한다. 가장 낮은 우선순위를 갖고 있는 FlowFile들은 직렬화되어서 swap file로 disk에 쓰이게 된다. 10000개 단위로 쓰인다. 이렇게 swap file로 떨어진 FlowFile들은 memory의 hash map에서 제거되고, memory에서 다시 swap 할 FlowFile들의 대기열을 구성한다. FlowFile이 disk로 swap 되면 Flowfile repository에 알림이 전송되고 Swap File 목록이 유지되게 된다. 시스템이 checkpoint 때 snapshot을 생성하면 swap out 된 파일들이 포함하게 된다. swap file들은 다시 swap in 되고 FlowFile들이 hash map 뒤에 붙게 된다. 이러한 swapping 기술로 시스템의 메모리 제한과 관계없이 NiFi는 수백만 개의 FlowFile에 대해서 빠르게 처리할 수 있게 되는 것이다. 


 이러한 방식으로 FlowFile이 구성되었기 때문에, FlowFile은 중간에 문제가 발생하거나 flow를 재현해야 하는 일이 생기는 경우 flow에 변화가 없다면 재실행 후 동일한 결과를 얻을 수 있다. 그리고 모든 데이터들에 대해서 memory 상에서 유지하고 있지 않기 때문에, 처리 데이터에 대한 OS영역의 리소스 제한에도 잘 동작할 수 있다. (merge 작업 수행 시 많은 FlowFile들의 content를 모두 memory에 올려야 함으로 OS 영역 메모리를 고려해야 한다). 추가적으로 실제 WAL, snapshot, swap file들이 disk 상에 저장되기 때문에 각 repository에 대한 충분한 공간을 확보하는 것이 중요하다. 

Share Link
reply
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31