지원되는 언어
실시간 모드는 Scala, Java 및 Python 지원합니다.
컴퓨팅 형식
실시간 모드는 다음 컴퓨팅 유형을 지원합니다.
| 컴퓨팅 형식 | 지원됨 |
|---|---|
| 전용(이전: 단일 사용자) | ✓ |
| 표준(이전: 공유) | ✓ (Python만 해당) |
| Lakeflow Spark 선언적 파이프라인 클래식 | 지원되지 않음(아래 참고 참조) |
| Lakeflow Spark 선언적 파이프라인 서버리스 | 지원되지 않음(아래 참고 참조) |
| Serverless | 지원되지 않음 |
메모
실시간 모드는 Lakeflow Spark 선언적 파이프라인 내에서 직접 구조적 스트리밍 트리거 유형으로 지원되지 않습니다. 그러나 Lakeflow Spark 선언적 파이프라인은 파이프라인 수준 구성을 통해 실시간 모드를 지원합니다. Lakeflow Spark 선언적 파이프라인에서 실시간 모드 사용을 참조하세요.
UDF를 사용하는 대기 시간에 민감한 워크로드의 경우 Databricks는 전용 액세스 모드를 사용하는 것이 좋습니다. Table 함수를 참조하세요.
실행 모드
실시간 모드는 업데이트 모드만 지원합니다.
| 실행 모드 | 지원됨 |
|---|---|
| 업데이트 모드 | ✓ |
| Append mode | 지원되지 않음 |
| 전체 모드 | 지원되지 않음 |
데이터 소스 및 데이터 싱크
실시간 모드는 다음 원본 및 싱크를 지원합니다.
| 출력 또는 입력 | 출처에 따라 | 싱크로 |
|---|---|---|
| Apache Kafka | ✓ | ✓ |
| Event Hubs(Kafka 커넥터 사용) | ✓ | ✓ |
| Kinesis | ✓ (EFO 모드만 해당) | 지원되지 않음 |
| AWS MSK | ✓ | 지원되지 않음 |
| 델타 | 지원되지 않음 | 지원되지 않음 |
| Google Pub/Sub (Google의 메시징 서비스) | 지원되지 않음 | 지원되지 않음 |
| Apache Pulsar | 지원되지 않음 | 지원되지 않음 |
임의 싱크(forEachWriter 사용) |
해당 없음 | ✓ |
운영자
실시간 모드는 대부분의 구조적 스트리밍 연산자를 지원합니다.
상태 비지정 작업
| Operator | 지원됨 |
|---|---|
| 선택 사항 | ✓ |
| Projection | ✓ |
UDFs
| Operator | 지원됨 |
|---|---|
| Scala 사용자 정의 함수 (UDF) | ✓ (몇 가지 제한 사항) |
| UDF Python | ✓ (몇 가지 제한 사항) |
Aggregation
| Operator | 지원됨 |
|---|---|
| sum | ✓ |
| 개수 | ✓ |
| max | ✓ |
| min | ✓ |
| avg | ✓ |
| 집계 함수 | ✓ |
Windowing
| Operator | 지원됨 |
|---|---|
| Tumbling | ✓ |
| Sliding | ✓ |
| 세션 | 지원되지 않음 |
Deduplication
| Operator | 지원됨 |
|---|---|
| dropDuplicates (중복 제거) | ✓ (상태는 제한되지 않음) |
| 워터마크 내 중복 제거 (dropDuplicatesWithinWatermark) | 지원되지 않음 |
테이블로 스트림 조인
| Operator | 지원됨 |
|---|---|
| 브로드캐스트 테이블 조인(테이블이 작아야 합니다). | ✓ |
| 스트림-스트림 조인 | 지원되지 않음 |
| (플랫)MapGroupsWithState | 지원되지 않음 |
| transformWithState | ✓ (몇 가지 차이점) |
| union | ✓ (몇 가지 제한 사항) |
| forEach | ✓ |
| forEachBatch | 지원되지 않음 |
| mapPartitions | 지원되지 않음(제한 사항 참조) |
특별 고려 사항
일부 연산자와 기능은 실시간 모드에서 사용할 때 특정 고려 사항 또는 차이점이 있습니다.
transformWithState 실시간 모드
사용자 지정 상태 저장 애플리케이션을 빌드하기 위해 Databricks는 Apache Spark 구조적 스트리밍의 API를 지원합니다 transformWithState. API 및 코드 조각에 대한 자세한 내용은 사용자 지정 상태 저장 애플리케이션 빌드 를 참조하세요.
그러나 API는 마이크로 일괄 처리 쿼리와 실시간 모드에서 다르게 동작합니다.
- 실시간 모드는 각 행에
handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues)대한 메서드를 호출합니다.-
inputRows반복기는 단일 값을 반환합니다. 마이크로 일괄 처리 모드는 각 키에 대해 한 번 호출하고inputRows반복기는 마이크로 일괄 처리에서 키에 대한 모든 값을 반환합니다. - 코드를 작성할 때의 이러한 차이점에 대한 계정
-
- 이벤트 타이머는 실시간 모드에서 지원되지 않습니다.
-
transformWithStateInPandas는 실시간 모드에서 지원되지 않습니다. 대신 pandas DataFrames 대신 개체를 사용하는 행 기반transformWithStateAPI를 사용합니다Row. - 실시간 모드에서 타이머는 데이터 도착에 따라 실행이 지연됩니다.
- 타이머가 10:00:00으로 예약되었지만 데이터가 도착하지 않으면 타이머가 즉시 실행되지 않습니다.
- 데이터가 10:00:10에 도착하면 타이머는 10초 지연 후 작동합니다.
- 데이터가 도착하지 않고 장기 실행 일괄 처리가 종료되면 일괄 처리가 종료되기 전에 타이머가 작동합니다.
메모
Databricks Runtime 18.1 이하에서 처리량이 낮고 초당 레코드가 5개 미만인 Python transformWithState 및 실시간 모드를 사용하는 경우 최대 수백 밀리초의 대기 시간이 증가할 수 있습니다. Databricks는 해결하려면 Databricks Runtime 18.2 이상으로 업그레이드하는 것이 좋습니다.
Python UDF를 실시간 모드로
Databricks는 대부분의 Python UDF(사용자 정의 함수)를 실시간 모드로 지원합니다.
상태 비저장
| UDF 유형 | 지원됨 |
|---|---|
| 스칼라 UDF Python(사용자 정의 스칼라 함수 - Python) | ✓ |
| 화살표 스칼라 UDF | ✓ |
| Pandas 스칼라 UDF(pandas 사용자 정의 함수) | ✓ |
화살표 함수(mapInArrow) |
✓ |
| Pandas 함수(Map) | ✓ |
상태 저장 그룹화(UDAF)
| UDF 유형 | 지원됨 |
|---|---|
transformWithState (인터페이스만 Row 해당) |
✓ |
transformWithStateInPandas |
지원되지 않습니다. 대신 pandas DataFrames 대신 개체를 사용하는 행 기반 transformWithState API를 사용합니다 Row . 자세한 내용은 지원되지 않음을 참조하세요transformWithStateInPandas. |
applyInPandasWithState |
지원되지 않음 |
상태를 저장하지 않는 그룹화 (UDAF)
| UDF 유형 | 지원됨 |
|---|---|
apply |
지원되지 않음 |
applyInArrow |
지원되지 않음 |
applyInPandas |
지원되지 않음 |
테이블 함수
| UDF 유형 | 지원됨 |
|---|---|
| UDTF(Python UDF(사용자 정의 테이블 함수)) | 지원되지 않음 |
| UC UDF | 지원되지 않음 |
실시간 모드에서 Python UDF를 사용할 때 고려해야 할 몇 가지 사항이 있습니다.
- 대기 시간을 최소화하려면 화살표 일괄 처리 크기(
spark.sql.execution.arrow.maxRecordsPerBatch)를 1로 설정합니다.- 절충: 이 구성은 처리량을 희생하면서 대기 시간을 최적화합니다. 대부분의 워크로드에서는 이 설정을 사용하는 것이 좋습니다.
- 입력 볼륨을 수용하기 위해 더 높은 처리량이 필요한 경우에만 일괄 처리 크기를 늘리십시오. 이로 인해 대기 시간이 증가할 가능성을 받아들일 수 있습니다.
- Pandas UDF 및 함수는 화살표 일괄 처리 크기가 1인 경우 성능이 좋지 않습니다.
- pandas UDF 또는 함수를 사용하는 경우 화살표 일괄 처리 크기를 더 높은 값(예: 100 이상)으로 설정합니다.
- 이는 대기 시간이 더 높다는 것을 의미합니다. Databricks는 가능한 경우 화살표 UDF 또는 함수를 사용하는 것이 좋습니다.
-
transformWithStateInPandas는 실시간 모드에서 지원되지 않습니다. 대신 pandas DataFrames 대신 개체를 사용하는 행 기반transformWithStateAPI를 사용합니다Row. 행 기반 API를 사용하는 작업 Python 예제는transformWithStateInPandas지원되지 않음 및 리알타임 모드 예제를 참조하세요. - UDF를 사용하는 대기 시간에 민감한 워크로드의 경우 Databricks는 전용 액세스 모드를 사용하는 것이 좋습니다. 표준 액세스 모드에서는 보안 격리 오버헤드로 인해 UDF 성능이 저하될 수 있습니다.