Apache Flink는 제한되지 않은 데이터 스트림과 제한된 데이터 스트림을 처리하기 위한 오픈 소스 스트림 처리 프레임워크입니다. Flink의 시간 창 작업에서 트리거는 창을 계산하고 결과를 출력하는 시기를 결정하는 매우 중요한 개념입니다. 트리거는 창이 처리될 준비가 된 시점(즉, 계산이 트리거된 시점)에 대한 조건을 정의합니다. 창 유형
시간 창(Time Windows): 롤링 시간 창(Tumbling Time Windows) 및 슬라이딩 시간 창(Sliding Time Windows)과 같은 시분할 기반 창.
이벤트 기간(이벤트 시간 창): 이벤트 타임스탬프를 기반으로 하는 창으로, 순서가 잘못된 데이터를 처리할 수 있습니다.
방아쇠
트리거는 창이 계산 준비가 되는 조건을 정의하는 데 사용됩니다. Flink는 일부 내장 트리거를 제공하며 사용자가 필요에 따라 트리거를 사용자 정의할 수 있습니다.
내장 트리거
처리시간트리거: 지정된 시간 간격에 도달할 때마다 실행되는 처리 시간 기반 트리거입니다.
이벤트타임트리거 : 이벤트 시간을 기준으로 트리거되며, 창의 종료 시간에 도달하면 트리거됩니다. 이는 순서가 있거나 순서가 없는 이벤트 시간 데이터 스트림을 처리하는 데 적합합니다.
카운트 트리거: 요소 수를 기준으로 트리거되며, 창의 요소 수가 지정된 임계값에 도달하면 트리거됩니다.
맞춤 트리거
사용자는 트리거 인터페이스를 구현하여 사용자 정의 트리거를 만들 수 있습니다. 사용자 정의 트리거는 복잡한 논리를 기반으로 창 계산을 트리거할 시기를 결정할 수 있습니다. 맞춤 트리거는 일반적으로 다음 메서드를 구현해야 합니다.
요소에(element, timestamp, window, ctx): 윈도우에 요소가 추가될 때 호출됩니다.
이벤트 시간(time, window, ctx, out) : 윈도우의 이벤트 시간이 도래하면 호출됩니다.
처리 시간(time, window, ctx, out) : 윈도우의 처리 시간이 도래하면 호출됩니다.
onMerge(기타): 두 개의 창이 병합될 때 호출됩니다(예: 세션 창에서 사용됨).
병합할 수 있습니다(): 트리거가 창 병합을 지원하는지 여부를 나타냅니다.
효과
트리거의 주요 기능은 창의 계산 타이밍을 제어하여 Flink의 창 작업을 더욱 유연하고 강력하게 만드는 것입니다. 올바른 트리거를 선택하면 스트림 처리 애플리케이션의 성능과 리소스 활용도를 최적화할 수 있습니다.
예
다음은 Flink 창과 트리거를 사용하는 간단한 예입니다(Java API가 사용된다고 가정).