下沉到Kinesis时,具有自定义规则的Amazon DMS任务失败

时间:2019-02-05 13:28:37

标签: amazon-web-services aws-dms amazon-dms

我正在尝试使用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"作为以前。

不确定点:

  1. 在表到表下沉中,它使用"partition-key-type": "schema-table",但从未提及表对动的意义是什么。
  2. 文档中的示例和解释非常有限,甚至是错误的(即JSON某些规则无效)

1 个答案:

答案 0 :(得分:0)

所以,我在这里回答自己的问题。

我们与AWS支持团队保持联系,他们说这是他们方面的问题,而且文档并不能反映确切的功能。他们还在内部筹集了罚单,并在以后修复了该罚单。

目前,由于DMS无法满足我们的期望,我们决定采用其他解决方案。