我正在尝试使用Kinesis客户端库从Kinesis数据流中消费数据。我在努力熟悉Kinesis的概念。它没有详细介绍租赁(Lease)概念,而是直接跳入了租赁的使用。
简单来说,什么是Kinesis中的租赁(Lease)?
我正在尝试使用Kinesis客户端库从Kinesis数据流中消费数据。我在努力熟悉Kinesis的概念。它没有详细介绍租赁(Lease)概念,而是直接跳入了租赁的使用。
简单来说,什么是Kinesis中的租赁(Lease)?
从高层次上看,DynamoDB表用于跟踪Kinesis应用程序流的状态。
'LeaseKey'是Kinesis分片ID的哈希值,并在DynamoDb表中用作哈希键。
因此,换句话说,当您的流在处理时,相应的DynamoDB表中会有每个分片的行。这些行包含与该分片当前处理状态相关的信息... 这被称为租赁信息。
您可以在此处查看有关每个租赁列在表中的完整表模式和元数据:
https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-ddb.html
字段 | 注释 |
---|---|
checkpoint |
分片的最新检查点序列号。此值在数据流中的所有分片中都是唯一的。 |
checkpointSubSequenceNumber |
当使用Kinesis生产者库的聚合功能时,这是一个扩展到检查点的内容,用于跟踪Kinesis记录中的单个用户记录。 |
leaseCounter |
用于租约版本控制,以便工作程序可以检测其租约是否已被另一个工作程序占用。 |
leaseKey |
租约的唯一标识符。每个租约特定于数据流中的一个分片,并且一次只由一个工作程序持有。 |
leaseOwner |
持有此租约的工作程序。 |
ownerSwitchesSinceCheckpoint |
自上次写入检查点以来,此租约已更改工作程序的次数。 |
hashrange |
由PeriodicShardSyncManager用于运行周期性同步以查找租约表中缺失的分片,并在需要时为它们创建租约。 |
childshards |
由LeaseCleanupManager用于查看子分片的处理状态,并决定是否可以从租约表中删除父分片。 |
shardID |
分片的ID。 |
streamname |
数据流的标识符,格式为account-id:StreamName:streamCreationTimestamp |
— 来自什么是租赁表
显然,一个碎片只能由1个工作程序租用,而一个工作程序可以(在有>1个碎片的情况下应该)租用多个碎片(我建议3:1的比率)。