[NiFi] NiFi Concept #2
by Jaesang Lim
NIFI
- 분산 환경에서 대량의 데이터를 수집하고 처리하기 위해 만들어졌음
- 실시간 처리에 강점을 보임
- 디렉토리에 파일이 생성되면, 바로 DB, HDFS, Hbase, Elasticsearch, Kafka 등에 전달 완료
- 클러스터 환경에서는 장애가 나도 복귀 될때까지, 데이터 처리는 못하지만, 잃어버리지 않음
- Zero Master 클러스터 환경 제공
- 0.x 버전에는 Master-slave구조 였으나, SPOF의 문제를 해결하기 위해 1.x버전부터 Zookeeper의 Auto-Election 방법을 사용
- 웹 인터페이스가 있어서 쉽게 사용하기 쉬움
- Flexible하고 쉽게 Data Pipeline를 구성할 수 있음 ( Drag & Drop )
- 데이터의 이동 경로를 추적할 수 있음
- 배치 작업은.. 잘 못함.
- HDFS에게 대량의 파일을 빠르게 할 때는 DistCp 효율
구성요소
FlowFile
- Attribute 와 Content로 구성
1. Attribute
- Key/value 형태로, 데이터 이동, 변환, 저장에 필요한 정보
- FlowFile에 대한 metadata값
2. Content
- 데이터 값
- Processor와 Processor의 이동간에도 복사본 을 만들어 추적가능
- 내용은 복사하지않고, 어디에 있는지 포인터 정보만 복사 = RDD의 lineage
Repository
- 위에서 설명한 FlowFile의 복사본은 어디에 저장되며, 추적이 되는건가?
- 모든게 immutable함
1. Content_repository
- FlowFile의 Content 저장
2. Flowfile_repository
- FlowFile에 대한 속성값과 내용이 어디에 있는지 저장
3. Provenance_repository
- Processor가 flowfile을 처리할 때마다 이력( 이벤트)저장 )
- FlowFile의 History
- 자세한 내용은 여기서! https://nifi.apache.org/docs/nifi-docs/html/nifi-in-depth.html#intro
Processor
- flowFile 처리기라고 생각하자
-
다 적진 못하지만, 지금 생각나는 것들만 해도 이정도 있다.
- Kafka에서 데이터 Consume / Produce
- Avro Schema 기반 validation 및 데이터 변형
- Attribute 값 변경 및 추가
- Content 내용 변경 및 추가
- 포맷 변경 (csv to json with Avro 등등)
- elasticsearch에 저장
- ExecuteScript로 Groovy, Python으로 flowfile 처리
- Attribute 기반 라우팅
- Attribute 값에서 Expression Language 및 RecordPath, JsonPath를 이용하여 데이터 처리
Connection
- FlowFile의 Queue 로써 아래와 같은 기능 제공
- Prioritization
- FlowFile을 어떤 우선 순위로 처리할 것인가?
- Expiration
- Queue에 얼마동안 보관할 것 인가?
- Back Pressure
- Queue 얼만큼 차면 FlowFile의 생성을 조절할 것인가?
- Prioritization
Subscribe via RSS