1. 시작
아래 선행작업이 필요합니다.(Zookeeper 설치)
https://hbcha0916.tistory.com/63
NiFi를 압축 해제한 디렉토리를 `$NIFI_HOME` 라고 칭하겠다.
2. NiFi
- Apache NiFi 는 시스템 간의 데이터 흐름을 자동화하기 위해 만들어졌다.
- Java로 만든 프로그램이다.(JVM 위에서 실행한다.)
3. 목표
클러스터 3개를 구성하여 장애발생에도 서비스가 유지하기 위함이다.
4. 주의
NiFi 내에 자체적인 zookeeper(embedded zookeeper)가 존재하는데 해당 내용은 embedded zookeeper를 사용하지 않는다. 이말은 즉, zookeeper 애플리케이션을 따로 설치하지 않아도 NiFi끼리 클러스터를 구성할 수도 있다는 이야기이다.
검색 능력이 부족하여 embedded zookeeper와 zookeeper application을 혼동하여 삽질을 했었다.
`conf/zookeeper.properties` 파일을 설정해줄 필요가 없다.
5. 설치
5.1. NiFi 다운로드
아래 사이트에서 최신버전 혹은 버전의 Binaries(Apache NiFi Binary x.x.x) 를 클릭하여 사이트로 이동한 후 "HTTP" 부분에 있는 "https://dlcdn.apache.org/nifi/x.x.x/nifi-x.x.x-bin.zip" 링크의 주소를 복사하여 설치할 디렉토리에서 `wget`한다.
https://nifi.apache.org/download.html
1.23.0 버전 기준
wget https://dlcdn.apache.org/nifi/1.23.0/nifi-1.23.0-bin.zip
unzip nifi-1.23.0-bin.zip
6. 설정
6.1. nifi.properties 설정
`$NIFI_HOME/conf/nifi.properties` 에서 nifi의 속성을 설정한다.
아래 내용을 수정/추가한다.
nifi.state.management.embedded.zookeeper.start=false
# nifi 에 내장된 embeded zookeeper를 사용하지 않는다.
nifi.web.http.host=node1
# 클러스터 별로 다르게 설정
nifi.web.http.port=18080
# NiFi WEB 포트설정(zookeeper 포트와 겹치지 않게 사용한다.)
# https를 사용하면 해당 설정은 무시한다.
nifi.cluster.is.node=true
# 이 nifi는 노드로 사용되냐 = true
nifi.cluster.node.address=node1
# 클러스터 별로 다르게 설정(자신의 ip host 를 적는다.)
nifi.cluster.node.protocol.port=5882
# 클러스터 끼리 통신할 포트
nifi.zookeeper.connect.string=node1:2181,node2:2181,node3:2181
# 연동할 zookeeper서버:port 들을 넣어준다.
6.1.1. 참고
node1, node2, node3은 이전 내용에서 `/etc/hosts` 파일을 수정하여 네임서버를 설정해 주었다.
6.2. state-management.xml 설정
`$NIFI_HOME/conf/state-management.xml` 에서 zookeeper연동 작업을 해준다.
아래 내용을 수정한다.
<cluster-provider>
<id>zk-provider</id>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
<property name="Connect String">node1:2181,node2:2181,node3:2181</property>
<property name="Root Node">/nifi</property>
<property name="Session Timeout">10 seconds</property>
<property name="Access Control">Open</property>
</cluster-provider>
`<property name="Connect String">` 태그 안에 zookeeper의 주소를 적어준다.
7. 기타 설정
아래 설정은 서버의 사양에 따라 설정한다.
7.1. `bootstrap.conf`
자바 관련 설정
7.1.1. NiFi Java Heap 사이즈 변경
java.arg.2=-Xms4096m
java.arg.3=-Xmx10240m
`-Xms` : 기본 Heap 할당용량 (기본 : 512m)
`-Xmx` : 최대 Heap 할당용량 (기본 : 512m)
7.1.2. NiFi TimeZone 설정
NiFi 시간이 UTC로 나올경우 설정법
java.arg.8=-Duser.timezone=Asia/Seoul
7.2. `nifi.properties`
7.2.1. NiFi Queue Swap 개수설정
NiFi Queue에 FlowFile이 일정 개수 이상 쌓이면 보조기억장치로 스왑한다.(기본 20000(개))
nifi.queue.swap.threshold=50000
8. 오류
8.1. “The keystore properties are not valid”
[nifi.properties] 아래 구문들을 공백으로 설정한다.
nifi.security.keystore=
nifi.security.keystoreType=
nifi.security.keystorePasswd=
nifi.security.keyPasswd=
nifi.security.truststore=
nifi.security.truststoreType=
nifi.security.truststorePasswd=
8.2. “nifi java.net.SocketTimeoutException: timeout”
NiFi WEB으로 접속할 때 기본값이 5초로 설정되어있어, 네트워크가 조금 느리면 바로 Timeout을 뿌려버린다. 시간을 늘려주자.
[nifi.properties] 아래 구문들을 30초이상으로 변경한다.
nifi.cluster.node.connection.timeout = 30 sec
nifi.cluster.node.read.timeout = 30 sec
9. 결과
nifi 실행
$NIFI_HOME/bin/nifi.sh start
'클러스터 구성' 카테고리의 다른 글
[Elasticsearch][Ubuntu] Elasticsearch 구성하기 (0) | 2023.08.13 |
---|---|
[kafka][Ubuntu][NiFi] Apache Kafka cluster 구성하기 (0) | 2023.08.06 |
[zookeeper][Ubuntu] Apache zookeeper cluster 구성하기 (0) | 2023.08.01 |