【发布时间】:2019-10-24 04:10:50
【问题描述】:
什么是 kinesis 数据流和分区键中的分片。我阅读了 aws 文档,但我不明白。谁能简单的解释一下?
【问题讨论】:
标签: amazon-web-services amazon-kinesis data-stream
什么是 kinesis 数据流和分区键中的分片。我阅读了 aws 文档,但我不明白。谁能简单的解释一下?
【问题讨论】:
标签: amazon-web-services amazon-kinesis data-stream
来自Amazon Kinesis Data Streams Terminology and Concepts - Amazon Kinesis Data Streams:
shard 是流中唯一标识的数据记录序列。一个流由一个或多个分片组成,每个分片提供一个固定的容量单位。每个分片每秒最多可支持 5 次读取事务,最高总数据读取速率为每秒 2 MB,最高每秒写入 1,000 条记录,最高总数据写入速率为每秒 1 MB (包括分区键)。流的数据容量是您为流指定的分片数量的函数。流的总容量是其分片容量的总和。
所以,分片有两个用途:
如果您的应用程序必须按顺序处理所有条消息,那么您只能使用一个分片。把它想象成银行里的一条线——如果有一条线,那么每个人都会按顺序得到服务。
但是,如果消息只需要为消息的某个子集排序,则可以将它们发送到单独的分片。例如,银行中的多条线路,每条线路按顺序提供服务。或者,想想一辆发送 GPS 坐标的公共汽车。每条总线仅向单个分片发送消息。一个分片可能包含来自多个总线的消息,但每个总线只发送到 一个 分片。这样,当处理来自该分片的消息时,来自特定总线的所有消息都会按顺序处理。
这是通过使用标识源的分区键来控制的。分区键被散列并分配给一个分片。因此,所有具有相同分区键的消息都将进入同一个分片。
在后端,通常每个分片有一个工作人员,按顺序处理来自该分片的消息。
如果您的系统不关心保留消息顺序,则使用随机分区键。这意味着消息将被发送到任何分片。
【讨论】:
transaction 在5 transactions per second for reads 中的确切含义吗?他们没有在文档中明确提及交易的含义
GetRecords 是一个读取事务,它可以获得 10k 条记录,它们每秒允许 5 个这些读取事务docs.aws.amazon.com/kinesis/latest/APIReference/…