前提条件
- 开通事件总线EventBridge并授权。
- 已开通Serverless应用引擎服务,更多信息,请参见准备工作。
- 已创建专有网络及交换机。更多信息,请参见搭建IPv4专有网络。
- 已购买并部署云消息队列 Kafka 版实例。更多信息,请参见购买并部署实例。
步骤一:创建数据表
- 登录对象存储OSS控制台,创建Bucket。更多信息,请参见控制台创建存储空间。
- 下载kafka-connect-oss文件,在src/main/resources目录下新建core-site.xml文件,内容如下(请按需更新地域信息)。
<configuration> <property> <name>fs.oss.endpoint</name> <value>oss-cn-hangzhou-internal.aliyuncs.com</value> </property> <property> <name>fs.oss.accessKeyId</name> <value>${env.accessKeyId}</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>${env.accessKeySecret}</value> </property> <property> <name>fs.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value> </property> <property> <name>fs.oss.connection.secure.enabled</name> <value>false</value> </property> <property> <name>fs.oss.connection.maximum</name> <value>2048</value> </property> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.OSS</value> </property> </configuration> - 实例创建完成后,在实例列表页面单击目标实例,然后在实例详情页面的左侧导航栏,完成以下操作。
- 在实例详情页面,单击登录数据库进入DMS数据管理服务平台,单击目标数据库,使用SQL语句创建表格。例如,创建一个列参数分别为id和number的表格,命令如下。更多信息,请参见SQL Commands。
CREATE TABLE sql_table(id INT ,number INT);重要 创建表格时,请将任一列参数设置为主键并且设为递增。更多信息,请参见查询与变更表结构。
步骤二:创建Connector
Source Connector
- 下载JDBC Connector文件,上传至提前创建好的OSS Bucket。更多信息,请参见控制台上传文件。
登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。
在左侧导航栏,选择。
在消息流入(Source)页面,单击创建任务。
- 在消息流入创建面板。设置任务名称,选择流入类型为Apache Kafka Connect。
- 在连接器配置区域,设置以下参数。
配置项 参数 说明 Kafka Connect插件 Bucket存储桶 选择OSS Bucket。 文件 选择上传的.ZIP文件。 Kafka资源信息 Kafka实例 选择前提条件中创建的实例。 专有网络VPC 选择VPC ID。 交换机 选择vSwitch ID。 安全组 选择安全组。 Kafka Connect配置信息 解析当前ZIP包下的properties文件 选择新建 properties 文件。选择.ZIP文件中包含的SourceConnector对应的.properties文件。路径为/etc/source-xxx.properties。 在输入框中更新相关字段的取值。展开查看字段描述字段名 描述 tasks.max 最大Task数量,不能超过中创建的表格的数量。 connection.url 数据库连接地址,不同数据库有不同的地址格式。本文以MySQL为例,请将中获取的内网地址和端口号分别填入host和port字段。 - MySQL:
jdbc:mysql://<host>:<port>/<database> - PostgreSQL:
jdbc:postgresql://<host>:<port>/<database> - IBM DB2:
jdbc:db2://<host>:<port>/<database> - IBM Informix:
jdbc:informix-sqli://:/:informixserver=<debservername> - MS SQL:
jdbc:sqlserver://<host>[:<port>];databaseName=<database> - Oracle:
jdbc:oracle:thin://<host>:<port>/<service>或者jdbc:oracle:thin:<host>:<port>:<SID>
incrementing.column.name 填入中设置的递增列名称。 topic.prefix 目标Topic前缀。目标Topic名称为<topic.prefix><tableName>,在投递数据前,请按照命名规范提前创建好目标Topic。 connection.user 数据库登录用户名。 connection.password 数据库登录密码。 table.whitelist 数据库表格列表,不同数据库之间以英文逗号(,)分隔。 - MySQL:
- 在实例配置区域,设置以下参数。
配置项 参数 说明 Worker规格 Worker 规格 选择合适的Worker规格。 最小 Worker 数 设置为1。 最大 Worker 数 设置为1。 Kafka Connect Worker 配置 自动创建Kafka Connect Worker依赖资源 建议勾选此项,此时会在选择的Kafka实例中自动创建Kafka Connect运行所需的一些Internal Topic以及ConsumerGroup,并将这些必填配置自动填入配置框中,包括以下配置项: - Offset Topic:用于存储源数据偏移量,命名规则为
connect-eb-offset-<任务名称>。 - Config Topic:用于存储Connectors以及Tasks的配置信息,命名规则为
connect-eb-config-<任务名称>。 - Status Topic:用于存储Connectors以及Tasks状态信息,命名规则为
connect-eb-status-<任务名称>。 - Kafka Connect Consumer Group:Kafka Connect Worker用于消费Internal Topics的消费组,命名规则为
connect-eb-cluster-<任务名称>。 - Kafka Source Connector Consumer Group:只针对Sink Connector有效,用于消费源Kafka Topic中的数据,命名规则为
connector-eb-cluster-<任务名称>。
- Offset Topic:用于存储源数据偏移量,命名规则为
- 在运行配置区域,将日志投递方式设置为投递至 SLS或者投递至 Kafka,在角色授权卡片设置Connect依赖的角色配置。
重要 建议配置的角色包含AliyunSAEFullAccess权限,否则可能会导致任务运行失败。
- 单击确定。
等待任务状态变为运行中,此时Connector已经在正常工作中。 - 在连接器配置区域,设置以下参数。
Sink Connector
- 下载JDBC Connector文件,上传至提前创建好的OSS Bucket。更多信息,请参见控制台上传文件。
登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。
在左侧导航栏,选择。
在消息流出(Sink)页面,单击创建任务。
- 在消息流出创建面板。设置任务名称,选择流出类型为Apache Kafka Connect。
- 在连接器配置区域,设置以下参数。
配置项 参数 说明 Kafka Connect插件 Bucket存储桶 选择OSS Bucket。 文件 选择上传的.ZIP文件。 Kafka资源信息 Kafka实例 选择前提条件中创建的实例。 专有网络VPC 选择VPC ID。 交换机 选择vSwitch ID。 安全组 选择安全组。 Kafka Connect配置信息 解析当前ZIP包下的properties文件 选择新建 properties 文件。选择.ZIP文件中包含的SinkConnector对应的.properties文件。路径为/etc/sink-xxx.properties。 在输入框中更新相关字段的取值。展开查看字段描述字段名 描述 tasks.max 最大Task数量。 topics 数据源Topic名称。 connection.url 数据库连接地址,不同数据库有不同的地址格式。本文以MySQL为例,请将中获取的内网地址和端口号分别填入host和port字段。 - MySQL:
jdbc:mysql://<host>:<port>/<database> - PostgreSQL:
jdbc:postgresql://<host>:<port>/<database> - IBM DB2:
jdbc:db2://<host>:<port>/<database> - IBM Informix:
jdbc:informix-sqli://:/:informixserver=<debservername> - MS SQL:
jdbc:sqlserver://<host>[:<port>];databaseName=<database> - Oracle:
jdbc:oracle:thin://<host>:<port>/<service>或者jdbc:oracle:thin:<host>:<port>:<SID>
pk.fields 主键名称。若有多个主键以英文逗号(,)分隔。 connection.user 数据库登录用户名。 connection.password 数据库登录密码。 table.name.format 目标表格名称。 - MySQL:
- 在实例配置区域,设置以下参数。
配置项 参数 说明 Worker规格 Worker 规格 选择合适的Worker规格。 最小 Worker 数 设置为1。 最大 Worker 数 设置为1。此值不能超过tasks.max的取值。 Kafka Connect Worker 配置 自动创建Kafka Connect Worker依赖资源 建议勾选此项,此时会在选择的Kafka实例中自动创建Kafka Connect运行所需的一些Internal Topic以及ConsumerGroup,并将这些必填配置自动填入配置框中,包括以下配置项: - Offset Topic:用于存储源数据偏移量,命名规则为
connect-eb-offset-<任务名称>。 - Config Topic:用于存储Connectors以及Tasks的配置信息,命名规则为
connect-eb-config-<任务名称>。 - Status Topic:用于存储Connectors以及Tasks状态信息,命名规则为
connect-eb-status-<任务名称>。 - Kafka Connect Consumer Group:Kafka Connect Worker用于消费Internal Topics的消费组,命名规则为
connect-eb-cluster-<任务名称>。 - Kafka Source Connector Consumer Group:只针对Sink Connector有效,用于消费源Kafka Topic中的数据,命名规则为
connector-eb-cluster-<任务名称>。
- Offset Topic:用于存储源数据偏移量,命名规则为
- 在运行配置区域,将日志投递方式设置为投递至 SLS或者投递至 Kafka,在角色授权卡片设置Connect依赖的角色配置。
重要 建议配置的角色包含AliyunSAEFullAccess权限,否则可能会导致任务运行失败。
- 单击确定。
等待任务状态变为运行中,此时Connector已经在正常工作中。 - 在连接器配置区域,设置以下参数。
步骤三:测试Connector
Source Connector
- 在DMS数据管理服务平台,向中创建的数据表插入一条数据。例如,插入一条id为123,number为20000的数据,命令如下。
INSERT INTO sql_table(id, number) VALUES(12,20); - 登录云消息队列 Kafka 版控制台,在实例列表页面,单击目标实例。
- 在目标实例页面,单击目标Topic,然后单击消息查询,查看插入的消息数据,消息Value示例如下。
{"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"int32","optional":true,"field":"number"}],"optional":false,"name":"sql_table"},"payload":{"id":12,"number":20}}
Sink Connector
- 登录云消息队列 Kafka 版控制台,在实例列表页面,单击目标实例。
- 在左侧导航栏,单击Topic管理,然后单击目标Topic,然后单击消息查询,查看插入的消息数据,消息Value示例如下。
{"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"int32","optional":true,"field":"number"}],"optional":false,"name":"sql_table"},"payload":{"id":12,"number":20}} - 在Topic详情页面右上角,单击体验发送消息。
- 在快速体验消息收发面板,设置消息内容。例如在目标表格中添加一条id为13,number为14的数据,消息内容如下。
{"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"int32","optional":true,"field":"number"}],"optional":false,"name":"sql_table"},"payload":{"id":13,"number":14}} - 在DMS数据管理服务平台,查看目标表格中是否有数据写入。

常见报错
场景一:所有Tasks运行失败
错误信息:
All tasks under connector mongo-source failed, please check the error trace of the task.
解决方法:在消息流入任务详情页面,单击基础信息区域的诊断链接,即可跳转到Connector监控页面,可以看到Tasks运行失败的详细错误信息。
场景二:Kafka Connect退出
错误信息:
Kafka connect exited! Please check the error log /opt/kafka/logs/connect.log on sae application to find out the reason why kafka connect exited and update the event streaming with valid arguments to solve it.
解决方法:由于状态获取可能会有延迟,建议您先尝试刷新页面。若刷新后仍然是失败状态,您可以按照以下步骤查看错误信息。
-
在消息流入任务详情页面的Worker 信息区域,单击SAE 应用后的实例名称,跳转到SAE应用详情页面。
-
在基本信息页面,单击实例部署信息页签。
-
在实例右侧操作列,单击Webshell登录Kafka Connect运行环境。

-
执行
vi /home/admin/connector-bootstrap.log命令,查看Connector启动日志,查找其中是否包含错误信息。 -
执行
vi /opt/kafka/logs/connect.log命令,查看Connector运行日志,在其中查找ERROR或者WARN字段来查看是否有错误信息。
-
基于错误信息提示进行修复操作后,可以重新启动对应任务。
场景三:Connector参数校验失败
错误信息:
Start or update connector xxx failed. Error code=400. Error message=Connector configuration is invalid and contains the following 1 error(s):
Value must be one of never, initial_only, when_needed, initial, schema_only, schema_only_recovery
You can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`
解决方法:此时需要根据错误信息,找出具体哪个参数出错,更新对应参数即可。若基于上述错误信息无法定位具体的出错参数,可以参考上文场景二中的步骤登录Kafka Connect运行环境,执行以下命令,查询参数是否校验通过。
curl -i -X PUT -H "Accept:application/json" -H "Content-Type:application/json" -d @$CONNECTOR_PROPERTIES_MAPPING http://localhost:8083/connector-plugins/io.confluent.connect.jdbc.JdbcSinkConnector/config/validate
该指令会返回Connector参数中每个参数是否校验通过,若不通过,则errors属性非空,如下所示。
"value":{
"name":"snapshot.mode",
"value":null,
"recommended_values":[
"never",
"initial_only",
"when_needed",
"initial",
"schema_only",
"schema_only_recovery"
],
"errors":[
"Value must be one of never, initial_only, when_needed, initial, schema_only, schema_only_recovery"
],
"visible":true
}
该文章对您有帮助吗?
