我正在尝试使用 Kinesis 客户端库来使用来自 Kinesis 数据流的数据。我正在尝试熟悉 Kinesis 的概念。这里没有讲到Lease的概念,而是直接跳到Lease的使用上。
关于 Kinesis 中 Lease 到底是什么的简单解释
在较高级别,DynamoDB 表用于跟踪您的 Kinesis 应用程序流状态。
“LeaseKey”是 Kinesis 分片 ID 的散列,用作 DynamoDb 表中的散列键。
换句话说,当您的流正在处理时,相应的 dynamoDB 表中的每个分片都有一行。这些行包含与该分片的当前处理状态相关的信息......这被称为租赁信息。
您可以在此处查看有关每个租约列在表中的含义的完整表架构和元数据:
https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-ddb.html
在计算机科学中,租约是一种合同,它赋予其持有者在有限期限内对某些资源的特定权利。因为它是有时间限制的,所以租约是资源序列化锁的替代方案。
— 来自 Lease(计算机科学)- 维基百科
这个概念(默认情况下租约是一种临时安排)与传统的锁定机制相反,后者在明确删除之前是无限期的。
在这种情况下,lease holder 是消费者应用程序的工作人员,resource 是数据流中的分片。租约的当前快照(kinesis application streams state 如上所述)在 DynamoDB Lease Table 中,它包含以下字段
场 | 评论 |
---|---|
|
分片的最新检查点序列号。该值在数据流中的所有分片中都是唯一的。 |
|
使用 Kinesis Producer Library 的聚合功能时,这是对检查点的扩展,用于跟踪 Kinesis 记录中的单个用户记录。 |
|
用于租约版本控制,以便工人可以检测到他们的租约已被另一名工人占用。 |
|
租约的唯一标识符。每个租约都特定于数据流中的一个分片,并且一次由一名工人持有。 |
|
持有这份租约的工人。 |
|
自上次写入检查点以来,此租约已更换工人多少次。 |
|
PeriodicShardSyncManager 用于运行定期同步以查找租约表中丢失的分片,并在需要时为它们创建租约。 |
|
LeaseCleanupManager 用来查看子分片的处理状态,并决定父分片是否可以从租约表中删除。 |
|
分片的ID。 |
|
数据流的标识符,格式如下
|
—来自什么是租赁表
很明显,一个分片只能由 1 个工人租用,而 1 个工人可以(如果有 >1 个分片)租用多个分片(我推荐 3:1 的比例)。