如何将S3中的Avro文件推送至Kinesis流 解决DMS源端点配置报错
DMS S3源端点externalTableDefinition参数配置方法
S3作为DMS源端点时不会自动解析存储文件的Schema,必须通过externalTableDefinition参数显式传入结构化的表定义JSON,同步Avro格式文件到Kinesis的场景可直接参考下面的模板修改对应字段:
{ "TableCount": "1", "Tables": [ { "TableName": "自定义同步任务的逻辑表名,可按业务场景命名,例如hourly_behavior_log", "TablePath": "S3桶内存放Avro文件的前缀路径,例如log/avro/hourly/", "TableOwner": "s3", "TableColumns": [ { "ColumnName": "Avro文件内的字段名,例如user_id", "ColumnType": "对应DMS支持的字段类型,例如BIGINT、STRING、TIMESTAMP、BOOLEAN、DOUBLE", "ColumnNullable": false }, { "ColumnName": "字段名,例如event_time", "ColumnType": "TIMESTAMP", "ColumnNullable": false }, { "ColumnName": "字段名,例如event_detail", "ColumnType": "STRING", "ColumnNullable": true } ], "TableColumnsTotal": "3", "DataFormat": "avro", "CompressionType": "Avro文件实际使用的压缩格式,可选值为none、gzip、snappy、zstd", "IncludeOpForFullLoad": true, "CdcInsertsAndUpdates": true } ] }
注意:TableColumnsTotal的数值必须和TableColumns数组里的字段数量完全一致,字段类型要和Avro Schema的定义一一对应,否则会出现文件解析失败。
S3源到Kinesis目标的其他必填配置项
- IAM权限配置:给DMS任务关联的服务角色添加最小必要权限:S3侧需要
s3:ListBucket、s3:GetObject权限,Kinesis侧需要kinesis:PutRecord、kinesis:PutRecords权限 - S3源端点基础参数:
- 引擎类型选择
Amazon S3 - 准确填写S3桶名称,不要带
s3://前缀 - 选择S3桶实际所在的AWS区域,建议和DMS复制实例、目标Kinesis流部署在同一区域,减少跨区延迟与流量成本
- 额外连接属性必须配置三个键值对,多个配置用分号分隔:
cdcPath=和上述TablePath保持一致的S3前缀路径;dataFormat=avro;compressionType=和Avro文件实际压缩格式一致
- 引擎类型选择
- Kinesis目标端点基础参数:
- 引擎类型选择
Amazon Kinesis Data Streams - 准确填写目标Kinesis流名称、所在区域
- 消息格式建议选择JSON,方便后续Flink任务直接解析消费
- 引擎类型选择
- DMS任务配置:按小时生成新Avro文件的场景,任务类型选择「全量+变更数据捕获(CDC)」即可,DMS会自动扫描指定路径下新增的Avro文件推送到Kinesis流。
内容的提问来源于stack exchange,提问作者lerileri25
相关产品推荐
相关产品推荐

