구조적 스트리밍 트리거 간격 구성
Apache Spark 구조적 스트리밍은 데이터를 증분 방식으로 처리합니다. 일괄 처리에 대한 트리거 간격을 제어하면 거의 실시간으로 처리하거나, 5분마다 또는 시간당 한 번씩 데이터베이스를 새로 고치거나, 하루 또는 일주일 동안 모든 새 데이터를 일괄 처리하도록 워크로드에 구조적 스트리밍을 사용할 수 있습니다.
Databricks 자동 로더는 구조적 스트리밍을 사용하여 데이터를 로드하기 때문에 트리거가 작동하는 방식을 이해하면 원하는 빈도로 데이터를 수집하면서 비용을 제어할 수 있는 가장 큰 유연성을 제공합니다.
시간 기반 트리거 간격 지정
구조적 스트리밍은 시간 기반 트리거 간격을 "고정 간격 마이크로 일괄 처리"라고 합니다.
processingTime
키워드를 사용하여 기간(예: .trigger(processingTime='10 seconds')
)을 문자열로 지정합니다.
trigger
간격을 너무 작게(수십 초 이하) 지정하면 시스템에서 새 데이터가 도착했는지 확인하기 위해 불필요한 검사를 수행할 수 있습니다. 대기 시간 요구 사항과 데이터가 원본에 도착하는 속도의 균형을 맞추도록 처리 시간을 구성합니다.
증분 일괄 처리 구성
중요한
Databricks Runtime 11.3 LTS 이상 Trigger.Once
에서는 이 설정이 더 이상 사용되지 않습니다. Databricks는 모든 증분 일괄 처리 워크로드에 대해 Trigger.AvailableNow
를 사용하는 것을 권장합니다.
사용 가능한 지금 트리거 옵션은 사용 가능한 모든 레코드를 증분 일괄 처리로 사용하며, 이러한 옵션을 maxBytesPerTrigger
사용하여 일괄 처리 크기를 구성할 수 있습니다(크기 조정 옵션은 데이터 원본에 따라 다름).
Azure Databricks는 여러 구조화된 스트리밍 소스로부터 증분 일괄 처리를 위한 Trigger.AvailableNow
사용을 지원합니다. 다음 표에는 각 데이터 원본에 필요한 최소 지원되는 Databricks 런타임 버전이 포함되어 있습니다.
출처 | 최소 Databricks 런타임 버전 |
---|---|
파일 원본(JSON, Parquet 등) | 9.1 LTS |
Delta Lake | 10.4 LTS |
자동 로더 | 10.4 LTS |
Apache Kafka | 10.4 LTS |
키네시스 | 13.1 |
기본 트리거 간격은 무엇인가요?
구조적 스트리밍은 기본적으로 500ms의 고정 간격 마이크로 일괄 처리로 설정됩니다. Databricks는 새 데이터가 도착했는지 확인하고 크기가 작은 일괄 처리를 처리하는 것과 관련된 비용을 최소화하기 위해 항상 맞춤형 trigger
를 지정하는 것을 권장합니다.
실행 간의 트리거 간격 변경
동일한 검사점을 사용하는 동안 실행 간에 트리거 간격을 변경할 수 있습니다.
마이크로 일괄 처리가 처리되는 동안 구조적 스트리밍 작업이 중지되는 경우 새 트리거 간격이 적용되기 전에 해당 마이크로 일괄 처리가 완료되어야 합니다. 따라서 트리거 간격을 변경한 후 이전에 지정한 설정을 사용하여 마이크로 일괄 처리 처리를 관찰할 수 있습니다.
시간 기반 간격에서 AvailableNow
으로 이동하게 되면, 사용 가능한 모든 레코드를 증분 일괄 처리로 처리하기 전에 마이크로 일괄 처리를 먼저 수행할 수 있습니다.
시간 기반 간격으로 AvailableNow
이동하는 경우 마지막 AvailableNow
작업이 트리거될 때 사용 가능한 모든 레코드를 계속 처리할 수 있습니다. 이는 예상되는 동작입니다.
주의
증분 일괄 처리와 관련된 쿼리 실패에서 복구하려는 경우 일괄 처리를 완료해야 하므로 트리거 간격을 변경해도 이 문제가 해결되지 않습니다. Databricks는 일괄 처리를 처리하는 데 사용되는 컴퓨팅 용량을 확장하여 문제를 해결하는 것이 좋습니다. 드물게 새 검사점을 사용하여 스트림을 다시 시작해야 할 수 있습니다.
연속 처리 모드란?
Apache Spark는 연속 처리라는 추가 트리거 간격을 지원합니다. 이 모드는 Spark 2.3 이후 실험적 모드로 분류되었습니다. 이 처리 모델의 장단 부분을 이해하려면 Azure Databricks 계정 팀과 상의하세요.
이 연속 처리 모드는 DLT에 적용된 연속 처리와 전혀 관련이 없습니다.