상태 저장 쿼리에 대한 비동기 상태 검사점
참고 항목
Databricks Runtime 10.4 LTS 이상에서 지원됩니다.
비동기 상태 검사점은 스트리밍 쿼리에 대해 정확히 한 번 보장을 유지하지만 상태 업데이트에서 병목 현상이 발생하는 일부 구조적 스트리밍 상태 저장 워크로드에 대한 전체 대기 시간을 줄일 수 있습니다. 이 작업은 상태 검사점이 완료될 때까지 기다리지 않고 이전 마이크로 일괄 처리의 계산이 완료되는 즉시 다음 마이크로 일괄 처리를 처리하기 시작하여 수행됩니다. 다음 표에서는 동기 검사점과 비동기 검사점의 장단점을 비교합니다.
특성 | 동기 검사점 | 비동기 검사점 |
---|---|---|
대기 시간 | 각 마이크로 일괄 처리에 대한 대기 시간이 더 깁니다. | 마이크로 일괄 처리가 겹칠 수 있으므로 대기 시간이 줄어듭니다. |
다시 시작 | 마지막 일괄 처리로만 빠른 복구를 다시 실행해야 합니다. | 마이크로 일괄 처리보다 더 높은 다시 시작 지연이 다시 실행되어야 할 수 있습니다. |
다음은 비동기 상태 검사점 설정의 이점을 얻을 수 있는 스트리밍 작업 특성입니다.
- 작업에 상태 저장 작업(예: 집계,
flatMapGroupsWithState
,mapGroupsWithState
, 스트림-스트림 조인)이 하나 이상 있습니다. - 상태 검사점 대기 시간이 전체 일괄 처리 실행 대기 시간의 주요 원인 중 하나입니다. 이 정보는 StreamingQueryProgress 이벤트에서 찾을 수 있습니다. Spark 드라이버의 log4j 로그에도 해당 이벤트가 포함되어 있습니다. 다음은 상태 검사점이 전체 일괄 처리 실행 대기 시간에 미치는 영향을 찾는 방법과 스트리밍 쿼리 진행률의 예제입니다.
-
{ "id" : "2e3495a2-de2c-4a6a-9a8e-f6d4c4796f19", "runId" : "e36e9d7e-d2b1-4a43-b0b3-e875e767e1fe", "...", "batchId" : 0, "durationMs" : { "...", "triggerExecution" : 547730, "..." }, "stateOperators" : [ { "...", "commitTimeMs" : 3186626, "numShufflePartitions" : 64, "..." }] }
위 쿼리 진행률 이벤트의 상태 검사점 대기 시간 분석
- 일괄 처리 기간(
durationMs.triggerDuration
)은 약 547초입니다. - 상태 저장소 커밋 대기 시간(
stateOperations[0].commitTimeMs
)은 약 3,186초입니다. 커밋 대기 시간은 상태 저장소를 포함하는 작업에서 집계됩니다. 이 경우 해당 작업(stateOperators[0].numShufflePartitions
)은 64개입니다. - 상태 연산자를 포함하는 각 작업의 검사점에 평균 50초(3,186/64)가 소요되었습니다. 일괄 처리 기간에 영향을 미친 추가 대기 시간입니다. 64개 작업이 모두 동시에 실행된다고 가정할 때 검사점 단계는 일괄 처리 기간의 약 9%(50초/547초)를 차지했습니다. 최대 동시 작업이 64개보다 작으면 백분율이 더 높아집니다.
- 일괄 처리 기간(
-
비동기 상태 검사점 지정 사용
비동기 상태 검사점에는 RocksDB 기반 상태 저장소를 사용해야 합니다. 다음 구성을 설정합니다.
spark.conf.set(
"spark.databricks.streaming.statefulOperator.asyncCheckpoint.enabled",
"true"
)
spark.conf.set(
"spark.sql.streaming.stateStore.providerClass",
"com.databricks.sql.streaming.state.RocksDBStateStoreProvider"
)
비동기 검사점 설정의 제한 사항 및 요구 사항
참고 항목
구조화된 스트리밍 워크로드의 경우 컴퓨팅 자동 크기 조정에는 클러스터 크기를 스케일 다운하는 데 제한이 있습니다. Databricks는 스트리밍 워크로드에 대해 향상된 자동 크기 조정과 함께 Delta Live Tables를 사용하는 것이 좋습니다. 향상된 자동 크기 조정을 사용하여 Delta Live Tables 파이프라인의 클러스터 사용률 최적화를 참조 하세요.
- 하나 이상 저장소의 비동기 검사점에서 오류가 발생하면 쿼리가 실패합니다. 동기 검사점 지정 모드에서는 검사점이 작업의 일부로 실행되며, 쿼리가 실패하기 전에 Spark에서 작업을 여러 번 다시 시도합니다. 비동기 상태 검사점 지정에서는 이 메커니즘이 없습니다. Databricks는 작업 실패에 대한 자동 재시도에 연속 작업을 사용하는 것이 좋습니다. 연속 실행 작업을 참조하세요.
- 비동기 검사점 설정은 마이크로 일괄 처리 실행 간에 상태 저장소 위치가 변경되지 않을 때 가장 잘 작동합니다. 비동기 상태 검사점과 함께 클러스터 크기 조정은 클러스터 크기 조정 이벤트의 일부로 노드가 추가되거나 삭제될 때 상태 저장소 인스턴스가 다시 분산될 수 있기 때문에 제대로 작동하지 않을 수 있습니다.
- 비동기 상태 검사점 지정은 RocksDB 상태 저장소 공급자 구현에서만 지원됩니다. 기본 메모리 내 상태 저장소 구현에서는 지원되지 않습니다.