개발

Apache NiFi

syaku 2024. 11. 1. 14:07
반응형

Apache NiFi: 데이터 흐름 자동화를 위한 강력한 도구

1. Apache NiFi 소개

Apache NiFi는 시스템 간 데이터 흐름을 자동화하고 관리하기 위한 강력한 오픈소스 소프트웨어입니다. 실시간 데이터 처리에 최적화되어 있으며, 다양한 데이터 소스와 프로토콜을 지원합니다.

1.1 주요 특징

  • 웹 기반 사용자 인터페이스: 직관적인 드래그 앤 드롭 방식으로 복잡한 데이터 흐름을 쉽게 설계할 수 있습니다.
  • 실시간 데이터 처리: 데이터를 실시간으로 수집, 처리, 분배할 수 있어 즉각적인 의사결정에 도움을 줍니다.
  • 다양한 데이터 소스 지원: HTTP, FTP, SFTP, Kafka 등 다양한 프로토콜과 데이터 소스를 지원합니다.
  • 확장 가능한 아키텍처: 사용자 정의 프로세서 개발을 통해 기능을 확장할 수 있습니다.
  • 클러스터링 지원: 고가용성과 확장성을 위한 클러스터 구성이 가능합니다.
  • 데이터 흐름 추적 및 모니터링: 데이터의 이동과 변환 과정을 상세히 추적하고 모니터링할 수 있습니다.

1.2 주요 구성 요소

  • FlowFile: NiFi가 처리하는 데이터의 기본 단위입니다. 실제 콘텐츠와 속성으로 구성됩니다.
  • Processor: 데이터를 수집, 변환, 라우팅, 저장하는 작업을 수행하는 핵심 구성 요소입니다.
  • Connection: 프로세서 간 데이터 전달 및 큐잉을 담당합니다.
  • Flow Controller: 전체 데이터 흐름을 관리하고 스케줄링합니다.
  • Web Server: 사용자 인터페이스를 제공하여 데이터 흐름을 시각적으로 관리할 수 있게 합니다.
  • Repository: 데이터 및 메타데이터를 저장하는 공간입니다.

2. NiFi 사용 시 주의사항

NiFi를 효과적으로 사용하기 위해서는 다음 사항들에 주의해야 합니다:

2.1 메모리 관리

NiFi는 메모리를 많이 사용하는 애플리케이션입니다. 기본 설정인 512MB로는 대규모 데이터 처리 시 Out of Memory 오류가 발생할 수 있습니다.

권장 사항:

  • 최소 8GB 이상의 메모리를 할당하세요.
  • JVM 힙 메모리 설정을 적절히 조정하세요. (예: -Xms4g -Xmx8g)

2.2 성능 최적화

NiFi의 성능은 시스템 설정에 크게 영향을 받습니다.

권장 사항:

  • Linux 환경에서 실행 시, 파일 핸들 수와 프로세스 수 제한을 늘리세요.
  • Swapping을 비활성화하여 성능을 개선하세요.
  • SSD 등 고성능 스토리지를 사용하세요.

2.3 보안 설정

NiFi는 기본적으로 보안 설정이 되어 있지 않습니다. 운영 환경에서는 반드시 보안 설정을 해야 합니다.

권장 사항:

  • HTTPS를 설정하여 통신을 암호화하세요.
  • 사용자 인증 및 권한 관리를 구현하세요.
  • 초기 관리자 계정을 설정하고, 강력한 비밀번호를 사용하세요.

2.4 백신 소프트웨어 설정

백신 소프트웨어가 NiFi의 성능에 영향을 줄 수 있습니다.

권장 사항:

  • NiFi 디렉토리를 백신 검사 대상에서 제외하세요.

2.5 데이터 흐름 설계

복잡한 데이터 흐름은 성능 저하의 원인이 될 수 있습니다.

권장 사항:

  • 데이터 흐름을 최적화하고 단순화하세요.
  • 복잡한 연산은 Spark 등 외부 시스템과 연계하여 처리하세요.
  • 배치 작업과 실시간 처리를 적절히 분리하세요.

3. NiFi 성능 최적화 방법

NiFi의 성능을 최적화하기 위해 다음과 같은 방법을 사용할 수 있습니다:

3.1 하드웨어 리소스 최적화

  • CPU: 멀티코어 프로세서를 사용하세요. 노드당 최소 8코어 이상을 권장합니다.
  • 메모리: 충분한 RAM을 할당하세요. 노드당 최소 16GB 이상을 권장합니다.
  • 디스크: SSD 등 고성능 스토리지를 사용하세요.

