默认情况下,管道流将结果写入由 Unity 目录管理的 Delta 表,通常是流式处理表或具体化视图。 接收器是另一种输出目标,可让您将转换后的数据写入 Databricks 托管存储之外的目标位置,例如事件流服务或自定义数据存储。
接收器与追加流一起使用。 您可以使用某个接收器 API 来定义接收器,然后在 target 定义中将其作为 append_flow 引用。
何时使用接收器
在需要执行以下操作时,Databricks 建议使用接收器:
- 构建低延迟(例如欺诈检测、实时分析或客户建议)的操作用例,其中数据必须流向消息总线而不是云存储。 对于需要毫秒级延迟的工作负载,请参阅 在 Lakeflow Spark 声明性管道中使用实时模式。
- 将转换后的数据写入由外部 Delta 实例管理的表中,包括 Unity Catalog 托管表和外部表。
- 执行反向 ETL,将数据写入外部系统,例如将已处理的数据写回 Apache Kafka 主题,供 Azure Databricks 外部使用。
- 使用 Python 自定义数据源写入 Azure Databricks 原生不支持的格式。
接收器类型
管道支持以下接收端类型:
| 水槽类型 | Description |
|---|---|
| 增量表接收器 | 写入 Unity 目录托管表或外部 Delta 表。 指定文件路径或完全限定的表名。 |
| Apache Kafka 接收器 | 使用管道运行时中包含的 Kafka 连接器写入 Apache Kafka 主题。 |
| Azure 事件中心接收器 | 使用 Kafka 接口写入Azure 事件中心。 使用与 Kafka 输出端相同的选项。 |
| Python自定义接收器 | 使用已在 spark.dataSource.register 中注册的 Python 自定义数据源向任何数据存储写入数据。 |
| ForEachBatch 接收器 | 将自定义 Python 逻辑应用于流式数据的每个微批次。 当您需要写入多个目标位置、执行 upsert 操作,或使用不原生支持流式写入的目标时,请使用此项。 |
接收端 API
管道提供了两个用于创建接收器的 API:
-
create_sink():创建受支持的类型的命名接收器(Delta、Kafka、AEH 或Python自定义数据源)。 仅在Python中可用。 请参阅 在管道中使用接收器。 -
foreach_batch_sink():用于修饰对流式数据的每个微批次运行的 Python 函数。 为自定义写入逻辑提供最大的灵活性。 请参阅 使用 ForEachBatch 写入管道中的任意数据接收器。
这两种接收器类型都作为 target 一个 append_flow接收器类型引用。
Limitations
- 接收器仅在Python中可用。 不支持 SQL。
- 仅支持流式处理查询。 不支持批处理查询。
- 只有
append_flow可以写入接收端;create_auto_cdc_flow和其他流类型均不受支持。 - 接收端不支持管道期望。
- 运行完全刷新不会清理以前在接收器中写入的数据。