【问题标题】:How can I calculate the appropriate amount of channel capacity?如何计算合适的通道容量?
【发布时间】:2018-12-11 04:48:10
【问题描述】:

我正在寻找解决方案,因为某频道已满。 我为计算合适的信道容量而烦恼。

This document有如下描述。

为了计算合适的容量,只需考虑以下参数:
・每单位时间(比如 1 分钟)源要放入频道的事件量。
・单位时间内接收器从通道获取的事件数量。
・估计每单位时间无法处理的事件数量,因此要重新注入到通道中(见下一节)。

如何检查这些参数的值?

【问题讨论】:

    标签: flume flume-ng fiware-cygnus


    【解决方案1】:

    如何检查这些参数的值?

    您不能只检查这些参数。它们取决于您的应用程序。

    他们的意思是你应该有一个足够大的尺寸,这样发电机就不会卡住。这在您的应用程序中可能是不可能的。

    假设您的生成器每秒接收一个事件,并且接收器需要 2 秒来管理该事件。现在假设您有 3 个接收器。在 1 秒内,您可以设法处理每个接收器 0.5 个事件。您有 3 个接收器,因此您的接收器一起能够处理 0.5 × 3 = 1.5 个事件,这比您获得的输入要多。您的容量可以是 1 或 2,使用 2 将大大增加您不被阻止的机会。

    让我们再看一个例子:

    • 您的生成器希望每秒推送 1000 个事件
    • 您的接收器需要 3 秒来处理一个事件
    • 您将需要 1,000 x 3 = 3,000 个接收器(3,000 个可以并行全速运行的 goroutine...)

    在此示例中,接收器的总数非常大,以至于您必须分解代码以在多台计算机上工作或优化接收器代码,以便它可以在合理的时间内处理数据。假设您有 50 个处理器,您的接收器每秒将接收 1,000 个事件,所有 50 个都可以全速运行,您需要一个接收器来完成它的工作:

    50 / 1000 = 0.05 秒

    现在让我们假设在大多数情况下,您的 goroutines 需要 0.02,但偶尔会需要 1 秒。这意味着你的 goroutine 可能会落后一点。在这种情况下,您的容量(因此发电机不会被阻塞)应该略高于 1,000。同样,这取决于有多少例程变慢等。在最后一个示例中,一次运行是 0.02 秒,因此处理 1,000 个事件通常需要 0.02 秒。如果您可以在 1 秒内发送这 1,000 个事件,您甚至可能不需要 50 个 goroutine,并且容量可能会更小。另一方面,如果您有大量突发事件,最终可能会发送许多(例如 500 个)事件全部,那么更多的 goroutine 和更大的容量对于不被阻塞很重要。

    【讨论】:

      猜你喜欢
      • 2013-08-30
      • 2018-08-25
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2018-09-25
      • 1970-01-01
      相关资源
      最近更新 更多