본문 바로가기
데이터 엔지니어링

Dataflow Windowing : watermark

by 내기록 2024. 5. 17.
반응형

목차 LIST

     

    Dataflow Windowing

    Dataflow Windowing은 스트리밍 데이터를 다룰 때 사용하는 핵심 데이터플로우 전략 중 하나입니다. 스트리밍 데이터를 다루기 위한 시스템적인 접근을 제공하는데, 특정 chunk 단위나 windows로 나누는 방법입니다.

     

    1. Dividing the Stream info finite Windows

    스트리밍 데이터를 유한한 윈도우로 쪼개는 방식입니다. 스트리밍 시나리오에서 데이터는 특정 시간 범위나 윈도우로 나눕니다.

    예를 들어, 주어진 시간 범위 내에서 평균을 구하고자 할 때 사용할 수 있습니다. 

     

    특히 대량의 데이터를 다룰 때 이렇게 윈도우를 사용하는 것은 쉽지 않을 수 있습니다. 하지만 데이터플로우는 이 과정을 더 단순화할 수 있습니다. 메시지를 pub/sub 과 같은 방식으로 읽을 때 각각의 메시지에는 timestamp 값이 포함되어 있습니다. 이 timestamp는 데이터를 다른 시간 윈도우로 분류하는 데 사용되며, 윈도우 단위로 더 세밀하게 분석하거나 집계할 수 있습니다.

     

    참고 : tumbling window and sliding window

     

     

    2. Watermarks and Lag Time

    워터마크는 스트리밍 데이터 처리에서 데이터가 늦게 도착할 수 있는 시간을 허용하는 기준입니다. 예) 10분

     

    데이터플로우의 주요 특징 중 하나는 "watermark"를 계산할 수 있는 것입니다. watermark를 사용하면 실제 데이터가 생성된 시간으로부터 현재 처리가 얼마나 뒤쳐져 있는지 파악할 수 있습니다. 이것은 중요한 일인데, 왜냐하면 스트리밍 데이터는 다양한 이유로 데이터가 늦게 수집될 가능성이 굉장히 많기 때문입니다. 워터마크는 지연시간(lag time)을 이해하고 늦게 유입된 데이터를 어떻게 처리할지 결정하는데 도움을 줍니다. 기본적으로, 데이터플로우는 워터마크가 경과할 때까지 기다린 후 윈도우(특정 시간 범위 내의 데이터)를 처리하여 해당 기간 동안 대부분의 데이터가 도착했음을 보장합니다. 늦게 유입된 데이터는 설정에 따라 삭제하거나 윈도우를 다시 처리하는데 사용할 수 있습니다.

     

    Watermark

    https://subscription.packtpub.com/book/data/9781800564930/2/ch02lvl1sec08/measuring-event-time-progress-inside-data-streams

     

    워터마크에 대해 조금 더 다뤄보겠습니다.

     

    워터마크는 스트리밍 데이터 프로세싱에서 사용하는 개념으로, 실제 시간과 데이터 프로세싱 시스템 사이에 얼마 동안의 지연이 허용되는지를 결정합니다. 워터마크는 시스템에서 시간의 개념을 제공하고, 데이터를 처리한 시점 까지의 시간을 나타냅니다. 워터마크는 데이터가 늦게 도착하거나 순서가 뒤바뀌는 문제를 다룰 수 있게 해주며, 이는 실시간 데이터 프로세싱에서 흔히 사용되는 개념입니다.

     

    왜 워터마크라고 부를까?

    시간의 흐름을 시각적으로 나타내는 기준선과 비슷하다. 실제 물에서의 워터마크는 수위의 최고점을 나타내며, 이것을 통해 물이 어디까지 찼는지 알 수 있는데 이와 유사하게 스트리밍 데이터 프로세싱에서의 워터마크는 데이터가 처리된 시간의 최고점을 나타내어 현재 시스템이 어디까지 데이터를 처리했는지 알 수 있습니다.

     

    Watermark example

    실시간으로 데이터가 유입되는 시스템을 생각해 봤을 때, 데이터는 특정 시간 간격 안에 도착할 것이라고 기대됩니다. 예를 들어, 01:00에 생성된 데이터는 01:02에 도착하고, 02:00에 생성된 데이터는 02:03에 도착할 것이라고 생각됩니다.

    워터마크는 시스템이 데이터가 2분 늦게, 3분 늦게 들어왔다는 사실을 이해할 수 있게 도와줍니다.

     

    데이터플로우는 워터마크를 계속해서 계산하여 실제 데이터와 시스템 사이에 얼마나 차이가 나는지 파악합니다. 만약 시스템에 4초 동안의 지연이 발생한다면, 데이터플로우는 데이터를 처리하기 전에 4초를 더 기다립니다. 왜냐하면 모든 데이터는 특정 주기 안에 유입될 것이라고 기대하기 때문입니다. 예를 들어, 만약 데이터 도착이 늦어져서 timestamp가 8:04인 데이터가 8:06에 도착하여 2분의 차이가 생기면,  늦게 도착한 데이터를 어떻게 처리할지 결정할 수 있습니다. 시스템은 기본적으로 해당 데이터를 버리겠지만 설정값에 따라 재처리할 수도 있습니다.

     

     

    Conclusion

    결국 워터마크는 데이터를 기다리게 하는 역할과 기다림을 멈추게 하는 역할 두 가지를 다 가집니다.

    데이터가 늦게 도착할 수 있다는 가능성을 고려하여 일정 시간 동안 데이터를 기다립니다.

    그리고 더 이상 기다리지 않고 현재까지 도착한 데이터를 처리하게도 합니다. 설정된 시간이 지나면 현재까지 도착한 데이터만을 가지고 처리하기 때문입니다.

     

    워터마크는 데이터가 늦게 도착할 수 있는 시간을 허용하면서도 일정 시간이 지나면 더 이상 기다리지 않고 처리를 시작하게 하는 기준점 역할을 합니다.

     

     

    References

    https://medium.com/@sasidharan01/streaming-data-with-dataflow-understanding-watermarks-custom-triggers-and-data-accumulation-f4275fe4c883

    반응형

    댓글