아파치 나이파이(Apache NiFi, NiagaraFiles 의 준말)는 시스템 사이의 데이터 흐름을 자동화하는 아파치 소프트웨어 재단 프로젝트다. NSA 가 개발한 NiagaraFiles 를 2014년 기술 이전 프로그램으로 오픈소스화한 것에서 출발했다.
흐름 기반 프로그래밍(flow-based programming) 모델을 따르며, 클러스터 구성, TLS 암호화, 확장(사용자가 직접 프로세서를 작성해 기능을 늘릴 수 있음), 브라우저에서 흐름을 보고 고치는 UI 를 제공한다.
상용 지원은 Hortonworks 가 맡았으나 2019년 1월 Cloudera 와 합병해 지금은 Cloudera 가 이어받았다.
버전 계열에 따라 다르다. 자세한 것은 설치 문서를 볼 것.
|
1.x |
2.x |
| Java |
8 또는 11 |
21 |
| 기본 접속 |
HTTP 8080 / HTTPS 8443 |
HTTPS 8443 |
| 보안 미설정 시 |
— |
127.0.0.1 로만 바인딩 |
| 템플릿 기능 |
있음 |
제거됨 |
호스트의 JVM 안에서 도는 자바 프로그램이며, 주된 구성 요소는 다음과 같다.
| 구성 요소 |
역할 |
| Web Server |
HTTP 기반 명령·제어 API 를 띄운다 |
| Flow Controller |
동작의 두뇌. 확장에 스레드를 주고 실행 스케줄을 관리한다 |
| Extensions |
JVM 안에서 실행되는 각종 확장(프로세서 등) |
| FlowFile Repository |
흐름에 올라 있는 FlowFile 의 상태를 추적한다 |
| Content Repository |
FlowFile 의 실제 내용 바이트가 있는 곳 |
| Provenance Repository |
프로버넌스 이벤트 데이터가 쌓이는 곳 |
| 계열 |
상태 |
비고 |
| 2.x |
현행 |
최신 2.12.0 (2026-09-13). Java 21 필요 |
| 1.x |
유지보수 종료 수순 |
1.28 이 마지막 마이너. 2 로 올릴 것을 권고 |
쓰는 버전에 맞는 설치 문서를 볼 것.
주의할 변화 두 가지.
- 템플릿(Template) 기능은 2.x 에서 없어졌다. 1.x 의
nifi.templates.directory 설정과 템플릿 내보내기/가져오기 절차는 2.x 에 없다.
- NiFi Registry 는 2026년 2월 커뮤니티 투표로 폐기(deprecated) 됐고 3.0 에서 제거될 예정이다. 신규 구축에 쓰지 말 것.
- 버전을 고르고 요구사항을 확인한다. 계열별 설치 절차는 그 아래에서 가른다.
- 1.x 플로우를 2.x 로 올리기 전에 확인할 제거 구성 요소와 NAR 충돌.
- 2.x 배포본에서 빠진 HBase NAR 을 무엇으로 대신할지 정리한다.
- 사내 베이스 이미지 위에 NiFi 2.x 이미지를 만들고 docker-compose 로 띄운다.
- StatefulSet 과 headless Service 로 클러스터를 올린다. 설정은 ConfigMap 으로 관리한다.
- BindException 을 비롯해 파드가 기동하지 못하는 원인을 가른다.
- 파드가 반복 재시작될 때 커널 OOM 과 probe 실패를 구분한다.
- 프라이머리 노드는 지정이 아니라 선출로 정해진다. 옮기는 방법과 순서 보장.
- 시작할 때 어느 노드의 플로우를 정본으로 삼을지 정하는 값.
- 연결 로드밸런싱과 앞단 로드밸런서를 나눠 설정한다.
- 재시작할 때마다 노드 수가 늘고 TLS 가 어긋나는 경우.
- Coordinator 미선출과 FlowFile Repository 저널 실패를 함께 추적한다.
- 요청 복제가 타임아웃되며 노드가 클러스터에서 떨어져 나갈 때.
- 저장소를 NFS 에 두었을 때 생기는 .nfs 파일과 heartbeat 실패.
- taskInstanceId 가 어긋나는 오류의 원인 후보와 진단 순서.
- Too many open files 를 막는 ulimit 과 커널 파라미터.
- 저장소 네 가지가 각각 무엇을 담고 얼마나 보관하는지.
- NAS 수집에서 PutKudu 앞 큐가 적체될 때의 처방.
- Kafka 백로그와 대용량 쿼리가 겹쳐 난 OOM 을 복구한다.
- 폐기 예정 컴포넌트. 운영 중인 설치를 위해 남겨 둔다.
- Registry Client 를 등록해 프로세스 그룹을 버전 관리한다.
- MariaDB 에 H2 용 스크립트가 걸려 V3 에서 멈출 때. 제약 이름이 64자를 넘는다.
- 플로우 정의 내보내기 두 옵션과 HandleHTTP 컨텍스트.
- 배포 직후 컨트롤러 서비스가 전부 비활성인 점과 멀티호스트 JDBC.
- 토큰을 받아 REST API 로 프로세서를 제어하고 플로우를 내려받는다.
- 표준 코어 흐름을 도식으로 옮기고 PartitionRecord 스키마 함정을 피한다.
- 파라미터와 변수의 참조 문법·범위·우선순위 차이.
- 로그 파일을 줄 단위로 걸러 후속 처리로 보낸다.
- 스케줄링 전략과 Run Schedule · Concurrent Tasks 의 관계.
- 큐 처리 순서를 바꾸는 우선순위 규칙과 Funnel.
- ControlRate 의 기준을 이해하고 최신 파일 하나만 처리한다.
- 적재는 그때그때 하되 후속은 하루 한 번만 돌리는 구성.
- Wait 와 Notify 로 프로세스 그룹 선후행 관계를 만든다.
- 보관기간 삭제 배치와 재수행 일자의 타임존 처리.
- 로그 한 줄을 컬럼별 속성으로 나누는 정규식 패턴.
- Grok 패턴으로 비정형 로그를 레코드로 읽는다.
- 따옴표·이스케이프 때문에 나는 파서 오류를 가른다.
- 추론에 맡기지 않고 Avro 스키마로 컬럼 타입을 못 박는다.
- 빈 배출 조건을 이해해 병합 앞 큐 정체를 푼다.
- 여러 브랜치를 합칠 때의 fragment 속성과 0행 함정.
- 결과물이 1GB 를 넘지 않게 묶는 월 단위 배치.
- 셸 스크립트 실행 프로세서 선택과 Remote Process Group.
- 인자를 지나며 벗겨지는 JSON 따옴표를 Base64 로 우회하고 종료 코드를 되돌려 받는다.
- 원격 SSH 실행에서 막히는 지점을 하나씩 푼다.
- JSON 레코드를 1000 건 단위 INSERT 문으로 묶어 보낸다.
- Cloudera Auto-TLS 트러스트스토어로 SSL 접속을 붙인다.
- 새 Group ID 로 메시지가 들어오지 않을 때와 실패 로그 라우팅.
- 여러 단계로 나뉘어 있던 파싱과 라우팅을 스크립트 하나로 합친다.
- Groovy 파서로 바꾸고 컨슈머 그룹 offset 을 되감는다.
- 대상별 컨트롤러 서비스 선택과 커넥션 풀 설정.
- HiveServer2 버전에 맞는 컨트롤러 서비스를 고른다.
- PutSQL 과 ExecuteSQL 의 쓰임을 가르고 통계 갱신을 건다.
- 파일을 올려 파티션으로 등록하는 두 가지 흐름과 타임스탬프 주의점.
- 원천 메타데이터를 읽어 테이블 DDL 을 자동으로 만든다.
- 한글이 깨지는 적재를 스크립트 직접 INSERT 로 우회한다.
- 실패 원인을 속성으로 받아 로그 테이블에 남긴다.
- 과거 구간을 다시 수집할 때 동시에 맞춰야 하는 세 가지.
- 마운트 개수가 바뀌는 NAS 를 스크립트 탐색으로 다룬다.
- UDP 패킷 수집과 IPv4 · IPv6 동시 사용.
- 메일 발송 속성과 운영 흐름을 건드리지 않는 1회성 시험.
- Cloudera Manager 가 authorizers.xml 을 자동 생성하는 구조.
- krb5.conf 를 지정하고 Registry 의 LDAP 을 끈다.
- 폐기된 Kerberos Credentials Service 를 User Service 로 바꾼다.
- Kerberos 주체 이름이 Ranger 정책과 맞지 않아 생기는 문제.
- 수집 PG 전체에 적용할 재시도 표준과 변수 치환 주의점.
- 실패를 공통 그룹으로 모으고 메일 폭주를 막는다.
- 세 원천의 적재 이력을 한 곳에서 관리하는 테이블 설계.
- NiFi 2.x 배포본의
lib 에는 1.x 에 있던 NAR 가운데 일부가 들어 있지 않다. Hadoop · HDFS · Hive 계열이…
DetectDuplicate · Wait · Notify · LookupRecord 같은 프로세서는 상태를 저장할 캐시를 요구한…
- NiFi 1.x 의
ExecuteScript 프로세서에서 Script Engine 으로 python 을 고르면 CPython 이 아니라…
- 로그 파일을 NiFi 로 수집해 Kudu 에 넣을 때, 같은 파일이 다시 들어오거나 재처리를 돌리면 같은 행이 두 번 적재된다. Kudu 는…
- Cloudera Manager 가 관리하는 CFM NiFi 에서 인가를 파일 기반 정책 대신 Apache Ranger 로 옮기는 절차와, Ra…
- NiFi 의 프로세스 그룹에서 버전 관리를 시작하려고 하면 다음이 뜬다.
- NiFi Registry 는 Spring Boot Actuator 를 싣고 있으며 헬스 엔드포인트는 API 컨텍스트 경로 아래에 있다.
- Stateless NiFi 는 처리기(processor) 의 종류가 아니라 플로우를 돌리는 실행 엔진이 다른 것이다. 표준 NiFi 서버를 띄…