나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Big Data/NiFi

[NiFi] Hello World!

devidea 2020. 1. 10. 17:28

이번 글에는 Apache Nifi에 대해서 소개하고자 한다. Big Data에 대한 ETL 작업을 많이 하고 있는데 이러한 작업을 편리한 UI로 쉽게 등록해서 수행할 수 있는 NiFi를 소개하고자 한다.

필자로 NiFi에 대해서 이제야 입문한 상태이고 추가적인 기능들에 대해서 더 분석하면서 정리하고자 한다.
 
NiFi에 대한 개념과 간단한 실습은 아래 강좌를 통해서 배울 수 있었는데, NiFi의 Hello World를 하고자 하는 분들에게 추천한다.
 
 
NiFi의 중요 개념 정리
NiFi을 실제로 사용하기에 앞어서 중요한 개념들만 정리한다.
용어 정리
FlowFile 일반적으로 데이터를 나타낸다.
Content/ Attributes로 나뉘는데 Content는 데이터 자체를 말하고, Attribute는 데이터와 관련된 정보를 키/값 쌍으로 표현한 것이다.
Processor FlowFile을 변환하는 기능을 말하며 처리 이후에 또 다른 FlowFile을 만들어낸다.
Processor는 여러 개가 병렬적으로 동작할 수 있다.
Connector FlowFile의 (다음 Processor에 도착하기 전)Queue를 의미한다.
우선순위 조정 및 backpressure를 설정해 부하를 조절할 수 있다.
(backpressure: 사전에서 배압으로 나오는데 스트리밍 데이터가 밀려오는 압력으로 이해)
설명한 개념들을 그림으로 표현하면 아래와 같다.

 

[출처 - Introduction to Apache Nifi (UDEMY 강의)]
 
NiFi 홈페이지 첫 화면에 나오는 정의에서 directed graph라는 용어가 나오는데 위 그림을 표현한 용어이다.
FlowFile, Processor, Connector 조합이 연속적으로 묶여서 데이터가 단방향 그래프 방향으로 흘러감을 알 수 있다.
 
 
NiFi 시작!
그럼 NiFi를 실행해 보고 간단한 예제를 만들어보자.
NiFi 사용법에 대해서는 다른 블로그 글에서도 설명하는 내용이 있어서 필자는 하나의 목표를 정해서 그걸 수행해 보는 것으로 하겠다.
 
목표로 세운 사항은 "스트리밍 데이터를 Kafka로 전송받아 HDFS에 저장해보자"로 정했다.
먼저 실습으로 만든 directed graph를 먼저 보자.
 
여러 Processor들이 있는데 전체적인 역할을 설명하고 설정은 참고할 만한 부분만 추가 설명한다. (LogAttribute는 데이터 참고용 이므로 제외)
  • GenerateFlowFile : 임의 데이터 생성
  • PublishKafka_0_11 : Kafka로 데이터를 넣는 Producer
  • ConsumerKafka_0_11 : Kafka에 들어있는 데이터를 가져오는 Consumer
  • MergeContent : 여러 데이터를 하나로 묶어 파일로 생성
  • PutHDFS : 생성된 파일을 HDFS에 저장
 
NiFi에서는 테스트를 위해서 인지 임의의 내용을 만들어 내는 Processor가 있다 (GenerateFlowFile). 특정 Size로 계속 스트리밍 데이터를 만들어 낸다.
만들어진 데이터는 Kafka로 발송 하는데, PublishKafka_0_11에서 Kafka Broker 주소, Topic 명을 지정한다.
 
그러면 설정한 바와 같이 nifi-topic에 데이터가 계속 쌓일 것이다.
쌓인 데이터는 ConsumerKafka_0_11로 데이터를 가져온다. 주요한 설정은 Group ID, Offset Reset이다. 
Group ID는 Consumer를 구분하는 단위이고, Offset Reset은 어디부터 데이터를 가져올지 나타낸다. (latest는 가장 마지막에 저장된 부분부터 새로 들어올 데이터부터 가져온다는 의미)
 
그리고 스트리밍 데이터를 파일로 묶어준다. 처음에는 파일을 묶지 않고 바로 PutHDFS에 연결을 했었는데 그렇게 하니깐 하나의 데이터 마다 새로운 파일이 생성되었다.
아래 설정에서는 최소 2000개, 2MB 사이즈로 파일을 만들도록 설정했다.
 
마지막은 PutHDFS이다. 생성된 파일을 HDFS에 저장한다.
설정에서는 Hadoop 설정 파일 (core-site.xml, hdfs-site.xml) 위치를 넣고, 저장할 HDFS Path를 적었다.
 
앞서 설명한 강의에서는 Kafka Producer, Consumer에 대한 내용만 있는데 추가로 HDFS 적재까지 해본 것이다.
NiFi Hello World를 하면서 느낀 점은 ETL을 하고 싶은 비개발자에게 첫 Tool로서 좋은 선택으로 보였다.
그런데 복잡한 데이터 변환 및 계산에서는 단순한 설정으로도 효과적으로 대응할 수 있을지 다른 케이스도 적용해서 테스트를 해봐야겠다고 생각했다.
 
전해 듣기로는 코드를 삽입하거나 spark job을 등록할 수 있다고 하는데 실제로 해보면서 얼마나 편리하게 적용할 수 있을지 테스트해 볼 예정이다.
 
 
참고 문서

 

 

반응형