Data Engineering/NiFi

[ NiFi ] 1. NiFi 의 정의 및 구성요소

쟈누이 2021. 4. 26. 15:50
반응형

 

 

 

https://www.popit.kr/apache-nifi-overview-and-install/

 

1. NiFi 란?


Apache NiFi는 시스템 간 데이터 전달을 효율적으로 처리, 관리, 모니터링 하기에 최적화된 시스템이다. 대량의 데이터를 수집, 처리하기 위해서 만들어졌다. 

  • Dataflow를 쉽게 개발할 수 있고, 시스템 간의 데이터 이동과 내용을 볼 수 있는 UI 제공
  • 실시간 데이터 전송에 필요한 기능 제공
  • 강력한 자원과 권한 관리를 통해 Multi-tenant(여러 조직이 자원을 공유해 사용하는 것) 지원
  • 데이터가 어느 시스템으로부터 왔는지 추적 가능
  • 오픈 소스
  • 여러 NiFi 시스템 간 통신을 지원(site to site)

NiFi는 프로세서를 이용해 수집, 변형, 저장을 여러 단계에 걸쳐서 할 수 있다. 

 

실시간 처리에 장점을 가지고 있으며, 스케쥴러가 있지만 배치작업이 약하다는 단점이 존재한다. 또 간단한 데이터 조작만이 가능해서, 복잡한 연산은 힘들기 때문에 spark 와 storm 과 연동해서 사용한다. 

 

여기서 nifi 는 FBP(Flow-Based Programming) 이라는 개념을 가지고 있는데, FBP 는 사전에 DATA flow 프로세스를 구축한 후, 이를 지속적으로 유지하면서 데이터를 교환하는 프로그래밍 패러다임이라고 이해하면 좋을 것 같다.

 

 

 

 

 

2. NiFi 구성요소


NiFi 의 구성요소는 크게 FlowFile, Connection, Processor 이 세가지로 이루어져 있다. 

 

1) FlowFile

NiFi 가 인식하는 데이터의 단위이며 속성(attribute) 와 내용(content) 로 구성되어 있다. 키/밸류 형태로 데이터의 이동 및 저장 시에 필요한 정보를 수록할 수 있으며, Processor 마다 이동시 복사본이 만들어져 추적이 용이하다. 

 

- Repository

- flowfile repository : flowfile 생성시 키값 내용이 어디에 위치하는지 저장

- content repository :  생성된 내용이 저장

- Processor : FlowFile 을 수집, 변형, 저장하는 기능

 

 

2) Processor

FlowFile 을 수집, 변형, 저장하는 기능을 가지고 있으며, 150 개가 넘는 Processor 를 제공하고 확장이 가능하다.

자주사용하는 프로세서는 http, kafka, db, ftp 관련 프로세서, 속성을 변경하는 updateattribute, 데이터를 합치는 mergecontent, 데이터를 분할하는 split 스리즈, 데이터 타입을 변경하는 convert 임

 

 

 

3) Connection

processor 와 processor 을 연결해, flowfile 을 전달하는 역할을 담당하고 있다. 즉 FlowFile 의 대기열queue) 역할을 하며, fileflow  의 우선순위, 만료, 부하조절 기능도 제한하고 있다. 

 

 

 

3. 아키텍처

( 아키텍처 관련 내용은 dahye-jeong.gitbook.io/til/ 에서 가져왔음을 밝힌다. 자세한 내용은 아래 링크에 있음)


https://nifi.apache.org/docs/nifi-docs/html/images/zero-master-node.png

1) Web Server

 NiFi 는 UI 를 웹서버를 통해 제공하며, 개발자 혹은 관리자는 이를 이용해 DataFlow 개발, 제어, 모니터링이 가능

 

 

2) Flow Controller

Processor 가 어느 간격 또는 시점에 실행되는지 스케쥴링을 담당

 

 

3) Extension

NiFi 가 제공하는 기본 Processor 들 이외에 개발자가 Process를 개발해 확장이 가능

 

 

4) flowfile Repository

Write-Ahead-Log 로 FlowFile 의 속성과 상태값을 저장하는 곳, 시스템 장애시 데이터가 유실되지 않도록 주의해야 함.

 

 

5) Content Repository

FlowFile의 데이터(Content)가 저장되며, 여러 디렉토리에 분석 저장이 가능하다. 이 떄문에 용량이 큰 데이터를 저장할 수 있으며, 단일 디스크의 처리량보다 많은 양을 처리할 수 있다.

 

 

6) Provenance Repository

데이터의 처리 단계별로 FlowFile 데이터를 보관하는 곳으로, 여러 디스크를 지원한다. 이때 각 데이터는 인덱스 되어 검색할 수 있다.

 

 

 

https://nifi.apache.org/docs/nifi-docs/html/images/zero-master-cluster.png

1) Cluster Coordinator

각 NiFi 서버들의 정보(가동여부, 상태)를 관리하며, DataFlow의 추가, 수정, 삭제 등의 변경을 클러스터에 등록된 NiFi 노드들에 복제해준다.

 

 

2) Primary Node

Primary Node는 여러 노드에서 Processor가 실행되지 않고, 특정 단일 노드에서만 실행하고자 할때 사용하는 대표 노드이다.

 

 

3) ZooKeeper Server

이러한 역할은 ZooKeeper Server에서 자동으로 선출되며, NiFi 1.0부터 Zero-Master Clustering이 적용되여 클러스터 내에 NiFi 노드들 중 한대가 자동으로 Cluster Coordinator와 Primary Node가 된다.

 

Cluster와 각 노드들은 같은 Dataflow를 가지고 있으며, 각 노드에서 중복되지 않은 데이터를 처리한다.

 

 

 

 

4. 참고 링크


NiFi 란

www.popit.kr/apache-nifi-overview-and-install/

 

NSA의 Dataflow 엔진 Apache NiFi 소개와 설치 | Popit

Apache NiFi는 NSA(National Security Agency)에서 Apache에 기증한 Dataflow 엔진입니다. 복잡해지는 기업의 시스템들에서 신속하고, 유실 없는 데이터 전송은 점점 더 중요해 지고 있습니다. 빅데이터 시스템

www.popit.kr

dahye-jeong.gitbook.io/til/database/2020-02-02-basic/2020-03-27-nifi

 

NiFi란

 

dahye-jeong.gitbook.io

 

반응형