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

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

【问题讨论】:

    标签: amazon-web-services amazon-kinesis data-stream


    【解决方案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 你知道transaction 在5 transactions per second for reads 中的确切含义吗?他们没有在文档中明确提及交易的含义
    • 找到了。 GetRecords 是一个读取事务,它可以获得 10k 条记录,它们每秒允许 5 个这些读取事务docs.aws.amazon.com/kinesis/latest/APIReference/…
    • @JohnRotenstein 你的意思是 subset 消息吗?
    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多