kinesis 数据流中的分片是啥

Posted

技术标签:

【中文标题】kinesis 数据流中的分片是啥【英文标题】:What is shards in kinesis data streamkinesis 数据流中的分片是什么 【发布时间】:2019-10-24 04:10:50 【问题描述】:

什么是 kinesis 数据流和分区键中的分片。我阅读了 aws 文档,但我不明白。谁能简单的解释一下?

【问题讨论】:

【参考方案1】:

来自Amazon Kinesis Data Streams Terminology and Concepts - Amazon Kinesis Data Streams:

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

所以,分片有两个用途:

一定量的容量/吞吐量 消息的有序列表

如果您的应用程序必须按顺序处理所有条消息,那么您只能使用一个分片。把它想象成银行里的一条线——如果有一条线,那么每个人都会按顺序得到服务。

但是,如果消息只需要为消息的某个子集排序,则可以将它们发送到单独的分片。例如,银行中的多条线路,每条线路按顺序提供服务。或者,想想一辆发送 GPS 坐标的公共汽车。每条总线仅向单个分片发送消息。一个分片可能包含来自多个总线的消息,但每个总线只发送到 一个 分片。这样,当处理来自该分片的消息时,来自特定总线的所有消息都会按顺序处理。

这是通过使用标识源的分区键来控制的。分区键被散列并分配给一个分片。因此,所有具有相同分区键的消息都将进入同一个分片。

在后端,通常每个分片有一个工作人员,按顺序处理来自该分片的消息。

如果您的系统不关心保留消息顺序,则使用随机分区键。这意味着消息将被发送到任何分片。

【讨论】:

所以分片包含一组数据记录。数据记录的最大大小可以是 1mb,分片最多可以有 1000 条记录。那么这是否意味着分片的最大大小为 1000mb?? 分片并不完全“包含”记录。把它们想象成一条软管,记录通过它。软管在一段时间内只能接受一定数量的信息(水)。如果要输送更多的水,则需要并联更多软管(并联更多碎片)。 @JohnRotenstein 你知道transaction5 transactions per second for reads 中的确切含义吗?他们没有在文档中明确提及交易的含义 找到了。 GetRecords 是一个读取事务,它可以获得 10k 条记录,它们每秒允许 5 个这些读取事务docs.aws.amazon.com/kinesis/latest/APIReference/… @JohnRotenstein 你的意思是 subset 消息吗?

以上是关于kinesis 数据流中的分片是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用多个分片重新读取的 AWS Kinesis 数据顺序

解释 Kinesis 分片迭代器 - AWS Java 开发工具包

Amazon Kinesis - 使用情况和分片时间

Amazon Kinesis Streams - 每个分片有多个“主题”?

AWS Kinesis 中的分区键是啥?

如何确定 AWS kinesis 流中的分区键总数?