我正在尝试使用Amazon DMS监听Aurora数据库的更改,并将更改推送到Kinesis流中,其中,监听该流的Lambda函数将进行处理。
我指的是以下文档来编写规则。
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html https://aws.amazon.com/blogs/database/use-the-aws-database-migration-service-to-stream-change-data-to-amazon-kinesis-data-streams/
这是我的DMS持续复制(CDC)任务的规则映射。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "my_db",
"table-name": "my_table"
},
"rule-action": "include"
},
{
"rule-type": "object-mapping",
"rule-id": "2",
"rule-name": "2",
"rule-action": "map-record-to-record",
"object-locator": {
"schema-name": "my_db",
"table-name": "my_table"
},
"mapping-parameters": {
"partition-key": {
"attribute-name": "my_id",
"value": "${my_id}"
}
}
}
]
}
但是,当我在源表中进行更改时,DMS任务失败,并出现以下错误。
2019-02-05T10:36:55 [TARGET_APPLY ]E: Error allocating memory for Json document [1020100] (field_mapping_utils.c:382)
2019-02-05T10:36:55 [TARGET_APPLY ]E: Failed while looking for object mapping for table my_table [1020100] (kinesis_utils.c:258)
2019-02-05T10:36:55 [TARGET_APPLY ]E: Error executing data handler [1020100] (streamcomponent.c:1778)
2019-02-05T10:36:55 [TASK_MANAGER ]E: Stream component failed at subtask 0, component st_0_some_random_id [1020100] (subtask.c:1366)
2019-02-05T10:36:55 [TASK_MANAGER ]E: Task error notification received from subtask 0, thread 1 [1020100] (replicationtask.c:2661)
2019-02-05T10:36:55 [TASK_MANAGER ]W: Task 'some_random_task_id' encountered a fatal error (repository.c:4704)
当我尝试不使用object-mapping
规则时,Kinesis将获得具有正确值的"partitionKey": "my_db.my_table"
记录,这是表到表接收器的默认行为,但是我们需要表到运动池。
为什么我这么关心partition-key
?因为我需要利用Kinesis流中的所有碎片。
有人可以帮我吗?
更新:
当我将"partition-key-type": "schema-table"
添加到"mapping-parameters"
时,它不会失败,任务不会失败,但是会忽略"partition-key"
属性,并且将"partitionKey": "my_db.my_table"
作为以前。
不确定点:
"partition-key-type":
"schema-table"
,但从未提及表对动的意义是什么。答案 0 :(得分:0)
所以,我在这里回答自己的问题。
我们与AWS支持团队保持联系,他们说这是他们方面的问题,而且文档并不能反映确切的功能。他们还在内部筹集了罚单,并在以后修复了该罚单。
目前,由于DMS无法满足我们的期望,我们决定采用其他解决方案。