(Niagara Files -> NiFi)
Apache NiFi는 NSA(National Security Agency)에서 Apache에 기증한 Dataflow 엔진이다. 복잡해지는 기업의 시스템들에서 신속하고, 유실없는 데이터 전송이 점점 더 중요해지고 있다. 빅데이터 시스템도 마찬가지로 데이터의 전송 경로가 더 복잡해지고, 실시간 처리가 중요해지는 시점에 Apache NiFi는 훌륭한 솔루션.
_한줄설명 : 시스템 간 데이터 전달 및 가공을 위한 실시간 데이터플로우 엔진. FBP 개념 도입. Data Flow를 직관적이며 간단하게 구현 및 관리 가능
나이파이의 근본적인 설계 개념은 Flow Based Programming(fbp)의 주요 아이디어와 밀접한 관련이 있다
NiFi용어 | FBP용어 | 설명 |
---|---|---|
FlowFile | Information Packet | FlowFile은 시스템을 통해 이동하는 각 객체를 나타내며 각각에 대해 NiFi는 키 / 값 쌍 속성 문자열과 0 바이트 이상의 관련 내용을 추적합니다. |
FlowFile Processor | Black Box | 프로세서는 실제로 작업을 수행합니다. 용어로 프로세서는 시스템간의 데이터 라우팅, 변환 또는 중재의 일부 조합을 수행하빈다. 프로세서는 지정된 FlowFile 및 해당 내용 스트림의 속성에 액세스합니다. 프로세서는 주어진 작업단위에서 0개 이상의 FlowFiles에 대해 작업하고 해당 작업 또는 롤백을 커밋 할 수 있습니다. |
Connection | Bounded Buffer | 연결은 프로세서 간의 실제 연결을 제공합니다. 이들은 대기열의 역할을하며 다양한 프로세스가 서로 다른 속도로 상호 작용할 수 있습니다. 이러한 대기열은 동적으로 우선 순위를 매길 수 잇으며 부하시 상한을 가질 수 있으므로 역압을 사용할 수 있습니다. |
Flow Controller | Scheduler | 플로우 컨트롤러는 모든 프로세스가 사용하는 프로세스와 프로세스의 연결 및 관리 방법에 대한 지식을 유지합니다. 흐름 컨트롤러는 프로세서간에 FlowFiles를 교환하는 브로커 역할을합니다. |
Process Group | subnet | 프로세스 그룹은 입력 포트를 통해 데이터를 수신하고 출력포트를 통해 데이터를 전송할 수 있는 특정 프로세스 및 연결 세트입니다. 이러한 방식으로, 프로세스 그룹은 다른 구성 요소의 구성에 의해 완전히 새로운 구성 요소의 생성을 허용합니다. |
NiFi가 강력하고 확장 가능한 데이터 흐름을 구축하는 데 매우 효과적인 플랫폼이 될 수 있도록 유익한 결과를 제공합니다
내부 아키텍쳐
JVM위에서 돌아가기 때문에 필수로 자바를 설치해야합니다.
NiiFi는 호스트 운영 체제의 JVM내에서 실행된다.
JVM에서 NiFi의 주요 기본 구성 요소
웹 서버의 목적은 NiFi의 HTTP 기반 명령 및 제어 API를 호스팅 하는것
흐름 컨트롤러는 작업의 두뇌입니다. 확장 기능을 위한 스레드를 제공하고 확장 기능이 실행될 일정을 관리합니다. 혹은 실제로 플로우를 컨트롤하거나 컨포넌트 정보 등을 가지고있습니다.
Repository에는 세가지가 있습니다
FlowFile Repository
FlowFile Repository는 NiFi가 흐름에서 현재 활성화되어있는 특정 FlowFile에 대해 알고있는 상태를 추적하는 곳입니다. 저장소의 구현은 플로그 가능합니다. 기본 접근 방식은 지정된 디스크 파티션에 있는 영구 Write-Ahead Log입니다.
요약 : 파일의 상태값, 권한, 소유자, 작성일자 등..
Content Repository
컨텐츠 저장소는 주어진 FlowFile의 실제 컨텐츠 바이트가 있는곳입니다. 저장소의 구현은 플로그 가능합니다. 기본 접근법은 파일 시스템에 데이터 블록을 저장하는 매우 간단한 매커니즘입니다. 단일 볼륨에서의 경합을 줄이기 위해 다른 물리적 파티션을 사용하기 위해 둘 이상의 파일 시스템 저장 위치를 지정할 수 있습니다.
요약 : 실제 데이터의 내용은 여기에
Provenance Repository
Provenance Repository는 모든 출처 이벤트 데이터가 저장되는 곳입니다. 저장소 구조는 하나 이상의 실제 디스크 볼륨을 사용하는 기본 구현과 함께 플러그 가능합니다. 각 위치 이벤트 내에서 데이터가 색인되고 검색 가능합니다. NiFi는 클러스터 내에서 작동 할 수도 있습니다.
가공을 하게 되는 경우 Provenance에 저장
중요한 3가지 요소
FlowFile : Nifi가 데이터를 표현하는 단위
Processor : FlowFil을수집, 정제, 저장 하는 기능
Connection : Processor간의 연결, FlowFile을 임시로 저장 후 전달확인되면 삭제하는 임시저장역할
Processor의 종류는 매우 다양하다
수집, 가공, 적재, 기타 로 나누어져 있다.
수집 | 가공 | 적재 | 기타 |
---|---|---|---|
GetFile | UpdateAttribute | PutFile | ExecuteScript |
GetSFTP | Replace Text | PutSFTP | ExecuteStream Command |
putHDFS |
수집 : GetFile을 보완한 getSFTP
가공 : 가져온 파일들을 삭제하거나 수정하는 역할. 파일의 권한 소유자 작성일자 등.
적재 : 수집part처럼 NiFi가 설치되어있는 로컬서버에서 파일을 가져올수있는 프로세스 putSFTP라는 프로세스를 사용해서 SFTP로 원격서버의 파일을 가져올 수도 있다.
기타 : ExecuteScript,, Groovy를 사용하여 파일을 정제하거나 사용할 수 있도록.
SelectHiveQL -> 하둡에코시스템 중 하나인 Hive에서 가져올 수있다.
Processor 와 같은 여러 컴포넌트를 프로세스 그룹으로 그룹화
NiFi Server 한개에서 수집, 정제, 분석, 저장까지 가능하지만
보통은 NiFi Server 를 여러대 연결해서 사용하기도 한다.
이렇게 여러대를 사용할 때 사용하는것이 Remote Process 이다.
여러대 나이파이 서버를 연결해서 사용할때 - Remote Process Group
Remote Process Group은 Site to Site Protocol을 제공한다
원격 NiFi Server 에 호스트명 포트명만 넣어주면 자동적으로 포트를 감지해 연결을 해주는 역할.
마찬가지로 Process Group 단위로 템플릿 저장 및 불러오기 기능(xml file형식) download 버튼을 누르면 xml 형태의 파일이 다운 가능하다. 저장을 하거나 백업을 하거나 ..
Airflow vs NiFi
NiFi는 현재 실행중인것을 시각적으로 확인하지 못한다?