Kinesis数据流中的“shards”是什么?

16

什么是Kinesis数据流中的分片(shards)和分区键(partition key)?我阅读了AWS文档,但是还是不太理解。能否用简单易懂的语言解释一下?

1个回答

28

来自Amazon Kinesis数据流术语和概念 - Amazon Kinesis数据流:

分片是流中一系列唯一标识的数据记录。一个流由一个或多个分片组成,每个分片提供固定单位的容量。每个分片最多支持每秒5次读取事务,最大总数据读取速率为每秒2 MB,并且每秒最多支持1,000条写入记录,最大总数据写入速率为每秒1 MB(包括分区键)。您的流的数据容量是你为流指定的分片数量的函数。流的总容量是其分片容量的总和。

因此,一个分片有两个目的:

  • 一定数量的容量/吞吐量
  • 一组有序的消息

如果应用程序必须按顺序处理所有消息,则只能使用一个分片。可以将其视为银行的队列-如果只有一个队列,则每个人都按顺序服务。

然而,如果消息只需要为某个消息的子集排序,它们可以发送到单独的分片。例如,在银行中的多条线路,其中每条线路按顺序提供服务。或者,想象一下公交车发送GPS坐标。每辆公交车只向一个分片发送消息。一个分片可能包含来自多辆公交车的消息,但每辆公交车只发送到一个分片。这样,当处理来自该分片的消息时,所有特定公交车的消息都会被按顺序处理。
这是通过使用“分区键”来控制的,它标识了源。分区键被哈希并分配给一个分片。因此,具有相同分区键的所有消息将进入同一个分片。
在后端,通常有一个工人为每个分片处理来自该分片的消息,按顺序进行处理。
如果您的系统不关心保留消息顺序,则使用随机分区键。这意味着消息将被发送到任何分片。

2
因此,分片包含一组数据记录。 每个数据记录的最大大小可以为1mb,并且每个分片可以有最多1000个记录。 这是否意味着一个分片的最大大小为1000mb? - Desp
4
碎片并不完全“包含”记录。将其视为一根水管,记录通过其中传递。水管只能在一段时间内接受一定数量的消息(水)。如果您想发送更多的水,请增加并行的水管数(增加碎片数)。 - John Rotenstein
@JohnRotenstein,您知道“每秒5个事务用于读取”中的“事务”确切含义吗?文档中没有明确指出事务指的是什么。 - Paras Diwan
找到了。GetRecords是一个读取事务,可以获取10k条记录,并且允许每秒5个这样的读取事务。https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html - Paras Diwan
@JohnRotenstein 你是指消息的子集吗? - peer
@Peer 哎呀!已修复。 - John Rotenstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接