발행일: February 24, 2025
작성자: 아니쉬 슈리곤데카르, 보 가오, Craig Lukasik, 에릭 마르나디, 제이 팔라니아판, 징 잔, 정택 임, 카르틱 라마사미, Neil Ramaswamy, Praveen Gattu, 탕감 바이야푸리
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
상태 유지 스트림 처리는 지금까지 본 이벤트를 기반으로 상태를 유지하면서 실시간으로 연속적인 이벤트 스트림을 처리하는 것을 의미합니다. 이를 통해 시스템은 이벤트 스트림에서 시간에 따른 변화와 패턴을 추적하고, 이 정보를 기반으로 결정을 내리거나 조치를 취할 수 있습니다.
Apache Spark 구조화된 스트리밍에서 상태 유지 스트림 처리는 내장 연산자(윈도우 집계, 스트림-스트림 조인, 중복 제거 등)를 사용하여 사전 정의된 로직을 지원하고, flatMapGroupWithState 또는 mapGroupWithState 를 사용하여 임의의 로직을 지원합니다. 임의의 로직을 통해 사용자들은 파이프라인에서 사용자 정의 상태 조작 코드를 작성할 수 있습니다. 그러나, 스트리밍의 기업에서의 채택이 증가함에 따라, 더 복잡하고 정교한 스트리밍 애플리케이션들은 개발자들이 상태 유지 스트리밍 파이프라인을 작성하는 것을 더 쉽게 만들기 위해 여러 추가 기능을 요구합니다.
이러한 새롭고 성장하는 상태 유지 스트리밍 애플리케이션 또는 운영적 사용 사례를 지원하기 위해, Spark 커뮤니티는 transformWithState라는 새로운 Spark 연산자를 도입하고 있습니다. 이 연산자를 사용하면 유연한 데이터 모델링, 복합 유형, 타이머, TTL, transformWithState 이후의 상태 유지 연산자 연결, 스키마 진화, 다른 쿼리에서 상태 재사용, Unity Catalog, Delta Live Tables, Spark Connect 등 다양한 Databricks 기능과의 통합이 가능해집니다. 이 연산자를 사용하면 고객들은 Scala, Java 또는 Python과 같은 인기 있는 언어를 사용하여 mission-critical하고 복잡한 상태 유지 운영 사용 사례를 Databricks 플랫폼에서 안정적이고 효율적으로 개발하고 실행할 수 있습니다.
많은 이벤트 기반 애플리케이션 은 상태 유지 계산을 수행하여 액션을 트리거하거나 일반적으로 Apache Kafka/Apache Pulsar/Google Pub-Sub 등의 다른 이벤트 로그/메시지 버스에 기록되는 출력 이벤트를 의존합니다. 이러한 애플리케이션은 보통 규칙을 검증하고, 이상을 감지하고, 세션을 추적하는 등의 상태 기계를 구현하며, 이는 주로 다음을 기반으로 하류 시스템에서 액션을 트리거하는 데 사용되는 파생 결과를 생성합니다:
이러한 애플리케이션의 예로는 사용자 경험 추적, 이상 탐지, 비즈니스 프로세스 모니터링, 그리고 결정 트리가 있습니다.
Apache Spark는 이제 transformWithState를 도입하여, 복잡한 실시간 스트리밍 애플리케이션을 더 유연하고 효율적이며 확장 가능하게 만드는 차세대 상태 유지 처리 연산자를 제공합니다. 이 새로운 API는 상태 관리, 이벤트 처리, 타이머 관리 및 스키마 진화에 대한 고급 기능을 제공하여 사용자가 복잡한 스트리밍 로직을 쉽게 구현할 수 있게 합니다.
우리는 앞서 언급한 제한 사항을 해결하기 위해 새로운 계층화된, 유연한, 확장 가능한 API 접근법을 도입하고 있습니다. 아래에는 계층화된 아키텍처와 각 계층에서의 관련 기능을 보여주는 고수준 아키텍처 다이어그램이 표시됩니다.

