当前位置: 首页 > 知识库问答 >
问题:

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

蒲坚
2023-03-14

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

共有1个答案

龙博
2023-03-14

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

如果您有30个碎片,统一划分,每个碎片应覆盖1134*10^34哈希键。覆盖面应该是这样的。

<代码>夏普-00:0-1134夏普-01:1135-2268夏普-03:2269-3402夏普-04:3403-4536...夏普-28:30619-31752夏普-29:31753-32886夏普-30:32887-34020

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

  • 要合并2个碎片,它们应该覆盖相邻的哈希键。不能合并Shard-03和SHARD-29。
  • 您可以拆分任何碎片。如果在中间拆分shard-00,则分布将如下所示;

<代码>夏普-31:0-567夏普-32:568-1134夏普-01:1135-2268夏普-03:2269-3402夏普-04:3403-4536...夏普-28:30619-31752夏普-29:31753-32886夏普-30:32887-34020

当将数据发送到Kinesis(即生产者端)时,您不应该担心“数据会去哪一个分片”。发送一个随机数(或uuid,或当前时间戳(单位为millis))对于在碎片上有效地缩放和分发数据是最好的。除非您担心单个碎片中记录的排序,否则最好为put_record请求选择一个随机数/不断变化的分区键。

在Java中,可以使用“putrecordsRequestEntry.SetPartitionKey(Long.ToString(System.CurrentTimeMillis()))”或“putrecordrequest.SetPartitionKey(Long.ToString(System.CurrentTimeMillis())”。

 类似资料:
  • 我一直在使用SE上发布的问题的一个极好的答案来确定分区的数量,以及跨数据帧的分区分布需要知道数据帧Spark中的分区详细信息 有人能帮我扩展答案来确定数据帧的分区大小吗? 谢谢

  • 在《计算机系统:程序员的视角》一书中,练习5.5显示了一段计算多项式值的代码 本练习假设双精度浮点加法和乘法所需的时钟周期分别为3和5。读者被要求解释为什么测量的CPE(每元素周期)值为5。 根据练习答案,在每次迭代中,我们需要更新变量xpwr和result,我们需要的操作是浮点加法(对于结果)和浮点乘法(对于xpwr),因此后者控制延迟,导致最终CPE为5。 但我认为数据流应该是这样的: 所以最

  • 问题内容: 我希望能够以某种方式在SQL Server 2005中执行的操作是以表名作为输入来确定组成主键的所有字段。似乎没有这个领域。关于在哪里看有什么想法? 问题答案: 我在编写的代码生成器中使用它来获取主键:

  • 我是新来的火花,所以我按照这个惊人的教程从sparkbyexamples.com和阅读我发现这一节: 洗牌分区大小 根据您的数据集大小,大量内核和内存PySpark洗牌可能会对您的工作有利或有害。当您处理的数据量较少时,通常应该减少无序分区,否则最终会得到许多分区文件,每个分区中的记录数较少。这会导致运行许多任务时需要处理的数据较少。 另一方面,当您有太多数据并且分区数量较少时,会导致运行时间较长

  • 因此,如何跨辅助节点对RDD进行分区,是将被分区的单个RDD还是一个完整的批处理。 我可能拿错了。请指引我

  • 使用,我们可以获得分区的计数。但是我们怎么得到分区呢? 我还试图从文档和所有属性(使用)中获取一些信息。但是,我找不到任何提供分区的API,只能找到、、。 我读了这篇文章并推断Spark不知道分区键。我的疑问是,如果它不知道分区键,因此也不知道分区,它怎么能知道它们的计数呢?如果可以,如何确定分区?