프로세서 설정의 Scheduling 탭에서 정한다.
| 항목 | 의미 |
|---|---|
| Timer driven | Run Schedule 간격마다 실행한다. 기본값이며 0 sec 이면 쉬지 않고 돈다 |
| CRON driven | CRON 식이 가리키는 시각에 실행한다 |
| Concurrent Tasks | 이 프로세서가 한 노드에서 동시에 쓰는 스레드 수 |
| Run Schedule | 스케줄 간격. 실행 시간이 아니라 실행 시작 사이의 최소 간격 이다 |
| Execution | All nodes 또는 Primary node only |
| Run Duration | 한 번 스케줄될 때 계속 처리할 시간. 늘리면 처리량이 오르고 지연이 늘어난다 |
Run Schedule 을 10 초로 두면 10 초마다 한 번 스케줄된다. 앞 실행이 10 초보다 오래 걸리면 끝나는 즉시 다음이 스케줄되므로, 정확히 10 초 주기를 보장하는 값은 아니다. 처리할 FlowFile 이 없으면 스케줄돼도 곧바로 반환한다.
Concurrent Tasks 는 동시 수행 수가 맞다. 다만 노드마다 적용되므로 3 노드 클러스터에서 2 로 두면 클러스터 전체로는 6 개 스레드가 돈다. 전체 스레드 상한은 Maximum Timer Driven Thread Count 로 따로 제한된다. 상태를 다루는 프로세서나 순서가 중요한 프로세서는 1 로 둔다.
Quartz 형식이며 필드가 여섯 또는 일곱 개다. 리눅스 crontab 의 다섯 필드와 다르므로 그대로 옮기면 안 된다.
초 분 시 일 월 요일 [년]
| 하려는 것 | 식 |
|---|---|
| 매일 05:00 | 0 0 5 * * ? |
| 매일 21:00 | 0 0 21 * * ? |
| 매일 23:00 | 0 0 23 * * ? |
| 월요일부터 금요일 05:00 | 0 0 5 ? * MON-FRI |
| 일요일 01:30 | 0 30 1 ? * SUN |
| 매월 1 일 02:00 | 0 0 2 1 * ? |
| 매시 정각 | 0 0 * * * ? |
| 5 분마다 | 0 0/5 * * * ? |
일(day-of-month) 과 요일(day-of-week) 필드는 둘 중 하나가 반드시 ? 여야 한다. 둘 다 * 로 두면 식이 유효하지 않다고 거부된다. 요일을 지정하면 일 필드를 ? 로, 일을 지정하면 요일 필드를 ? 로 둔다.
기준 시각은 NiFi JVM 의 기본 타임존이다. 서버가 UTC 이면 0 0 5 * * ? 는 한국시간 14:00 에 돈다. 한국시간 기준으로 쓰려면 OS 타임존을 맞추거나 bootstrap.conf 에 지정한다.
java.arg.20=-Duser.timezone=Asia/Seoul
컨테이너에서는 TZ=Asia/Seoul 환경변수만으로는 JVM 이 따라오지 않는 경우가 있으므로 위 JVM 인자를 함께 준다.
CRON driven 프로세서도 클러스터의 모든 노드에서 각각 실행된다. 하루 한 번 한 곳에서만 돌려야 하면 Execution 을 Primary node only 로 바꾼다.
큐에 들어와도 바로 처리하지 않고 몇 초 기다리게 하려는 요구가 있다. 방법에 따라 성격이 다르다.
Run Schedule 을 5 초로 두면 스케줄 간격이 5 초가 될 뿐, 큐에 이미 들어 있던 FlowFile 은 다음 스케줄에서 곧바로 처리된다. 개별 FlowFile 을 일정 시간 붙잡아 두려면 앞에 처리 지연 수단을 둔다.
${now():toNumber():minus(${arrival}):gt(5000)} 이 참일 때만 통과시키며 거짓이면 자기 자신으로 되돌린다. 5 초 지연이 정확히 필요할 때 쓴다.Penalty Duration 과 Yield Duration 은 다른 값이다. Penalty 는 FlowFile 단위, Yield 는 프로세서 단위로 다음 스케줄까지 쉬는 시간이다.