当前位置: 首页 > 知识库问答 >
问题:

Kinesis客户端库DynamoDB适配器是否会丢失数据

司徒浩思
2023-03-14

这里在github上发布的DynamoDB Streams Kinesis Adaptor具有此功能,并带有以下注释:

Kinesis模型在父分片合并的情况下提供相邻的父分片ID。由于DynamoDB Streams不支持合并,因此始终返回null。

我对此感到担忧,我将使用7个碎片的示例来描述我的担忧,为了简单起见,让我们将它们命名为0到6。

由于保留策略,0的父级不再可用,1、2、3、4、5是同级,因为DynamoDB表上的流量很高,它们都有0作为父级,6是当前打开的碎片,是DynamoDB表上流量峰值下降后合并的结果。我也会假设它只能有一个父对象,所以它的父对象是3。

那么,这是否意味着如果我们对具有上述状态的DynamoDB流启动一个使用此适配器的工作程序,它将只开始处理碎片0、3和6??

共有1个答案

高祺
2023-03-14

我了解到DynamoDB流碎片从不合并。即使在表的流量减少之后,每个(并行)碎片的吞吐量也会降低。我在问题中描述的情况不会发生。

也似乎是

DynamoDB流分片最多可以有1个父分片和2个子分片。

我从这个问题中学到的底线是:

Kinesis客户端库DynamoDB Streams Kinesis Adapter保证所有分片都将按顺序处理,除非您在处理分片时落后,以便在处理之前对其进行修剪。

 类似资料:
  • 根据doc Dynamodb streams和Kinesis data streams,低级API是相似的,但它们并非完全相同。 我注意到Dynamodb流的GetShardIterator有点不同,即它不支持AT_TIMESTAMP作为分片迭代器类型。 所以,我 我的推理正确吗?我还没有实现它。如果这似乎是一个阻碍点,我宁愿寻找另一个解决方案。

  • 为什么我发现KCL与AWS Lambda一起使用的例子如此之少。https://docs.aws.amazon.com/streams/latest/dev/developing-consumers-with-kcl.html 它确实提供了一个很好的实现来跟踪您在流中的位置(检查点)。 我想使用KCL作为消费者。我的设置是一个具有多个碎片的流。每个碎片上都有一个Lambda在消耗。我想使用Lamb

  • 根据AWS文件: worker使用Java ExecutorService任务调用记录处理器方法。如果任务失败,工作进程将保留对记录处理器正在处理的碎片的控制。工作进程启动一个新的记录处理器任务来处理该碎片。有关详细信息,请参阅阅读节流。 根据AWS文件的另一页: Kinesis客户端库(KCL)依靠您的进程记录代码来处理处理数据记录时出现的任何异常。从进程记录抛出的任何异常都被KCL吸收。为了避

  • 我试图捕获DynamoDB表更改使用DynamoDB流和AWS提供JavaDynamoDB流Kinesis适配器。我正在Scala应用程序中使用AWSJavaSDK。 我从遵循AWS指南和通过AWS发布的代码示例开始。然而,我在让亚马逊自己发布的代码在我的环境中工作方面遇到了问题。我的问题在于对象。 在示例代码中,使用DynamoDB提供的流ARN配置了。 我在Scala应用程序中遵循了类似的模式

  • 我的库需要连接到任意的AWS-IoT帐户,因此我在实例化AWS客户端时传递所需的凭据: 根据boto3文档(摘录如下),以这种方式传递的凭据应该覆盖所有其他凭据。然而,此调用从Boto3生成以下日志消息: 我真的不希望boto3拾取用户可能在他们的系统上配置的任何凭据——我希望它只使用我传递给boto3.client()的凭据。有什么想法如何确保这一点? 两份文件摘录:

  • 问题内容: 在Linux中,是否有任何库可通过远程桌面协议(RDP)作为客户端连接?所使用的语言是存在性的次要条件。任何主流语言都可以(例如C ++,Perl,Java,Ruby,PHP,Python),甚至不那么流行的语言(例如OCaml或Scheme)。 除了获取rdesktop源并从中窃取一个库以外,是否还有其他可用的选择? 问题答案: FreeRDP项目中提供了一组跨平台的开源RDP库。它