아래 가이드에서 현재 나에게 중요하거나 알아둬야겠다고 생각하는 부분만 여기 적는다.
nifi.apache.org/docs/nifi-registry-docs/html/getting-started.html
nifi.apache.org/docs/nifi-registry-docs/html/user-guide.html
nifi.apache.org/docs/nifi-registry-docs/html/administration-guide.html
NiFi Registry 다운받는 곳 : nifi.apache.org/registry.html
NiFi 레지스트리란,
NiFi 의 Flow을 저장하고 관리함
사용자와 그룹 및 정책을 관리함
Flow 를 저장하고 버저닝 할 수 있음. 기록된 버전들을 검색할 수 있고, 되돌릴 수 있음
NiFi 레지스트리는 NiFi 와 다르게 동작하고 있음
실행할 때도 bin/nifi-registry.sh run(혹은 start) 명령으로 NiFi 와 상관없이 실행시킴 [참고]
NiFi 레지스트리를 실행하기 위해서는 JDK 8 (1.8.0_45) 이상이 필요함
기본 포트 번호는 18080 (물론 conf 를 수정하여 변경 가능)
http://localhost:18080/nifi-registry 를 통해 WebUI 에 접근 가능
NiFi WebUI 에 나타나는 flow 버전 상태
Up to date : 현재 flow 버전이 최신 버전임
Locally modified : 로컬에 변경 사항이 생김
Stale : 새로운 flow 버전을 사용할 수 있음
Locally modified and stale : 로컬에 변경 사항이 생겼고, 새로운 flow 버전을 사용할 수 있음
Sync failure : 레지스트리와 flow 연동에 실패함(최신 flow가 있는지 알 수 없고 업데이트도 불가능)
번들이란, A binary artifact containing one or more extensions that can be run in NiFi or MiNiFi(아티팩트란, 소프트웨어, 시스템, 앱 등이 생성하는 다양한 산출물들을 의미함. 예를 들어 java class 파일이나 jar 파일, 혹은 로그 등)
bucket(버킷) 이란, flow 및 번들같은 버저닝이 되는 항목들을 저장하고 구성하는 컨테이너
Policy(정책) 이란, 사용자 혹은 그룹이 특정 작업을 수행할 수 있는 권한을 정의
정책은 레지스트리에서 버킷별로 수정 가능하며, 총 4가지 정책이 있음.
- all : 레지스트리에서 그리고 NiFi 에서, 사용자는 아래 모든 권한을 갖음
- read : 레지스트리에서, 사용자는 버킷의 Flow 를 읽을 수 있음
NiFi 에서, 사용자는 버킷에서 Flow import 가 가능
- write : NiFi 에서, 사용자는 버킷의 Flow 에 새로운 commit 을 할 수 있음
- delete : 레지스트리에서, 할당된 사용자는 버킷의 Flow 삭제가 가능
아무런 policy 도 수정하지 않은 상태라면 누구나 권한을 갖게 되므로 아무나 WebUI 에 접근 가능하다.
로그인 기능을 만들어서 접근을 제한할 수 있음.
WebUI 에는 사용자가 접근 가능한 버킷들만 나타난다.
NiFi 레지스트리는 NiFi 처럼 클러스터로 동작할 수 없다.
관련 내용 링크
issues.apache.org/jira/browse/NIFIREG-150
pierrevillard.com/tag/nifi-registry/
NiFi Registry 에 Secure 적용 방법을 아래 유튜브 비디오에서 잘 설명해준다.
www.youtube.com/watch?v=qD03ao3R-a4&t=3s&ab_channel=AndrewLim
NiFi Registry 는 Persistant Provider 를 사용하여 각 버전 항목의 내용들(flow들)을 저장할 수 있음.
이 provider 는 nifi-registry.properties 에서 구성 가능.
세 가지 provider 가 있음
- FileSystemFlowPersistenceProvider
- GitFlowPersistenceProvider
- DatabaseFlowPersistenceProvider
< FileSystemFlowPersistenceProvider >
flow 를 단순히 직렬화시켜서 디렉토리( {bucket-id}/{flow-id}/{version} )로 저장
예를 들어, 이름이 MyBucket 인 버켓 안에 두 개의 flow 가 있고, 각각의 id 가 aaa, bbb 라고 하자.
aaa flow 에는 1,2,3,4 버전이 저장되어있고,
bbb flow 에는 1,2 버전이 저장되어 있다고 하면 아래와 같은 디렉토리로 Storage 에 저장된다.
< GitFlowPersistenceProvider >
이름에서 알 수 있듯이, Registry 내용을 git 에 연동시켜 저장한다.
다만 NiFi 레지스트리 외부에 저장된 파일을 수정하는 것은 지원되지 않는단다.
버킷은 디렉터리에 표시되고 Bucket 내부 flow는 Bucket 디렉터리 내에 파일로 저장됨
flow snapshot 기록은 Git 커밋으로 관리됨 (git 의 history 를 통해 snapshot 기록을 볼 수 있음)
즉, 최신버전의 버킷(최신 flow)만 Git 디렉터리에서 볼 수 있음.
과거 버전은 Git history(commit 기록)에서 검색하여 보면 됨.
각 Bucket 에는 bucket.yml 파일이 존재하는데,
이 파일은 NiFi Registry 버킷 및 flow ID에서 실제 디렉터리 및 파일 이름으로의 링크를 관리한다고 함
NiFi 레지스트리가 시작되면 GitFlowPersistenceProvider 는 git 의 commit 기록을 읽고
bucket.yml 파일을 조회하여 각 스냅샷 버전에 대한 버킷 및 flow를 복원한다고 함.
bucket.yml 의 정보를 토대로, "버켓"과
"Bucket 내부에 들어있는 실제 flow snapshot 파일들(이를테면 Bucket_A 내의 Flow_1.snapshot)" 을 연결해주나 봄.
실제 git 과 연결할 때, GitFlowPersistenceRepository 는 git 초기화에 사용되는 사용자 이름과 이메일 주소를 사용한다고 함.
여기서 git 초기화란, git init 이나 git clone 을 통해 생성된 .git 이 포함된 디렉토리를 준비하는 것을 말 함.
< Persistant Provider 교체 방법 >
아래 유튜브 비디오에서 설명을 잘 해주니 참고
www.youtube.com/watch?v=kK7eVppg9Aw&ab_channel=AndrewLim
아래는 공식 문서 내용임.
FileSystemFlowPersistenceProvider 에서 GitFlowPersistenceProvider 로 provider 를 교체한다고 하자.
1. 모든 NiFi process group에서 Registry 와 연결 해제(버전 컨트롤 해제)
2. NiFi Registry 멈춤
3. Move the H2 DB (specified as nifi.registry.db.directory in nifi-registry.properties) and Flow Storage Directory for FileSystemFlowPersistenceProvider directories somewhere for back up
4. NiFi Registry 의 provider.xml 에 GitFlowPersistenceProvider 를 구성 (문서 참고)
5. NiFi Registry 재실행
6. 버켓 새로 생성
7. NiFi 의 process group 버전 컨트롤을 다시 시작
3번은 뭔 말인지 모르겠는데, back up 용도라는 것 같으니 skip 해도 무방할 듯?
git 을 통해 저장한 version 들(flow)을, 새로운 NiFi Cluster 가 가져와서 그대로 사용할 수 있는지 직접 봐야겠다.
'NiFi' 카테고리의 다른 글
[NiFi] HA 관련하여 찾아본 정보 및 내 생각 (0) | 2021.01.15 |
---|---|
[NiFi] Kerberos protocol 동작 순서 및 NiFi 적용 방법 링크 (0) | 2020.12.30 |
[NiFi] Apache NiFi 버전 업그레이드하는 방법 (문서대로) (0) | 2020.12.15 |
[NiFi] Kubernetes 위에서 NiFi 구동 경험 링크 (0) | 2020.11.25 |
[Nifi] Developer’s Guide 공부 필기 (0) | 2020.11.17 |