跳至内容
Kafka Connect / MirrorMaker 2 REST API 查询指南

Kafka Connect / MirrorMaker 2 REST API 查询指南

1. 说明

核心 REST 资源定义在以下类中:

  • RootResource
  • ConnectorsResource
  • ConnectorPluginsResource
  • LoggingResource
  • InternalClusterResource

完整 OpenAPI 定义见:

  • docs/generated/connect_rest.yaml

通用约定:

  • 默认 REST 端口为 8083,实际以 listeners 配置为准。
  • 接口通常使用 Content-Type: application/json。
  • {connector} 表示 connector 名称。
  • {task} 表示整数类型的 task ID。
  • ?forward= 是 Connect worker 内部转发参数,普通用户通常不需要指定。
  • 配置了 rest.extension.classes 时,第三方扩展可能注册额外接口,本清单只包含 Kafka Connect 内建接口。

2. Worker 基础接口

方法路径作用说明
GET/查询当前 Connect worker 信息返回 version、commit、kafka_cluster_id
GET/healthWorker 健康检查健康返回 200;启动中返回 503;异常返回 500

3. Connector Plugin 接口

方法路径作用说明
GET/connector-plugins列出已安装插件默认 connectorsOnly=true,只返回 Source/Sink Connector;设置 connectorsOnly=false 也会返回 Transform、Predicate、Converter
GET/connector-plugins/{pluginName}/config查询插件配置定义返回 ConfigKeyInfo 列表
PUT/connector-plugins/{pluginName}/config/validate校验 connector 配置请求体是完整配置 Map,返回 ConfigInfos 和逐项校验结果

注意:GET /connector-plugins 查询的是处理该请求的 worker,不是整个集群的统一视图。滚动升级或各 worker 插件不一致时,结果可能不同。

4. Connector 管理接口

方法路径作用请求/响应及说明
GET/connectors列出 connector默认返回 connector 名称数组;支持 ?expand=status&expand=info,返回带状态和详情的 Map
POST/connectors创建 connector成功返回 201;请求体包含 name、config、可选 initial_state
GET/connectors/{connector}查询 connector 详情返回名称、配置、task ID 列表、connector 类型
DELETE/connectors/{connector}删除 connector停止并删除 connector/task 配置,成功通常返回 204
GET/connectors/{connector}/config查询 connector 配置返回配置 Map
PUT/connectors/{connector}/config创建或完整替换配置已存在返回 200;新建返回 201
PATCH/connectors/{connector}/config局部更新配置请求体中值为 null 表示删除该配置项,成功返回 200
GET/connectors/{connector}/status查询 connector 和所有 task 状态返回 connector 状态、worker ID、异常信息及全部 task 状态

4.1 创建 connector

POST /connectors
Content-Type: application/json
{
  "name": "flink-to-mm2-source",
  "config": {
    "connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
    "tasks.max": "4"
  },
  "initial_state": "STOPPED"
}

initial_state 可选值:

  • RUNNING:默认值
  • PAUSED
  • STOPPED

4.2 查看 connector 列表

GET /connectors

返回 connector 名称数组。

GET /connectors?expand=status&expand=info

返回带状态和详情的 Map,适合一次查询所有 connector 的运行状态。

5. Connector 生命周期接口

方法路径作用说明
PUT/connectors/{connector}/stop停止 connector设置目标状态为 STOPPED,关闭 task 并释放 Kafka Client、SMT 等资源;幂等
PUT/connectors/{connector}/pause暂停 connectortask 停止处理数据,但继续持有资源;目标状态变为 PAUSED;返回 202
PUT/connectors/{connector}/resume恢复 connector将 PAUSED 或 STOPPED 状态恢复为 STARTED;返回 202
POST/connectors/{connector}/restart重启 connector/task支持 includeTasks、onlyFailed 两个查询参数

5.1 Restart 参数

参数默认值含义
includeTasksfalse是否同时重启 task
onlyFailedfalse是否只重启 FAILED 的实例

行为:

  • 默认 includeTasks=false&onlyFailed=false:只重启 connector,返回 204。
  • 指定 includeTasks=true 或 onlyFailed=true:返回 202 和 connector 状态信息。
  • 单个 task 重启使用 /connectors/{connector}/tasks/{task}/restart。

5.2 STOPPED 与 PAUSED 的区别

状态是否处理数据是否保留 task 和资源是否允许修改 offset
RUNNING是是否
PAUSED否是否
STOPPED否否是,且要求 taskCount=0

修改 connector offset 前必须是 STOPPED,PAUSED 不够。

PUT /connectors/{connector}/stop 返回后,状态变化和 task 清理仍可能有短暂延迟。建议通过以下接口确认 connector 和所有 task 均已停止:

GET /connectors/{connector}/status

6. Task 管理接口

方法路径作用说明
GET/connectors/{connector}/tasks查询 task 列表和配置返回 TaskInfo[],每项包含 task ID 和配置
GET/connectors/{connector}/tasks-config查询 task 配置已废弃,建议使用 /tasks;返回 Map
GET/connectors/{connector}/tasks/{task}/status查询单个 task 状态{task} 是整数 task ID
POST/connectors/{connector}/tasks/{task}/restart重启单个 task通常用于重启失败 task,成功通常返回 204

7. Offset 管理接口

