상태 저장 쿼리에 대한 비동기 상태 검사점
참고 항목
Databricks Runtime 10.4 LTS 이상에서 지원됩니다.
비동기 상태 검사점은 스트리밍 쿼리에 대해 정확히 한 번 보장을 유지하지만 상태 업데이트에서 병목 현상이 발생하는 일부 구조적 스트리밍 상태 저장 워크로드에 대한 전체 대기 시간을 줄일 수 있습니다. 이 작업은 상태 검사점이 완료될 때까지 기다리지 않고 이전 마이크로 일괄 처리의 계산이 완료되는 즉시 다음 마이크로 일괄 처리를 처리하기 시작하여 수행됩니다. 다음 table에서는 동기 및 비동기 체크포인팅의 장단점을 비교합니다.
특성 | 동기 검사점 | 비동기 검사점 |
---|---|---|
대기 시간 | 각 마이크로 일괄 처리에 대한 대기 시간이 더 깁니다. | 마이크로 일괄 처리가 겹칠 수 있으므로 대기 시간이 줄어듭니다. |
다시 시작 | 마지막 일괄 처리로만 빠른 복구를 다시 실행해야 합니다. | 마이크로 일괄 처리보다 더 높은 다시 시작 지연이 다시 실행되어야 할 수 있습니다. |
다음은 비동기 상태 검사점 설정의 이점을 얻을 수 있는 스트리밍 작업 특성입니다.
- 작업에 상태 저장 작업(예: 집계,
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 기반 상태 저장소를 사용해야 합니다. Set 다음 구성을.
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 파이프라인의 클러스터 사용률 Optimize을 향상된 자동 크기 조정과 함께 확인하세요.
- 하나 이상 저장소의 비동기 검사점에서 오류가 발생하면 쿼리가 실패합니다. 동기 검사점 지정 모드에서는 검사점이 작업의 일부로 실행되며, 쿼리가 실패하기 전에 Spark에서 작업을 여러 번 다시 시도합니다. 비동기 상태 검사점 지정에서는 이 메커니즘이 없습니다. Databricks는 작업 실패에 대한 자동 재시도에 연속 작업을 사용하는 것이 좋습니다. 연속 실행 작업을 참조하세요.
- 비동기 검사점 설정은 마이크로 일괄 처리 실행 간에 상태 저장소 위치가 변경되지 않을 때 가장 잘 작동합니다. 클러스터 크기 조정은 비동기 상태 검사점과 함께 작동하지 않을 수 있습니다. 클러스터 크기 조정 이벤트의 일부로 노드가 추가되거나 삭제될 때 상태 저장소 인스턴스가 다시 배포되지 get 수 있기 때문입니다.
- 비동기 상태 검사점 지정은 RocksDB 상태 저장소 공급자 구현에서만 지원됩니다. 기본 메모리 내 상태 저장소 구현에서는 지원되지 않습니다.