이번 장에서는 Apache nifi 시작 안내서(1)에 이어서 docs 중 프로세서에 대한 내용을 번역하여 기술하겠습니다.
프로세서
각 프로세서에는 데이터를 전송할 수 있는 정의된 "Relationships" 집합이 있습니다.
프로세서가 FlowFile 처리를 완료하면 해당 FlowFile을 다른 Relationships 중 하나로 전송합니다.
이는 처리 결과에 따라 사용자가 구성할 수 있습니다.
예를 들어 많은 프로세서들은 성공(success)과 실패(failure) 두 가지로 정의합니다. 사용자는 데이터를 처리하는 프로세서가 데이터를 성공적으로 처리할 수 있는 경우에는 한 경로를 통해 흐르도록 데이터를 구성하고, 프로세서가 데이터를 처리할 수 없는 경우에는 완전히 다른 방식으로 흐르도록 데이터를 구성할 수 있습니다. 또는 사용 사례에 따라 동일한 경로로도 보낼 수도 있습니다.
아래는 성공(success)과 실패(failure) 두 가지로 정의된 Relationships입니다.
연결에 이름을 지정할 수 있습니다. 지정하지 않으면 선택된 Relationships에 기반합니다.
데이터의 유효 기간도 설정할 수 있습니다. 기본적으로 "0 sec"로 설정되어 있어 데이터가 만료되지 않도록 설정됩니다.
그러나 데이터가 특정시간에 도달하면 자동으로 데이터가 제거되기도 합니다.
백프레셔(thresholds)는 소스 프로세서가 더 이상 예약되지 않도록 허용되는 대기열이 얼마나 가득 찰 수 있는지를 지정할 수 있습니다. 이를 통해 한 프로세서가 데이터를 생산하는 속도가 다음 프로세서가 해당 데이터를 소비하는 속도보다 빠른 경우를 처리할 수 있습니다. 따라서 백프레셔가 연결마다 구성되면 데이터를 시스템에 가져오고 있는 프로세서는 언젠가 백프레셔를 경험하고 새 데이터를 가져오지 않게 되어 시스템이 복구될 수 있습니다.
마지막으로 우측에는 Prioritizers를 가지고 있습니다. 이를 통해 이 대기열의 데이터를 어떻게 정렬할지 제어할 수 있습니다. "사용 가능한 우선순위 지정기" 목록에서 우선순위 지정 기를 끌어다 놓아 활성화할 수 있습니다.
여러 우선순위 지정기가 활성화되면 첫 번째로 나열된 우선순위 지정기가 먼저 평가되며 우선순위 지정기에 따라 동등하다고 판단되면 두 번째 우선순위 지정기가 사용됩니다.
프로세서 시작 및 중지
프로세서를 시작하려면 각각을 개별적으로 클릭한 다음 마우스 오른쪽 버튼을 클릭하고 시작 메뉴 항목을 선택할 수 있습니다. 프로세서를 선택할 때 Shift 키를 누른 채로 다중선택을 할 수도 있습니다. 콘텍스트 메뉴를 사용하는 대신에 프로세서를 선택한 다음 작업 팔레트에서 시작 아이콘을 클릭할 수도 있습니다.
프로세서가 시작되면 더 이상 구성할 수 없습니다. 대신 프로세서를 마우스 오른쪽 버튼으로 클릭하면 현재 구성을 볼 수 있는 옵션을 제공받을 수 있습니다. 프로세서를 재구성하려면 실행 중인 작업이 완료될 때까지 기다려야 합니다. 현재 실행 중인 작업 수는 프로세서의 오른쪽 상단 근처에 표시되며 현재 실행 중인 작업이 없는 경우 아무것도 표시되지 않습니다.
사용 가능한 프로세서
효과적인 데이터 플로우를 구축하기 위해서는 사용자가 사용 가능한 프로세서 유형을 이해해야 합니다. nifi에는 다양한 프로세서가 기본으로 포함되어있습니다. 이러한 프로세서들은 다양한 시스템에서 데이터를 가져오는 능력을 제공하고, 데이터를 라우팅하고 변환하며 처리하며 데이터를 분할하고 집계하며 여러 시스템에 데이터를 배포하는 기능을 제공합니다.
데이터 변환
- CompressContent: 콘텐츠 압축 또는 압축 해제
- ConvertCharacterSet: 콘텐츠를 인코딩하는 데 사용되는 문자 집합을 한 문자 집합에서 다른 문자 집합으로 변환
- EncryptContent: 콘텐츠 암호화 또는 암호 해독
- ReplaceText: 정규 표현식을 사용하여 텍스트 콘텐츠 수정
- TransformXml: XML 콘텐츠에 XSLT 변환 적용
- JoltTransformJSON: JOLT 사양을 적용하여 JSON 콘텐츠 변환
데이터베이스 액세스
- ConvertJSONToSQL: JSON 문서를 SQL INSERT 또는 UPDATE 명령으로 변환한 다음 PutSQL 프로세서에 전달
- ExecuteSQL: 사용자 정의 SQL SELECT 명령을 실행하여 결과를 Avro 형식으로 FlowFile에 작성
- PutSQL: FlowFile의 컨텐츠로 정의된 SQL DDM문을 실행하여 데이터베이스를 갱신
- SelectHiveQL: Apache Hive 데이터베이스에 대해 사용자 정의 HiveQL SELECT 명령을 실행하여 결과를 Avro 또는 CSV 형식으로 FlowFile에 작성
- PutHiveQL: FlowFile의 콘텐츠로 정의된 HiveQL DDM 문을 실행하여 Hive 데이터베이스를 업데이트
속성 추출
- EvaluateJsonPath: 사용자가 JSONPath 표현식(XML 구문 분석/추출에 사용되는 XPath와 유사)을 제공하고 이러한 표현식 그런 다음 JSON 콘텐츠에 대해 평가되어 FlowFile 콘텐츠를 대체하거나 사용자 이름이 지정된 속성으로 값을 추출
- ExtractText: 사용자가 하나 이상의 정규식을 제공한 다음 FlowFile의 텍스트 콘텐츠에 대해 평가하고, 그런 다음 추출된 값은 사용자 이름이 지정된 속성으로 추가
- HashAttribute: 기존 특성의 사용자 정의 목록 연결에 대해 해시 함수를 수행
- HashContent: FlowFile의 콘텐츠에 대해 해시 함수를 수행하고 해시 값을 Attribute로 추가.
- UpdateAttribute: FlowFile에 원하는 수의 사용자 정의 특성을 추가하거나 업데이트. 이는 정적으로 구성된 값을 추가하는 데 유용. 뿐만 아니라 Expression Language를 사용하여 Attribute 값을 동적으로 파생 가능. 이 프로세서는 또한 "고급 사용자 인터페이스"를 제공. 사용자가 사용자 제공 규칙에 따라 조건부로 속성을 업데이트도 가능
시스템 상호 작용
- ExecuteProcess: 사용자 정의 운영 체제 명령을 실행.
- ExecuteStreamCommand: 사용자 정의 운영 체제 명령을 실행.
데이터 수집
- GetFile: 로컬 디스크(또는 네트워크 연결 디스크)에서 NiFi로 파일의 내용을 스트리밍한 다음 원본 파일을 삭제. 이 프로세서는 파일을 한 위치에서 다른 위치로 이동해야 하며 데이터 복사에 사용(X)
- GetFTP: FTP를 통해 원격 파일의 내용을 NiFi로 다운로드한 다음 원본 파일을 삭제. 한 위치에서 다른 위치로 데이터를 복사하는 데 사용(X)
- GetSFTP: SFTP를 통해 원격 파일의 내용을 NiFi로 다운로드한 다음 원본 파일을 삭제. 한 위치에서 다른 위치로 데이터를 복사하는 데 사용(X)
- GetJMSQueue: JMS 큐에서 메시지를 다운로드하고 JMS 메시지의 내용을 기반으로 FlowFile을 작성
- GetJMSTopic: JMS 토픽에서 메시지를 다운로드하고 JMS 메시지의 내용을 기반으로 FlowFile을 작성. JMS 속성은 다음과 같습니다 선택적으로 속성으로도 복사가능. 이 프로세서는 영구 가입과 비영구 가입을 모두 지원
- GetHTTP: 원격 HTTP 또는 HTTPS 기반 URL의 콘텐츠를 NiFi에 다운로드.
- ListenHTTP: HTTP(또는 HTTPS) 서버를 시작하고 들어오는 연결을 수신 대기. 들어오는 POST 요청의 경우 요청 내용 FlowFile로 작성되고 200 응답이 반환
- GetHDFS: HDFS에서 사용자 지정 디렉터리를 모니터링. 새 파일이 HDFS에 들어갈 때마다 NiFi에 복사되고 HDFS에서 삭제. 이 프로세서는 파일을 한 위치에서 다른 위치로 이동해야 하며 데이터 복사에 사용(X), 이 프로세서는 또한 클러스터 내에서 실행되는 경우 기본 노드에서만 실행될 것으로 예상.
- FetchS3Object: AWS(Amazon Web Services) S3(Simple Storage Service)에서 객체의 콘텐츠를 가져옴. 아웃바운드 FlowFile에는 콘텐츠가 포함되어 있음.
- GetKafka: 특히 0.8.x 버전의 경우 Apache Kafka에서 메시지를 가져옴. 메시지는 메시지당 FlowFile로 내보내거나 사용자 지정 구분 기호를 사용하여 함께 일괄 처리 가능
- GetMongo: MongoDB에 대해 사용자 지정 쿼리를 실행하고 콘텐츠를 새 FlowFile에 작성
데이터 송신/전송
- PutEmail: 구성된 수신자에게 이메일을 전송. FlowFile의 콘텐츠는 선택적으로 첨부 파일로 전송
- PutFile: FlowFile의 내용을 로컬(또는 네트워크에 연결된) 파일 시스템의 디렉터리에 작성
- PutFTP: FlowFile의 내용을 원격 FTP 서버에 복사
- PutSFTP: FlowFile의 내용을 원격 SFTP 서버에 복사
- PutJMS: FlowFile의 내용을 JMS 메시지로 JMS 브로커에 전송하며, 필요에 따라 속성에 따라 JMS 속성을 추가
- PutSQL: FlowFile의 내용을 SQL DDL 문(INSERT, UPDATE 또는 DELETE)으로 실행. FlowFile의 내용을 매개 변수화할 수 있도록 속성을 매개 변수로 사용할 수 있음
- PutKafka: FlowFile의 콘텐츠를 Apache Kafka, 특히 0.8.x 버전의 경우 메시지로 전송. FlowFile은 단일 메시지 또는 구분 기호(예: 단일 FlowFile에 대해 많은 메시지를 보내기 위해 new-line을 지정가능
- PutMongo: FlowFile의 내용을 INSERT 또는 UPDATE로 Mongo에 전송
분할 및 집계
- SplitText: SplitText는 콘텐츠가 텍스트인 단일 FlowFile을 가져와서 구성된 FlowFile에 따라 1개 이상의 FlowFile로 분할 가능. 예를 들어 FlowFile을 각각 1줄에 불과한 여러 FlowFile로 분할하도록 프로세서를 구성가능
- SplitJson: 사용자가 배열 또는 여러 자식 개체로 구성된 JSON 개체를 JSON 요소당 FlowFile로 분할 가능
- SplitXml: 사용자가 XML 메시지를 각각 원본의 세그먼트를 포함하는 여러 FlowFile로 분할
- MergeContent: 이 프로세서는 여러 FlowFile을 단일 FlowFile로 병합하는 작업을 담당. FlowFiles는 다음을 연결하여 병합가능. FlowFiles를 범주화 가능.
HTTP
- GetHTTP: 원격 HTTP 또는 HTTPS 기반 URL의 콘텐츠를 NiFi에 다운로드. 프로세서는 마지막 수정 날짜를 기억. 데이터가 지속적으로 수집되지 않도록 방지.
- ListenHTTP: HTTP(또는 HTTPS) 서버를 시작하고 들어오는 연결을 수신 대기. 들어오는 POST 요청의 경우 요청 내용 FlowFile로 작성되고 200 응답이 반환
- InvokeHTTP: 사용자가 구성한 HTTP 요청을 수행. 이 프로세서는 GetHTTP 및 PostHTTP보다 훨씬 더 다재다능합니다 그러나 조금 더 많은 구성이 필요. 이 프로세서는 원본 프로세서로 사용할 수 없으며 들어오는 FlowFiles를 순서대로 가져와야함. 작업을 수행하기 위해 트리거됩니다.
- PostHTTP: HTTP POST 요청을 수행하여 FlowFile의 내용을 메시지 본문으로 전송.
이상입니다. 다음장에서 프로세서 속성에 대한 자세한 설명을 이어가도록 하겠습니다.
'빅데이터 > Apache Nifi' 카테고리의 다른 글
Apache nifi 사용 안내서(1) (1) | 2023.12.07 |
---|---|
Apache nifi 시작 안내서(3) (1) | 2023.12.06 |
Apache nifi 시작 안내서(1) (1) | 2023.12.05 |
Apache nifi 개발자 안내서(1) (1) | 2023.12.05 |
Apache Nifi SplitJson, JsonPath Expression (0) | 2023.11.10 |