왜 Nifi 를 Clustering 해서 사용해야 하는가?
무거운 작업을 하거나, 거대한 데이터를 대상으로 작업을 할 때
Nifi node 하나로는 충분하지 않을 수 있음.
이를 해결하기 위해 여러 Server 위에 Nifi 를 설치하여 병렬로 처리할 수는 있지만
interface 가 흩어져있어서 Flow 를 변경하려면 각 Server 에 모두 적용해줘야하며
각 Server 마다 Nifi monitoring 을 해야하는 수고로움이 있음.
Clustering 을 하면 단일 interface 에서 Flow 를 변경할 수 있고
또한 단일 interface 를 통해 Nifi monitoring 이 가능함.
Flow 를 변경하면 각 Nifi node 에 해당 변경 사항이 복제되어 수고로움을 덜 수 있음.
< 왜 클러스터를 사용해야 하는가? >
NiFi 관리자 또는 DFM (DataFlow Manager)가 단일 서버에서 하나의 NiFi 인스턴스를 사용하는 것만으로는
원하는 데이터 양을 처리하기 힘듦.
따라서 여러 대의 Nifi 인스턴스들을 사용.
여러 대를 사용하는 것까진 좋았는데, Flow 변경이나 Nifi 업데이트가 있을 때마다 각 인스턴스들을 일일이 손봐줘야 하고,
또 각 인스턴스마다 따로 따로 모니터링을 해야 함.
위의 두 가지 불편한 사항을 해소하기 위해 Nifi 클러스터를 사용.
클러스터를 사용하면, 각 인스턴마다 동일한 데이터 Flow 를 통해 병렬로 데이터를 처리하고
Flow 변경(한 번만 변경하면 나머지 노드들이 해당 변경 사항을 복제해 감), Nifi 업데이트 등을 손쉽게 처리 가능하며
단일 인터페이스를 통해 모든 노드의 상태를 모니터링 가능.
* Flow 변경은 어떤 노드에서 하든 상관 없음.
특정 노드에서 변경을 하면, 해당 변경 사항이 나머지 노드들에 복사가 되어
전체 노드가 동일하게 변경된 Flow 를 갖게 됨
순수한 NiFi 는 고가용성(High Availability) 를 제공하지 않음.
하지만 외부 시스템을 이용하면 HA 설정이 가능하다고 함
출처 : marklogic.github.io/nifi/performance-considerations#__RefHeading__798_1654017897
클러스터링은 단순히 Nifi 노드를 확장하는 것임.
단지 싱글 노드가 못 하는 작업량을 병렬적으로 함께 처리하기 위해서 클러스터링을 추가 한 것임
클러스터의 각 노드들은 자기 자신에게 할당된 FlowFile 을 처리.
클러스터링은 Zookeeper 의 도움을 받아 가능함.
Zero Master Clustering : Master 가 존재하는 여타 시스템에서는 Master 가 죽으면 전체가 박살나는 SPOF 약점이 있는데,
Nifi 의 경우 코디네이터가 죽어도 다른 노드가 코디네이터가 되어 SPOF 가 없다.
그래서 Zero Master Clustering 이라고 부름.
마스터 대신 코디네이터 가 존재함.
코디네이터는 클러스터 내의 노드 중 하나가 선출되는 것이며 선출은 Zookeeper 가 함.
코디네이터는 노드의 FlowFile 기반으로 해당 노드를 Cluster 에 포함시키거나 포함시키지 않거나 를 결정함
또한 Cluster 내 노드들이 코디네이터에게 heart beat 를 보내는데 heart beat 를 받지 못하는 노드들을 코디네이터가 제거함.
무슨 말인지 모르겠으면 자세하게 적혀있는 아래 페이지 참고.
일반적인 Cluster 내의 노드가 끊어져도 끊어진 노드의 작업을 다른 노드가 대신 맡아주진 않음.
끊어진 노드가 연결되었을 때 해당 노드는 끊어져서 멈춘 곳에서부터 작업을 다시 시작함.
만약 Round Robin Load Balancing 을 사용하는 클러스터라면,
끊어진 노드 내의 큐에 있는 데이터가 멈춰있게 놔두지 않고 재분배 해준다고 함.
재밌네
근거 : nifi.apache.org/docs/nifi-docs/html/user-guide.html#load_balance_strategy
nifi.apache.org/docs/nifi-docs/html/administration-guide.html#why-cluster
marklogic.github.io/nifi/performance-considerations#__RefHeading__796_1654017897
'NiFi' 카테고리의 다른 글
[Nifi] Bootstrap 설명 링크 (1) | 2020.09.17 |
---|---|
[Nifi] Clustering 용어 설명 (0) | 2020.09.17 |
[Nifi] Docker 로 Zookeeper + Nifi Cluster 구축하는 방법 연구 (1) | 2020.09.08 |
[Nifi] sample templates 링크 (0) | 2020.09.07 |
[Nifi] 유용한 정보들 (9) | 2020.09.01 |