Kinesis 碎片 VS 分区键

Kinesis Shards VS Partition Key

如果在创建 Kinesis 数据流时我指定了分片的数量,比方说 10,并且每次我放置记录时我都会为其分配一个随机分区键,如下所示:

 var putRecord = new PutRecord
            {
                Data = data ?? new byte[0],
                StreamName = stream,
                PartitionKey = GetRandomPartitionKey()
            };

kinesis 将如何决定将记录放入某个分片,如果唯一分区键的数量多于分片的数量会怎样?

散列和取模。

分区键散列,然后除以分片数。划分的 modulo 决定了要使用的分片。这样,分区键始终使用相同的分片。如果更改分片数量,则分配将不同。

这是很多系统常用的方法。例如Python个字典的内部存储就是用这种方法分配key/value对的存储。