gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:08:46 28 4
gpt4 key购买 nike

在生产者-消费者 Web 应用程序中,为 kinesis 流分片创建分区键的思考过程应该是什么。
假设,我有一个包含 16 个分片的 kinesis 流,我应该创建多少个分区键?它真的取决于分片的数量吗?

最佳答案

分区(或哈希)键:从 1 开始到 340282366920938463463374607431768211455。假设 ~34020 * 10^34,我将省略 10^34 以方便...

如果您有 30 个分片,均匀划分,每个分片应覆盖 1134 * 10^34 个哈希键。覆盖范围应该是这样的。

Shard-00: 0 - 1134
Shard-01: 1135 - 2268
Shard-03: 2269 - 3402
Shard-04: 3403 - 4536
...
Shard-28: 30619 - 31752
Shard-29: 31753 - 32886
Shard-30: 32887 - 34020

如果您有 3 个消费者应用程序(监听这 30 个分片),每个应用程序应该监听 10 个分片(最佳平衡)。

这也解释了对流的合并和拆分操作。

  • 要合并 2 个分片,它们应该覆盖相邻的哈希键。您不能合并 Shard-03 和 Shard-29。
  • 您可以拆分任何分片。如果在中间分割shard-00,分布会是这样;

  • Shard-31: 0 - 567
    Shard-32: 568 - 1134
    Shard-01: 1135 - 2268
    Shard-03: 2269 - 3402
    Shard-04: 3403 - 4536
    ...
    Shard-28: 30619 - 31752
    Shard-29: 31753 - 32886
    Shard-30: 32887 - 34020

    看,Shard-00 将不再接受新数据。放入具有相同分区键范围(如 Shard-00)的 Kinesis 流中的新记录将放置在 Shard-31 或 Shard-32 下。

    在将数据发送到 Kinesis(即生产者端)时,您不必担心“数据去往哪个分片”。发送随机数(或 uuid,或以毫秒为单位的当前时间戳)最适合在分片上有效地扩展和分发数据。除非您担心单个分片中记录的顺序,否则最好为 put_record 请求选择一个随机数/不断变化的分区键。

    在 Java 中,您可以使用“ putRecordsRequestEntry.setPartitionKey(Long.toString(System.currentTimeMillis()))”或“ putRecordRequest.setPartitionKey(Long.toString(System.currentTimeMillis()))”作为示例。

    关于amazon-kinesis - 如何确定 AWS kinesis 流中的分区键总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348606/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com