【发布时间】: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://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