AWS DMS 迁移到Kafka报错:Payload size exceeds Kafka limit

问题描述:

AWS DMS是一个popular的数据库迁移工具,可以选择Amazon托管的MSK或者自建Kafka作为目标端。

当我们测试过程中,如果CDC阶段Fail并遇到如下报错,应该如何解决呢?

00333879: 2024-06-29T02:09:21 [DMS_INTERNAL    ]W:  Payload size exceeds Kafka limit. Skip record: [partiton key] xxxxx.qqqqqqq_1_06  (kafka_records.c:106)
00333879: 2024-06-29T02:09:21 [TARGET_APPLY    ]W:  Payload size exceeds Kafka limit. Skip this record.  (kafka_records.c:107)
00333879: 2024-06-29T02:09:21 [TARGET_APPLY    ]E:  Unable to send the message to the broker [1026800]  (stream_record_utils.c:980)
00333879: 2024-06-29T02:09:21 [DMS_INTERNAL    ]E:  Failed sending record for table xxxxxx.qqqqqq_1_06 with partition key: xxxxx.qqqqq_1_06 operation: update [1026800]  (stream_record_utils.c:980)

分析过程:

1. 首先,从日志来看,这个报错在[TARGET_APPLY]阶段出现。[TARGET_APPLY]意味着在这个迁移任务的CDC阶段,目标端出现报错[1].

因此,哪怕不看报错信息,我们也能够知道,报错是出现在目标端Kafka端的。

2. 再看日志中的报错信息:“Payload size exceeds Kafka limit”的原因是kafka生产者,也就是DMS发送的信息大小超过了 Kafka 所允许的最大限制。Kafka 默认的消息大小限制是 1MB,但是这个值可以根据需要调整。

这个问题通常发生在处理大型文档或者包含大量数据的记录时,尤其是当从像 DocumentDB 这样的 NoSQL 数据库迁移数据时,因为 NoSQL 数据库往往存储较大的文档。

解决方案:

此时我们不考虑优化DocumentDB数据模型,也不考虑用第三方工具,那么可以通过如下参数更改来进行排查:

  • 在 Kafka 的服务器配置文件 (server.properties) 中,可以增加 message.max.bytes 参数的值来提高消息大小的限制。例如,将其设置为 10MB:

    message.max.bytes=10485760
  •  通过如下command调整Kafka topic参数:
-- 调整迁移的target topic的参数(2M):

bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name <my-topic> --alter --add-config max.message.bytes= 20000000

-- 查询调整后的configuration

kafka-configs.sh --bootstrap-server xxxxxxxx:9092 --entity-type topics --entity-name topicname --describe
  • 在DMS Console上,Modify DMS target endpoint,更改Endpoint settings,添加如下[2]:

参考文档:

[1]https://docs.amazonaws.cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.Logging.html

[2]  使用 Apache Kafka 作为目标 Amazon Database Migration Service - Amazon 数据库迁移服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值