3.2 NiFi 설정 최적화

  • 배치 크기(Max Batch Size) 증가: 프로세서의 처리 단위를 늘려 효율성을 높입니다.
  • 동시 작업 수(Concurrent Tasks) 조정: 프로세서의 병렬 처리 수준을 조절합니다.
  • 백 프레셔 임계값 조정: 데이터 흐름의 균형을 유지합니다.

3.3 클러스터 구성

  • 노드 수 증가: 처리량에 따라 클러스터 노드 수를 늘려 선형적인 성능 향상을 도모합니다.
  • 로드 밸런싱: 외부 로드 밸런서를 사용하여 트래픽을 분산시킵니다.

4. NiFi 클러스터에서의 데이터 분산 처리 최적화

4.1 로드 밸런싱 활용

  • 외부 로드 밸런서를 사용하여 들어오는 데이터를 클러스터 노드들에 균등하게 분배합니다.
  • NiFi의 Load-Balanced Connections 기능을 사용하여 클러스터 내 데이터 재분배를 최적화합니다.

4.2 Site-to-Site 프로토콜 사용

  • NiFi 인스턴스 간 데이터 전송 시 Site-to-Site 프로토콜을 활용하여 자동으로 클러스터 노드 간 데이터를 균등하게 분배합니다.

4.3 분산 처리 설계

  • ListHDFS와 FetchHDFS 같은 프로세서를 사용할 때, Primary Node에서 리스팅을 수행하고 결과를 클러스터 전체에 분배하여 병렬 처리를 구현합니다.

5. NiFi 권장 사양

5.1 하드웨어 요구사항

  • CPU: 노드당 최소 8코어 이상 권장
  • 메모리: 노드당 최소 16GB RAM 이상 권장
  • 디스크: 노드당 최소 6개의 하드디스크 권장 (SSD 선호)

5.2 소프트웨어 요구사항

  • Java 8 또는 Java 11
  • 지원 운영체제: Linux, Unix, Windows, macOS

5.3 클러스터 구성

  • 기본 권장 클러스터 크기: 3노드 (고가용성을 위한 Zookeeper Quorum 구성)
  • 처리량에 따라 노드 수 확장 가능 (선형적 확장성 제공)

6. Docker Compose를 사용한 NiFi 클러스터 설치 (Zookeeper 포함)

다음은 Docker Compose를 사용하여 NiFi 클러스터와 Zookeeper를 함께 설치하는 방법입니다:

  1. Docker Compose 파일 생성: 프로젝트 디렉토리에 docker-compose.yml 파일을 생성하고 다음 내용을 추가합니다:

    version: '3'
    services:
      zookeeper:
        image: 'bitnami/zookeeper:latest'
        container_name: zookeeper
        ports:
          - '2181:2181'
        environment:
          - ALLOW_ANONYMOUS_LOGIN=yes
        networks:
          - nifi-network
    
      nifi:
        image: apache/nifi:latest
        container_name: nifi
        ports:
          - '8080:8080'
        environment:
          - NIFI_WEB_HTTP_PORT=8080
          - NIFI_CLUSTER_IS_NODE=true
          - NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082
          - NIFI_ZK_CONNECT_STRING=zookeeper:2181
          - NIFI_ELECTION_MAX_WAIT=1 min
        volumes:
          - ./nifi/database_repository:/opt/nifi/nifi-current/database_repository
          - ./nifi/flowfile_repository:/opt/nifi/nifi-current/flowfile_repository
          - ./nifi/content_repository:/opt/nifi/nifi-current/content_repository
          - ./nifi/provenance_repository:/opt/nifi/nifi-current/provenance_repository
          - ./nifi/state:/opt/nifi/nifi-current/state
          - ./nifi/logs:/opt/nifi/nifi-current/logs
        networks:
          - nifi-network
    
    networks:
      nifi-network:
        driver: bridge
    
  2. NiFi 및 Zookeeper 실행: 터미널에서 다음 명령어를 실행하여 NiFi와 Zookeeper 컨테이너를 시작합니다:

    docker-compose up -d
    
  3. NiFi 접속: 브라우저에서 http://localhost:8080/nifi로 접속하여 NiFi 웹 인터페이스에 접근할 수 있습니다.

  4. NiFi 및 Zookeeper 중지 및 제거: 서비스를 중지하고 컨테이너를 제거하려면 다음 명령어를 사용합니다:

    docker-compose down
    

이 설정으로 NiFi 클러스터의 기본 구성이 가능합니다. 실제 운영 환경에서는 보안 설정, 리소스 할당, 고가용성 구성 등 추가적인 설정이 필요할 수 있습니다.

반응형