참고
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는 스트리밍 워크로드에 대해 향상된 자동 크기 조정과 함께 Lakeflow Spark 선언적 파이프라인을 사용하는 것이 좋습니다. 자동 크기 조정을 사용하여 Lakeflow Spark 선언적 파이프라인의 클러스터 사용률 최적화를 참조하세요.
- 하나 이상 저장소의 비동기 검사점에서 오류가 발생하면 쿼리가 실패합니다. 동기 검사점 지정 모드에서는 검사점이 작업의 일부로 실행되며, 쿼리가 실패하기 전에 Spark에서 작업을 여러 번 다시 시도합니다. 비동기 상태 검사점 지정에서는 이 메커니즘이 없습니다. Databricks는 작업 실패에 대한 자동 재시도에 연속 작업을 사용하는 것이 좋습니다. 연속 실행 작업을 참조하세요.
- 비동기 검사점 설정은 마이크로 일괄 처리 실행 간에 상태 저장소 위치가 변경되지 않을 때 가장 잘 작동합니다. 비동기 상태 검사점과 함께 클러스터 크기 조정은 클러스터 크기 조정 이벤트의 일부로 노드가 추가되거나 삭제될 때 상태 저장소 인스턴스가 다시 분산될 수 있기 때문에 제대로 작동하지 않을 수 있습니다.
- 비동기 상태 검사점 지정은 RocksDB 상태 저장소 공급자 구현에서만 지원됩니다. 기본 메모리 내 상태 저장소 구현에서는 지원되지 않습니다.