티스토리 뷰
Nifi는 Java 기반의 프로젝트로 JVM 위에서 동작한다. 운영시에는 클러스터 환경에서 Nifi를 구성하지만 단일 노드에서도 Nifi 구성 가능하다.
Nifi Architecture
- Web Server
- Nifi의 Http 기반의 명령과 제어 API 제공
- 웹서버에서 데이터를 가공하고 분배하는 Flow 를 생성
- Flow Controller
- Nifi의 핵심적인 부분으로 실제 데이터를 가공하고 분배하는 작업 영역
- flow.xml.gz도 관리하여 모든 노드의 flow를 동기화 역할
- FlowFile Repository
- 현재 만들어진 FlowFile의 Meta Data 저장소
- Meta Data
- Flow file의 위치
- Flow file의 상태 (어떤 connection/queue에 존재하는지)
- Flow file의 Attribute
- Content Repository
- 과거 및 현재의 FlowFile의 Content Data(실제값) 저장소
- 가장 큰 저장 공간을 사용
- Provenance Repository
- FlowFile의 History Data 저장소
- FlowFile의 이력정보 (Data Lineage 제공)
- 데이터가 처리된 프로세스 확인
- FlowFile의 실제 흐름 - Pass by Reference
- FlowFile(F1)이 Content(C1)을 참조
- Pass on successes 프로세서 successful status code 확인 후 Remove duplicates와 Log all successful http calls로 라우팅
- 동일한 Content를 두 프로세서로 전달
- FlowFile(F2) 생성 후 동일한 Content(C1)을 참조
- Provenance에서는 발생한 이벤트를 모두 기록
Nifi Clustering
Nifi의 장점은 수평 확장이 가능하여 리소스가 추가적으로 필요시 기존 데이터 플로우에서 언제든지 노드 증설을 할 수 있다.
클러스터링을 위해서 Nifi는 약간의 Zookeeper의 도움을 받는다. Zookeeper는 클러스터링을 이루고 있는 노드들 중에서 Primary, Coordinator 노드를 선출하는 역할을 한다.
Zookeeper에 의해서 하나의 노드가 Primary, Coordinator로 선출되는 경우도 존재한다. 해당 선출이 이상한 상황은 아니다.
또한, 아쉽게도 사용자가 Primary, Coordinator 노드를 지정하는 것은 불가능하다. 만약 불가피하게 지정이 필요하다면 목표로 하는 노드만 Nifi를 시작하여 단일 노드로 Nifi를 실행하여 목표 노드가 Primary, Coordinator가 된 이후에 다른 노드들을 시작하는 식으로 지정은 가능하다.
- Zookeeper Server
- 외부 Zookeeper를 사용 가능
- Primary Node 역할 부여
- Cluster Coordinator 역할 부여
- Cluster Coordinator
- 클러스터에서 가장 핵심이 되는 노드
- 각 Nifi 서버들의 정보 관리
- DataFlow의 추가, 수정, 삭제 등의 변경을 등록된 Nifi에 복제
- Primary Node
- Primary Node는 특정 단일 노드에서만 실행할 때 사용되는 대표 노드
- Primary Node 사용을 안하면 모든 노드가 동시에 같은 Task를 처리
- race condition을 방지하기 위해서 특정 노드가 데이터 리스트를 가져와 분배할 때 사용
- Kafka 혹은 DB에서 데이터를 읽을 때 주로 사용
Nifi의 한계
- 클러스터 노드 하나라도 disconnected 될 경우 Dataflow 변경 불가
- disconnected 된 노드가 발생하면 UI에서 변경할 수 없도록 방어
- 해당 노드를 connected 시킴으로 해결
- 해당 노드를 아예 제거함으로써 해결
- 노드 변경 작업시 노드 연결이 끊어지면 관리자가 flow.xml.gz을 수동으로 복사해야함
- 연결이 끊어진 이후에 flow가 변경되어 기존 flow.xml.gz 차이 발생
- flow.xml.gz에 차이가 있다면 FlowController에 의해서 재기동시 강제 셧다운
- 자체적으로 HA를 지원은 없음
- Primary와 Coordinator Node가 죽는다면 Zookeeper를 통해 재선정
- 죽은 노드로 분배된 작업은 영구 유실 우려 존재
- 죽었던 노드가 정상적으로 복구되면 flowfileRepository를 통해 이어서 작업은 가능
'BigData > Nifi' 카테고리의 다른 글
Nifi 재기동 후 service 자동 disabled 전환 에러 (0) | 2024.01.23 |
---|---|
Exception:org.apache.nifi.encrypt.EncryptionException: Decryption Failed with Algorithm 에러 조치 (1) | 2024.01.04 |
Proposed configuration is not inheritable by the flow controller because of flow differences 에러 조치 (1) | 2024.01.04 |
Apache Nifi flow.xml.gz 뜯어보기 (1) | 2024.01.04 |
Apache Nifi Overview 정리 (1) | 2024.01.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 빅데이터
- prometheus
- error
- OOM
- bigdata #data_mesh
- zabbix
- nifi.flowcontroller.autoResumeState
- flink
- spark driver
- Nifi Architecture
- nifi
- lld
- java8
- 실시간처리
- exporter
- flow.xml.gz
- hadoop
- Apache Nifi
- Nifi Service
- MAT
- Discovery Rule
- hdfs
- namenode
- Federation
- Dataflow
- openjdk1.8
- 설정에러
- Apache
- Item Prototypes
- Bigdata
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함