1. 각 프로세서의 Concurrent Tasks : 동시 작업 수. 권장 = 3 ~ 5. 아웃풋 프로세스는 30 ~ 50 이어도 괜찮음.
- ReplaceText 같은 트랜스포메이션 프로세스들은 인/아웃풋 보다 상당한 스펙을 요구함. 10 이 적당.
- 노드당 최대 쓰레드수라고 봐도 무방.
2. Controllers 설정의 'Thread Count' 들은 일반 설정으로 그냥 둠.
3. List 를 제외한 모든 부분은 'All Node' 로 설정
4. 서브 프로세스 그룹 내에 컨트롤러 서비스를 등록
5. 프로세스 그룹 끼리 Input/Output port 를 통해서 데이터 연동
6. NiFi Queue Swap threshold. default 20,000
7. 권장 노드수 3 대 이상
8. 권장 사양 4core 8gb ( jvm heap 6gb )
9. 각 Queue Connection Level 에서 여러 클러스터에 대해 로드밸런싱 허용
Load Balance Starategy
- Do not load balance: 로드밸런스 안함.
- Round-Robin : 라운드로빈 방식
- Parition by attribute : 플로우파일에 있는 특정 attribute를 지정하여 그게 같은 값들은 같은 노드로 보내게 해보림
- Single Node: 원래 쓰던 그 노드로 계속 쓰게 해보림
https://jjaesang.github.io/nifi/2019/02/27/nifi-troble-shooting.html
https://jjaesang.github.io/nifi/2019/03/29/nifi-system-recommend.html
** Helm
** 수동 노드 삭제
1. Create a dummy pod (to perform some actions) :
$ cat << EOF | kubectl apply -n default -f -
kind: Pod
apiVersion: v1
metadata:
name: marks-dummy-pod
spec:
containers:
- name: marks-dummy-pod
image: ubuntu
command: ["/bin/bash", "-ec", "while :; do echo '.'; sleep 5 ; done"]
restartPolicy: Never
EOF
2. Once the pod is started, open a bash into :
$ kubectl -n default exec -it marks-dummy-pod -- /bin/bash
(pod)$ apt update
(pod)$ git clone https://github.com/erdrix/nifi-api-client-python.git
(pod)$ cd nifi-api-client-python
3. Get the url of your nifi LoadBalancer service (outside the the pod):
$ kubectl get service -n <Nifi namespace>
4. Get the last statefulset's nifi node name (during scale down the Statefulset will remove the last one in the sequence) :
(pod)$ python nifi-client-python.py --url http://<nifi-service-external-ip>:<nifi-service-port>/nifi-api --action cluster
**Note : ** The node name should have the following pattern <pod_name>.nifi-headless.<namespace_name>.svc.cluster.local.
5. We are now ready to perform the scale down :
(pod)$ python nifi-client-python.py --url http://<nifi-service-external-ip>:<nifi-service-port>//nifi-api --action decommission --node <node_name> --nodePort <pod_port | by default : 8080>
(pod)$ python nifi-client-python.py --url http://<nifi-service-external-ip>:<nifi-service-port>//nifi-api --action remove --node <node_name>
$ kubectl scale -n <nifi_namespace> sts <nifi_statefulset_name> --replicas=<current_replica_minus_1>
The first call will disconnect the Nifi Node from the cluster, stop all Inputs processors and wait all queues will be drained.
The second one, will remove node from nifi cluster config (which is into zookeeper).
And the last command perform the scale down.
Note : This should be performed by an Operator (cloudera have one in closed beta).
'BigData' 카테고리의 다른 글
KEDA (0) | 2020.11.18 |
---|---|
Apache Nifi Expression Language Cheat Sheet (0) | 2020.11.17 |
NIFI JsonTreeReader (0) | 2020.11.16 |
NiFi로 초당 10 억 개의 이벤트 처리 (0) | 2020.11.11 |
Argo (feat. Jenkins) (0) | 2020.10.29 |