如果在创建Kinesis数据流时,我指定的碎片数为10,并且每次放置记录时,我都会为它分配一个随机的分区键,如下所示:
var putRecord = new PutRecord
{
Data = data ?? new byte[0],
StreamName = stream,
PartitionKey = GetRandomPartitionKey()
};
Kinesis如何决定将记录放入某个分片中?如果唯一分区键的数量大于分片数,会发生什么?
答案 0 :(得分:3)
哈希和模。
分区键已散列,然后除以分片数。分区的模确定要使用的分片。这样,分区键始终使用相同的分片。如果分片数量发生变化,则分配将有所不同。
这是许多系统中常用的方法。例如,Python字典的内部存储使用此方法为键/值对分配存储。