当我们在运行时增加分片时,Kinesis 如何保证消息的顺序?
Posted
技术标签:
【中文标题】当我们在运行时增加分片时,Kinesis 如何保证消息的顺序?【英文标题】:How Kinesis guarantee the messages order while we increase the Shards in runtime? 【发布时间】:2021-01-14 05:33:01 【问题描述】:我是 Kinesis 新手,当我阅读 Kinesis 文档时,我意识到使用相同分区键提供的消息将被映射到同一个 Shard 以保证顺序。这完全有道理。但是,我想知道如果我们在运行时增加主题分片的数量,具有相同分区键的新消息是否会像以前一样散列到相同的分片(旧的)?
如果是这样,如果所有消息都提供了分区键,那么它们都不会映射到新的 Shard 怎么办?这对我来说没有意义。
如果不是,那么 Kinesis 如何保证具有相同分区键的消息的顺序?
【问题讨论】:
【参考方案1】:了解 Kinesis 在 resharding 时的作用很重要:
有两种类型的重新分片操作:分片拆分和分片合并。在分片拆分中,您将单个分片分成两个分片。在分片合并中,您将两个分片组合成一个分片。重新分片始终是成对的,因为您不能在一次操作中拆分成两个以上的分片,并且您不能在一次操作中合并两个以上的分片。重新分片操作所作用的分片或分片对称为父分片。重新分片操作产生的分片或分片对称为子分片。
当您增加运动流的大小时,您将split shards
当您拆分分片时,您在此范围内指定一个值。该散列键值和所有更高的散列键值被分配到其中一个子分片。所有较低的哈希键值都分配到另一个子分片。
实际上,AWS 只是保证分片级别的顺序,因此在拆分后,您需要从分片和消费者端读取顺序,请参阅here。
【讨论】:
以上是关于当我们在运行时增加分片时,Kinesis 如何保证消息的顺序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Amazon Kinesis 服务上部署和运行 Amazon Kinesis 应用程序
UDP包划分为IP分片时,如何在第一个UDP分片中填写UDP长度?
在 Kinesis 中使用分区键来保证具有相同键的记录由相同的记录处理器 (lambda) 处理