[NiFi] NiFi?

CHAN LIM·2023년 12월 21일
0

NiFi

목록 보기
1/13
post-thumbnail

0. NiFi

  • Apache NiFi는 NSA 즉, National Security Agency에서 Apache에 기증한
    Dataflow 엔진
  • 데이터를 가져오고 이를 처리 후 적재하기 위한 ETL Tools 이다.

특별한 기술이 없는 사용자도 복잡한 데이터 파이프라인을 생성할 수 있도록 지원한다.

  • FBP 개념을 바탕으로 만든 오픈소스
    • FBP 즉,
      Flow-Based Programming
      • 사전에 dataflow를 정의 후, 이를 지속적으로 유지 및 실행하는 프로그래밍 패러다임
      • 용어가 어렵게 설명되어있는데, 순서도 프로그래밍한다 생각하면 된다.


1. 왜 사용할까?

  • 실시간 처리에 매우 적합하다.
    • 파일 생성 시, 실시간으로 다른 DB 또는 FTP로 전송할 수 있다.

  • Zero Master Cluster 환경
    • 먼저, 클러스터링
      • 왜? 클러스터링을 하는가
        • 단일 서버에서 하나의 Nifi로는 대량의 데이터 처리 어려움
      • 그렇다고 여러 대를 무작정 설치하면, 이후 업데이트 시 하나하나씩 다 모니터링을 해야한다.
      • 클러스터링을 진행하면
        동일한 데이터 플로우를 통해 병렬 처리 가능
        한번에 플로우 변경 시, 다른 노드(머신)들도 손쉽게 처리 가능

    • Zero Master?
      Master 가 존재하는 여타 시스템에서는 Master 가 죽으면 전체가 박살나는 SPOF 약점
      (single point of failure, SPOF) 단일 장애 지점
      Nifi 의 경우,
      코디네이터가 죽어도 다른 노드가 코디네이터가 되어 SPOF가 없다.

      이 부분은 추후에 나올 Zookeeper가 동작한다.

  • HTTPS가 Default
    • 통신 보안에 탁월

  • 웹 기반으로 UI가 직관적이다.

  • 여러 NiFi 시스템 간 통신을 지원해 클러스터간 Site-to-Site 데이터교환이 가능
    • 클러스터링 시, 각 노드들끼리 데이터 교환이 가능하다.

2. 단점은?

  • 배치 작업 효율이 떨어진다고 알려짐
  • 원본 소스파일이 누락없이 전송되었는지 파악이 어렵다.
    • 경험 상 File이 보내지면, File이 보내진 사실만 파악이 되었다.
  • Scheduler는 실행 후 성공, 실패 출력 결과만 알 수 있다.

3. 용어

3-1. Flowfile

  • NiFi에서 데이터를 표현하는 객체
  • NiFi가 인식하는 데이터 단위
  • 0바이트 이상의 데이터가 저장
  • Flowfile을 이용하여 여러 시스템 간 데이터 이동이 가능
  • Processor 이동 시 위치 포인터정보 복사본이 생성되어 추척이 가능

3-2. Flowfile Processor

  • 실제 작업을 수행하는 프로세스
  • Flowfile을 수집, 여러 단계에 걸쳐 속성이 추가되거나 변경 및 저장할 때 사용

3-3. Connection

  • Processor 간의 연결
  • Connection을 통해 Flowfile 전달
  • NiFi의 Connection은 Flowfile의 대기열 (Queueing)뿐 아니라,
    라우팅, 처리량 제한, 우선순위 제거 및 모니터링등의 기능을 제공한다.

3-4. Flow Controller

  • Scheduler
  • Processor가 어느 간격 또는 시점에 실행되는지 작업에 대한 스케쥴링

3-5. Processor Group

  • Processor 묶음

4. Architectures

NiFi는 Host OS의 JVM 내에서 실행된다.

4-1. Web Server

  • NiFi는 UI를 웹 서비스를 통해 제공하며, HTTP 기반 요청 및 API 관리를 한다.
  • 사용자는 이를 통해 Dataflow 개발, 제어, 모니터링

4-2. Flow Controller

  • NiFi Processor 두뇌
  • Processor 작업 스케쥴러

4-3. Extension

  • NiFi가 제공하는 기본 Processor들 이외에 개발자가 직접 Processor를 개발하여 확장할 수 있다.

4-4. Flowfile Repository

  • Write-Ahead-LogFlowFile 속성과 상태값을 저장하는 레포지토리
    • 데이터 무결성을 보장하는 표준 방법
    • 즉, 변경을 로깅한 후에만,
      즉, 변경 내용을 설명하는 로그 레코드를 영구적 저장소에 먼저 기록한 후에 데이터 파일(테이블과 인덱스가 있는)의 변경 내용을 작성해야 한다는 것

4-5. Content Repository

  • FlowFile의 데이터(콘텐츠)가 저장
  • 여러 디렉토리에 분석 및 저장 가능
    • 이 때문에 대용량 데이터 저장 및 처리 가능

4-6. Provenance Repository

  • Processor가 처리될 때마다 FlowFile의 이벤트가 저장되는 곳
  • 데이터의 처리 단계별로 FlowFile 데이터를 보관한다.
  • 또한 여러 디스크를 지원하고, 각 데이터는 인덱스되어 검색이 가능하다.

5. NiFi 클러스터링

단일 서버에서 처리하기 힘든 대량의 데이터를 병렬처리하고,
이를 손쉽게 관리할 수 있도록 하는 방법
= 클러스터링

  • NiFiZero-Master 클러스터링을 채택.
    • 클러스터의 각 노드는 데이터에서 동일한 작업을 수행하지만,
      각각 다른 데이터 집합에서 작동합니다.


  • 각 노드들에서 다루는 데이터는 Apache Zookeeper를 통해 분산 처리하게 된다.

클러스터의 각 노드들은 같은 Process를 처리하며 대신 다른 데이터 Set을 처리한다.


5-1. Cluster Coordinator

  • 각 NiFi 서버(노드)들의 정보(가동여부, 상태)를 관리하며,
    새로 추가된 노드들에게 가장 최신의 DataFlow를 제공한다.

  • DataFlow의 추가, 수정, 삭제 등의 변경 시,
    클러스터에 등록된 NiFi 노드들에게 복제해준다.


5-2. Primary Node

  • 모든 클러스터는 하나의 Primary Node를 가진다.
    • 이는 Zookeeper Server로 부터 선출된다.

    • 여러 노드에서 동시에 실행되기를 원하지 않는 경우:
      • 특정 단일 노드에서만 실행하고 하는 고립된 프로세서를 실행하는 노드이다.
    • Primary Node에서 실행된 데이터를 각 노드에 공급

5-3. Zookeeper Server

  • 앞서 언급된 Primary Node, Cluster Coordinator
    Zookeeper Server에서 자동으로 선출된다.

    • 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트
    • 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구
      • 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중한다.
      • 또한, 그룹 관리 네이밍 및 동기화 등의 서비스를 제공한다.

NiFi Clustering을 직접 진행할 때, 더 자세히 알아보도록 한다.


출처

Java Install
NiFi Install

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글