方法路径作用说明
GET/connectors/{connector}/offsets查询当前 offset运行、暂停、停止状态均可查询
PATCH/connectors/{connector}/offsets修改指定分区 offsetconnector 必须是 STOPPED,且 taskCount=0;不是标准 JSON Patch
DELETE/connectors/{connector}/offsets重置全部 offsetconnector 必须是 STOPPED,且 taskCount=0;写入 null/tombstone

7.1 修改 offset

PATCH /connectors/flink-to-mm2-source/offsets
Content-Type: application/json
{
  "offsets": [
    {
      "partition": {
        "cluster": "source",
        "topic": "orders",
        "partition": 0
      },
      "offset": {
        "offset": 999
      }
    },
    {
      "partition": {
        "cluster": "source",
        "topic": "orders",
        "partition": 1
      },
      "offset": null
    }
  ]
}

其中 offset: null 表示单独重置该分区。

7.2 状态约束

Connector 状态PATCH/DELETE offsets 结果
RUNNING400 Bad Request
PAUSED400 Bad Request
STOPPED,但 task 尚未清理完可能仍返回 400 Bad Request
STOPPED,且 taskCount=0允许修改

错误响应示例:

{
  "error_code": 400,
  "message": "Connectors must be in the STOPPED state before their offsets can be modified. This can be done for the specified connector by issuing a 'PUT' request to the '/connectors/flink-to-mm2-source/stop' endpoint"
}

8. Topic Tracking 接口

方法路径作用说明
GET/connectors/{connector}/topics查询 connector 使用的 topic 集合topic.tracking.enable=false 时返回 403
PUT/connectors/{connector}/topics/reset清空该 connector 的 active topic 集合依赖 topic.tracking.enable 和 topic.tracking.allow.reset;成功返回 202

9. 日志级别管理接口

这些接口属于 admin REST API:

  • 默认情况下使用普通 listeners。
  • 配置了 admin.listeners 后,只暴露在 admin listener 上。
  • 当前版本使用 Log4j 1.x 风格级别。
方法路径作用说明
GET/admin/loggers列出显式设置过级别的 logger返回 logger 和 level Map
GET/admin/loggers/{logger}查询 logger 级别不存在返回 404
PUT/admin/loggers/{logger}设置 logger 级别请求体如 {"level":"DEBUG"}

9.1 设置日志级别

PUT /admin/loggers/org.apache.kafka.connect?scope=worker
Content-Type: application/json
{
  "level": "DEBUG"
}

scope 可选值:

scope含义返回
worker只修改当前 worker,默认值200,返回受影响的 logger 列表
clusterdistributed 模式下广播到整个 Connect 集群204

10. Distributed 模式内部接口

以下接口是 Connect worker 之间通信使用的,不是给用户调用的,也没有列入正常 OpenAPI 文档:

方法路径作用
POST/connectors/{connector}/tasks非 leader worker 将 task 配置转发给 leader 写入 config topic
PUT/connectors/{connector}/fenceExactly-once Source Connector 的 zombie task fencing

特点:

  • 内部请求需要签名。
  • 不保证稳定的用户调用契约。
  • 可能因为 non-leader、签名错误、rebalance 返回 400/401/409 等错误。
  • 运维和迁移脚本不应调用这两个接口。

11. Distributed 模式请求路由行为

11.1 Leader 转发

创建、修改配置、删除、停止、重启、修改 offset 等操作通常需要 leader 执行。请求发到 follower 时,follower 会内部转发到 leader。

11.2 Rebalance 冲突

如果集群正在 rebalance、配置快照落后或暂时找不到 leader,可能返回:

409 Conflict

11.3 GET 查询

一般可以访问任意 worker,但部分数据具有 worker 局部性或最终一致性:

接口行为
GET /connector-plugins当前 worker 的插件视图
GET /connectors/{name}/status来自 status topic,跨 worker 聚合并存在短暂延迟
GET /health只反映当前 worker

11.4 forward 参数

API 中的 ?forward= 是内部转发参数,正常用户不需要传。接收到请求的 worker 会根据 leader 信息自动转发。

11.5 REST Extension

如果在 distributed worker 中配置了 rest.extension.classes,第三方扩展可以额外注册资源、filter 或 endpoint,因此实际对外接口可能比内建列表更多。

12. 运维场景速查

场景接口
健康检查GET /health
查看所有 connectorGET /connectors?expand=status&expand=info
创建为 STOPPEDPOST /connectors,initial_state=STOPPED
停止 connectorPUT /connectors/{name}/stop
查看是否真正停止GET /connectors/{name}/status
暂停但不释放资源PUT /connectors/{name}/pause
修改 offsetPATCH /connectors/{name}/offsets
重置 offsetDELETE /connectors/{name}/offsets
回读 offsetGET /connectors/{name}/offsets
启动/恢复PUT /connectors/{name}/resume
重启失败 taskPOST /connectors/{name}/tasks/{task}/restart
调整日志级别PUT /admin/loggers/{logger}?scope=worker|cluster

13. 参考资料

  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/ConnectRestServer.java
  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/RootResource.java
  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/ConnectorsResource.java
  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/ConnectorPluginsResource.java
  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/LoggingResource.java
  • connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/InternalClusterResource.java
  • docs/generated/connect_rest.yaml
  • docs/kafka-connect/user-guide.md
最后更新于