[NiFi] NiFi 권장 설정값
by Jaesang Lim
- NiFi로 엄청 삽질했다.. 프로세서 구현은 매우 간단하고 고민해야할 사항이 한정적이였는데
- 실제 클러스터 환경에서 돌려보니, 재시작만 해도 JVM Heap 사용량이 100% 올라가고..
- LogLevel도 TRACE로 설정해도 딱히 나오는 것도 없고..
- 이 상황에서 유용한 JVM GC 모니터링하는 명령어를 배웠다 ㅎㅎ
- jstat -gcutil ${PID} -t -h20 1s
- -t는 타임값이 나오고, h20은 20줄마다 header를 찍어준다
- 일단 그래서 모든 설정값을 default로 변경하고 hortonworks에서 권장하는 설정값을 차근차근 정리하고, 적용해서 해결할 것이다!
NiFi 설정값
nifi.flow.configuration.file
- 화면에 보이는 그래프 저장 경로
- default : ./conf/flow.xml.gz
nifi.flow.configuration.archive.dir
- 그래프 백업 저장 경로
- default : ./conf/archive
- 30일, 500메가로 기본 설정되고 바꿀 수 있음
nifi.bored.yield.duration
- 프로세서가 할 일 있는 지 확인하는 주기,
- default :10ms
- deafult보다 작으면 latency 줄어드나, cpu많이 씀. 더 길면 cpu 아껴서 사용할 수 있음
content Repository 경로와 flowfile Repository 경로는 다른 곳으로 권장
nifi.provenance.repository.max.storage.size
- 주어진 기간이나 사이즈(rollover.time / size) provenance 정보 저장 파일 만드는 최대 크기,
- default : 1G
- 프로덕션에서는 1~2T해도 무방이라고 적혀있는데 nifi.provenance.repository.index.shard.size를 고려했을 때 20-30G가 적당해 보임
nifi.provenance.repository.rollover.size
- 단일event file 사이즈
- default : 100MB
- 프로덕션에서는 1G정도가 적당
nifi.provenance.repository.index.threads
- Provenace Repository location 당 1-2개 적당,
- 4개 넘지 않도록 할 것
nifi.provenance.repository.index.shard.size
- nifi.provenance.repository.max.storage.size의 반보다 작게
- 프로덕션에서는 4-8G로 권장
nifi.provenance.repository.concurrent.merge.threads
- number of merge threads * the number of storage locations =< index.threads
- 예를 들어 인덱스 스레드가 8개고 스토리지가 2개면 머지 스레드는 4개 이하로
nifi.queue.swap.threshold
- 큐 스왑하는 임계치 ( 개별 큐에 해당 )
- 스왑이 발생하면, flowfile_repository/swap 폴더에서 확인할 수 있음
- default : 20000
- 큐가 자주 넘친다면 조금 키우는 것 고려. 이거 올리면 Heap도 같이 올려줄 것
- 왜냐면 swap되지 않은 큐에 있는 flowfile은 Heap에 상주하기 때문
nifi.provenance.repository.implementation=org.apache.nifi.provenance.WriteAheadProvenanceRepository
- 이거 사용할 거면 bootstrap.conf에서 G1GC는 주석처리할 것
- 이거 관련해서 저번 NiFi 관련 블로그에 올렸었는데, G1GC에서의 문제점이 있다는 hortonworks 글을 보았음… ㅠㅠ
- G1GC 대신, CMS GC로 선택했음
- java.arg.13=‐XX:+UseConcMarkSweepGC
해당 리눅스 서버 설정
/etc/security/limits.conf
최대 파일 핸들러
- 파일 많이 여니까 limit 상향
- hard nofile 50000
- soft nofile 50000
최대 프로세스 포크
- 쓰레드 많이 생성하니까 상향
- hard nproc 10000
- soft nproc 10000
TCP 소켓 포트 수 상향
- sudo sysctl -w net.ipv4.ip_local_port_range=”10000 65000”
TIME_WAIT 설정 (빨리빨리 teardown 시킴)
-sudo sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=”1”
etc/sysctl.conf
스왑하지 않게 설정
- m.swappiness = 0
저장소 파티션에 noatime 옵션 지정
- /etc/fstab 에서 수정
서버 사양
- 처리량 관점에서 볼 때 프로덕션에서는 최소 하드디스크 6개/각 2TB 에 5대 급으로 운영하는게 적당해 보임
- 100MB/s, 10000이벤트/s 정도~
Subscribe via RSS