OSS Connector

更新时间:
复制 MD 格式

前提条件

步骤一:创建数据表

  1. 登录对象存储OSS控制台,创建Bucket。更多信息,请参见控制台创建存储空间
  2. 下载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>
  3. 实例创建完成后,在实例列表页面单击目标实例,然后在实例详情页面的左侧导航栏,完成以下操作。
    1. 单击创建账号,也可使用已有账号。更多信息,请参见创建账号和数据库
    2. 单击创建数据库,也可使用已有数据库。更多信息,请参见创建账号和数据库
    3. 单击数据库连接,记录内网地址和端口号。
      内网地址
  4. 在实例详情页面,单击登录数据库进入DMS数据管理服务平台,单击目标数据库,使用SQL语句创建表格。例如,创建一个列参数分别为idnumber的表格,命令如下。更多信息,请参见SQL Commands
    CREATE TABLE sql_table(id INT ,number INT);
    重要 创建表格时,请将任一列参数设置为主键并且设为递增。更多信息,请参见查询与变更表结构

步骤二:创建Connector

Source Connector

  1. 下载JDBC Connector文件,上传至提前创建好的OSS Bucket。更多信息,请参见控制台上传文件
  2. 登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。

  3. 在左侧导航栏,选择Connector生态集成 > 消息流入(Source)

  4. 消息流入(Source)页面,单击创建任务

  5. 消息流入创建面板。设置任务名称,选择流入类型Apache Kafka Connect
    1. 在连接器配置区域,设置以下参数。
      配置项 参数 说明
      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为例,请将中获取的内网地址和端口号分别填入hostport字段。
      • 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 数据库表格列表,不同数据库之间以英文逗号(,)分隔。
    2. 实例配置区域,设置以下参数。
      配置项 参数 说明
      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-<任务名称>
    3. 运行配置区域,将日志投递方式设置为投递至 SLS或者投递至 Kafka,在角色授权卡片设置Connect依赖的角色配置
      重要 建议配置的角色包含AliyunSAEFullAccess权限,否则可能会导致任务运行失败。
    4. 单击确定
    等待任务状态变为运行中,此时Connector已经在正常工作中。

Sink Connector

  1. 下载JDBC Connector文件,上传至提前创建好的OSS Bucket。更多信息,请参见控制台上传文件
  2. 登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。

  3. 在左侧导航栏,选择Connector生态集成 > 消息流出(Sink)

  4. 消息流出(Sink)页面,单击创建任务

  5. 消息流出创建面板。设置任务名称,选择流出类型Apache Kafka Connect
    1. 在连接器配置区域,设置以下参数。
      配置项 参数 说明
      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为例,请将中获取的内网地址和端口号分别填入hostport字段。
      • 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 目标表格名称。
    2. 实例配置区域,设置以下参数。
      配置项 参数 说明
      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-<任务名称>
    3. 运行配置区域,将日志投递方式设置为投递至 SLS或者投递至 Kafka,在角色授权卡片设置Connect依赖的角色配置
      重要 建议配置的角色包含AliyunSAEFullAccess权限,否则可能会导致任务运行失败。
    4. 单击确定
    等待任务状态变为运行中,此时Connector已经在正常工作中。

步骤三:测试Connector

Source Connector

  1. DMS数据管理服务平台,向中创建的数据表插入一条数据。例如,插入一条id123,number20000的数据,命令如下。
    INSERT INTO sql_table(id, number) VALUES(12,20);
  2. 登录云消息队列 Kafka 版控制台,在实例列表页面,单击目标实例。
  3. 在目标实例页面,单击目标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

  1. 登录云消息队列 Kafka 版控制台,在实例列表页面,单击目标实例。
  2. 在左侧导航栏,单击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}}
  3. Topic详情页面右上角,单击体验发送消息
  4. 快速体验消息收发面板,设置消息内容。例如在目标表格中添加一条id13,number14的数据,消息内容如下。
    {"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}}
  5. 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.

解决方法:由于状态获取可能会有延迟,建议您先尝试刷新页面。若刷新后仍然是失败状态,您可以按照以下步骤查看错误信息。

  1. 在消息流入任务详情页面的Worker 信息区域,单击SAE 应用后的实例名称,跳转到SAE应用详情页面。

  2. 基本信息页面,单击实例部署信息页签。

  3. 在实例右侧操作列,单击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
}