首页 > 解决方案 > 使用 KCL 2.x 从 KinesisStream 获取 DynamoDBEvents

问题描述

从我使用 KCL 客户端获得的 KinesisClientRecord(记录)中,我可以通过执行以下操作从流中获取表示 ddb 更新事件的 JSON 对象:

String recordData = StandardCharsets.UTF_8.decode(record.data()).toString();
JSONObject kinesisRecordObject = new JSONObject(recordData);

现在,我想访问从 dynamoDB 获得的字段,但我无法将其反序列化为 DynamoDB JSON 而不是标准的,正如本文将 DynamoDB JSON 转换为 Standard JSON with Java中所解释的那样。那里给出的解决方案适用于 DynamoDBStreamRecord,但不适用于 KinesisClientRecord(我正在使用)你能告诉我如何实现这一步吗?对于 KCL 1.x,我发现可以使用 KCL Adapter,但我使用的是 KCL 2.x!

如何反序列化它以获取 DDB 更新中的字段?

标签: javaamazon-web-servicesamazon-dynamodbamazon-kinesisamazon-kcl

解决方案


使用 KCL 2 时,您会从 Kinesis 获得 CommittableRecord 对象。从中您需要提取 UTF 8 编码的 records().data()(默认情况下)。解码后得到的 JSON 字符串可以转换成想要的 POJO

像这样的东西

String recordData =
        new StringBuffer(StandardCharsets.UTF_8.decode(committableRecordObject.record().data()))
        .toString();

推荐阅读