跳到主要内容
版本:Next

飞书

飞书 数据接收器

支持的引擎

Spark
Flink
SeaTunnel Zeta

主要特性

描述

用于通过上游数据调用飞书 Webhook。

例如,如果来自上游的数据是 [年龄: 12, 姓名: tyrantlucifer],则 body 内容如下:{"年龄": 12, "姓名": "tyrantlucifer"}

飞书 Sink 会发送 POST 请求。每一条上游数据都会被转换成 JSON 并作为请求体发送。当 array_mode = true 时,多条数据会先合并成一个 JSON 数组再发送。

提示

飞书 Webhook URL 和自定义鉴权请求头通常包含敏感信息,请不要在日志或示例中暴露真实 Token。

数据类型映射

SeaTunnel 数据类型飞书数据类型
ROW
MAP
Json
NULLnull
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTint
BIGINTlong
FLOATfloat
DOUBLEdouble
DECIMALBigDecimal
BYTESbyte[]
STRINGString
TIME
TIMESTAMP
TIME
String
ARRAYJsonArray

接收器选项

名称类型是否必需默认值描述
urlString-飞书 Webhook URL。当前 Sink 写入器会向这个固定 URL 发送请求,不会替换表名相关占位符。
headersMap-HTTP 请求头。Webhook 网关需要额外请求头时使用。
paramsMap-该参数会通过参数校验,但当前 Sink 写入器不会把它传入请求。如需查询参数,请把非敏感参数直接写在 url 中。
retryInt-HTTP 请求发生 IOException 时的最大重试次数。
retry_backoff_multiplier_msInt100重试退避时间倍数,单位毫秒。
retry_backoff_max_msInt10000最大重试退避时间,单位毫秒。
array_modeBooleanfalse为 true 时按 JSON 数组发送多条数据;为 false 时每次请求发送一个 JSON 对象。
batch_sizeInt1单次请求最多发送的数据条数,仅在 array_mode 为 true 时生效。
request_interval_msInt0两次 HTTP 请求之间的间隔毫秒数,用于避免请求过于频繁。
multi_table_sink_replicaInt1多表写入时的 Sink 副本数。详情请参考 Sink 通用选项
common-options-Sink 插件通用参数,详情请参考 Sink 通用选项

使用说明

  • Sink 固定发送 POST JSON 请求,不提供 method 配置。
  • 如果 Webhook URL 需要查询参数,请把非敏感参数直接写在 url 中。鉴权类信息建议优先放在 headers 里,前提是网关支持这种方式,因为完整 URL(包括查询参数)可能出现在日志或作业元数据中。
  • 多表作业可以使用 multi_table_sink_replica,但飞书 Sink 会把所有数据发送到配置的固定 url,不会替换 URL 中的 ${database_name}${schema_name}${table_name}
  • 当接收端支持 JSON 数组,且希望减少 HTTP 请求次数时,可以启用 array_mode
  • 飞书 Webhook 投递不是精确一次。如果远端已经处理成功但本地收到异常并触发重试,接收端可能看到重复消息。

任务示例

简单示例

env {
parallelism = 1
job.mode = "BATCH"
}

source {
FakeSource {
row_num = 1
schema = {
fields {
name = string
age = int
}
}
rows = [
{
fields = [tyrantlucifer, 12]
kind = INSERT
}
]
}
}

sink {
Feishu {
url = "https://open.feishu.cn/open-apis/bot/v2/hook/<your-hook-token>"
}
}

配置请求头和重试

Feishu {
url = "https://open.feishu.cn/open-apis/bot/v2/hook/<your-hook-token>"
headers {
Content-Type = "application/json"
}
retry = 3
retry_backoff_multiplier_ms = 200
retry_backoff_max_ms = 5000
}

将多条数据按 JSON 数组发送

Feishu {
url = "https://open.feishu.cn/open-apis/bot/v2/hook/<your-hook-token>"
array_mode = true
batch_size = 20
request_interval_ms = 500
}

多表 Sink 副本

Feishu {
url = "https://open.feishu.cn/open-apis/bot/v2/hook/<your-hook-token>"
multi_table_sink_replica = 2
}

变更日志