【问题标题】:Multiple KCL application with same application name reading from one Kinesis Stream从一个 Kinesis Stream 读取具有相同应用程序名称的多个 KCL 应用程序
【发布时间】:2022-06-24 17:49:49
【问题描述】:

我对 KCL 的工作方式感到困惑。首先这些是我现在的理解。

  • 1 KCL 应用程序使用一个应用程序名称,创建一个 dynamodb 表。
  • 1 KCL 应用程序有一个工作人员,其中有 x 个记录处理器并行处理流中的 x 个分片。
  • dynamodb 表跟踪每个分片的所有者、检查点等。

如果我创建多个,比如说 3,具有不同应用程序名称的 KCL 应用程序,那么它们基本上是从同一流中读取的不同应用程序,通过具有单独的 dynamodb 表相互隔离。他们三个都会读取流中所有 x 个分片,并分别跟踪检查点。

基于我阅读的一些文档,例如:https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-scaling.html

我假设如果我创建另一个具有相同应用程序名称的 KCL 应用程序,将会有 2 个 KCL 应用程序在同一个流上工作,并且分片被负载平衡到 2 个应用程序中的 2 个工作人员。

所以,从技术上讲,我可以在 8 个 ec2 实例中创建 8 个 KCL 应用程序(假设流中有 8 个分片),并且每个实例都将处理一个分片而不会发生冲突,因为它们每个都在自己的行中检查点dynamodb 表。

我认为是这种情况,但这篇文章另有建议:Multiple different consumers of same Kinesis stream

否则我怎么能做到这一点

假定与此应用程序名称关联的所有工作人员在同一个流上一起工作。这些工作人员可能分布在多个实例上。如果您运行相同应用程序代码的另一个实例,但应用程序名称不同,则 KCL 会将第二个实例视为也在同一流上运行的完全独立的应用程序。

这里提到https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-implementation-app-java.html#kinesis-record-processor-initialization-java

参考:

https://www.amazonaws.cn/en/kinesis/data-streams/faqs/#recordprocessor https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-scaling.html https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-implementation-app-java.html#kinesis-record-processor-initialization-java

【问题讨论】:

    标签: amazon-dynamodb amazon-kcl aws-kinesis


    【解决方案1】:

    KCL 库需要 ConfigsBuilder,您可以在其中传递 streamName、applicationName、kinesisAsyncClient 等。在这里,如果您指定与流名称关联的应用程序名称,那么

    DynamoDB 表与应用程序名称并使用该表来 维护状态信息

    因此,如果您有多个流,那么您可以创建多个 software.amazon.kinesis.common.ConfigsBuilder,其中包含各个流名称及其关联的应用程序名称。 将单个 configBuilder 属性传递给 software.amazon.kinesis.coordinator.Scheduler

    通过这种方式,您将为每个单独的流提供一个 dynamodb。而且您的多实例应用只能使用每个流事件一次。

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多