Coordinator :
Cluster 를 이루는 노드들을 관리하는 노드. Zookeeper 에 의해 노드들 중 하나가 Coordinator 로 선출됨.
Cluster 에 새로운 노드가 생기면 그 새로운 노드에 최신 Flow 를 제공함.
Coordinator 가 Cluster 에서 사라지면 Zookeeper 가 남아있는 노드들 가운데 하나를 다시 Coordinator 로 선출함.
Node :
Cluster 를 이루는 Nifi. 실제 작업을 수행함
모든 노드는 각자의 환경에서 동일한 Flow 를 실행함.
예를 들어 Server 1, 2, 3 위에 Nifi 노드가 하나씩 올라가 있고, A Processor 를 실행한다고 할 때,
Server 1 에서 노드 1이 A Processor 를 실행하고,
Server 2 에서 노드 2가 A Processor 를 실행하고,
Server 3 에서 노드 3이 A Processor 를 실행한다.
Processor 에서 다루는 데이터는 디스크에 저장된다.
Primary :
독자적으로 Processor 를 실행함.
즉, 특정 Processor를 다른 노드에선 실행하지 않고, Primary 에서만 실행하게 할 수 있음.
예를 들어 외부 네트워크로부터 데이터를 받아오는 Processor 가 있다고 하자.
모든 노드들이 해당 Processor 를 실행하면 경쟁 상태가 되는 문제가 생길 수 있기 때문에
해당 Processor 는 Primary 에서만 사용할 수 있도록 하고,
받은 데이터는 (round robin 등의 정책을 통해) 전체 노드에 나눠주고(로드 밸런싱) 병렬처리 함.
(물론 해당 방법은 Primary 를 사용하는 대신 singlenode Nifi 에서 실행할 수 있음. 관리자 마음대로 구성하면 됨)
Primary 가 Cluster 에서 사라지면 Zookeeper 가 남아있는 노드들 가운데 하나를 다시 Primary 로 선출함.
Heart beat :
각 노드들은 (기본적으로) 5초마다 Coordinator 에게 heart beat 를 보내어 "나 살아있다" 라고 알려줌
만약 모종의 이유에 의해 40초(기본 5초 * 8번) 동안 heart beat 를 보내지 못하는 노드가 생기면
Coordinator 는 해당 노드를 Cluster 에서 제외시켜버림.
왜 노드를 끊어버리느냐?
이유는 각 노드들이 똑같은 Flow 를 갖고 있는지 확인 할 수 없기 때문(동기화를 할 수 없기 때문에)
어떤 노드가 네트워크가 끊겨 heart beat 를 보내지 못하는 상황인데,
Nifi Flow 가 업데이트 되었다면 해당 노드는 이 업데이트를 받지 못하여 오래된 Flow 를 갖게 될 것임.
이러한 동기화 문제가 있기 때문에 heart beat 를 보내지 못하는 노드를 Cluster 에서 제외시키는 것
(연결이 끊어진 노드는 WebUI (bullbulletin) 에 게시되므로 우리가 직접 눈으로 확인 가능)
끊긴 노드의 네트워크가 늦게나마 되살아나서 heart beat 를 다시 보내면,
Coordinator 가 해당 노드를 인식하고 다시 Cluster 에 참여시킴.
(실제로 Cluster 에서 node 하나가 사라지면 Processor 업데이트가 불가능하더라)
각 노드들은 어떤 노드가 Coordinator 인지 알고 heart beat 를 보내는 걸까?
Zookeeper 를 통해 할 수 있다.
Zookeeper 가 "얘가 Coordinator 야! 얘한테 heart beat 보내면 돼!" 라는 정보를 Znode 로 저장하고 있음.
Offload :
연결이 끊긴 노드가 실행하고 있던 Flow Files 들은 어떻게 처리 할 것인가?
그 땐 해당 노드를 offload 시키면 됨.
그럼 해당 노드가 갖고 있던 Flow Files 이 일 잘 하고 있는 다른 활성 노드들로 넘어가게 됨.
물론 offload 된 노드 역시 재시작 시키고 Cluster 에 다시 참여시킬 수 있음.
nifi.apache.org/docs/nifi-docs/html/administration-guide.html#terminology
'NiFi' 카테고리의 다른 글
[Nifi] 로그 출력 레벨 바꾸는 법 링크 (0) | 2020.09.21 |
---|---|
[Nifi] Bootstrap 설명 링크 (1) | 2020.09.17 |
[Nifi] Clustering 의 필요성 (0) | 2020.09.16 |
[Nifi] Docker 로 Zookeeper + Nifi Cluster 구축하는 방법 연구 (1) | 2020.09.08 |
[Nifi] sample templates 링크 (0) | 2020.09.07 |