【问题标题】:How does amazon streams kinesis shard count calculator formula works亚马逊流 kinesis 碎片计数计算器公式如何工作
【发布时间】:2018-05-24 15:33:15
【问题描述】:

我正在尝试学习 aws kinesis 流,并根据 aws kinesis 流文档。 每个分片最多可提取 1MB/秒或 1000 条记录/秒,并允许读取高达 2MB/秒和每秒 5 个事务进行读取。

因此我的疑问是: 如果我的数据包大小为 250kb,并且每个分片只允许写入 1MB,那么要获得每秒 200 条消息的吞吐量,我将需要大约 50 个分片(根据 aws 分片计算器,49 个,如下图所示)。但是在使用 AWS 提供的 shard-calculator 时,它还会询问消费者的数量,如果我提供,(比如 3 个消费者),它会将分片数从 50 增加到 74,现在我的问题是,添加消费者如何改变所需的分片数?

所以有人可以解释一下这里的逻辑。 谢谢。

【问题讨论】:

  • 我想知道您是否错过了消费者应用程序一词的细微差别。如果您独立地接收和处理所有流分片的两个完整副本,则您有 2 个使用者 应用程序。这与您可能拥有的 n 个工作节点的数量不同,每个工作节点处理 1 / n 个分片,正如您正确推断的那样,不会影响需要的分片数。多个工作节点可以共同组成一个消费者应用程序。
  • 谢谢迈克尔,如果我错了,请纠正我,因为工人是一个线程,所以 KCL 会根据可用的分片数量自动分叉新线程。同样,当您说每个工作节点处理 1/n 分片时,这是否意味着一个工作节点具有迭代器在分片中数据的不同索引处工作。
  • 请注意措辞:"You can deploy the consumer to an EC2 instance by adding to one of your AMIs. You can scale the consumer by running it on multiple EC2 instances under an Auto Scaling group." 尽管讨论了多个实例,但“消费者”一词在这里明显是单数。另请参阅KCL 功能。
  • 通过阅读 amazon kinesis 文档,我理解的是,就对分片执行的操作而言,读取和写入是独立的操作,因此通过为写入提供特定数量的分片,我们只是在解决我们的写入速度问题对于生产者。此外,在快速读取数据时,首先取决于分片的数量,因为数量越大意味着每个 kcl 工作人员将获得自己的分片,而不必担心分时资源。但它会因情况而异。
  • 你在哪里找到这个分片计算器?

标签: amazon-web-services amazon sharding amazon-kinesis


【解决方案1】:

AWS 定义了以下公式来计算分片的数量

Number_of_shards = max(incoming_write_bandwidth_in_KiB/1024, outcoming_read_bandwidth_in_KiB/2048)

在你的情况下,

incoming_write_bandwidth_in_KiB =

avg.data size in kb * records per second
                                = 250 * 200 = 50000

outgoing_read_bandwidth_in_KiB =

incoming_write_bandwidth_in_KiB * consumers
                                =  50000 * 3 = 150000

所以,分片数

= max (50000/1024,150000/2048)
                 = max (48.8 , 73.2)
                 = 73.2 

因此有 74 个分片。

【讨论】:

  • @sal - 以上说得通吗?
  • 谢谢@Muzammil,是的,我发布了这个问题已经有一段时间了,我现在搬到了kafka,但是感谢您的精彩解释,顺便说一句,当我发布这个问题时,我可能指的是具有三个消费者的消费者组。这将导致有效负载在它们之间分布,而不是拥有三个单独的数据集副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多