【发布时间】:2018-12-11 04:48:10
【问题描述】:
我正在寻找解决方案,因为某频道已满。 我为计算合适的信道容量而烦恼。
This document有如下描述。
为了计算合适的容量,只需考虑以下参数:
・每单位时间(比如 1 分钟)源要放入频道的事件量。
・单位时间内接收器从通道获取的事件数量。
・估计每单位时间无法处理的事件数量,因此要重新注入到通道中(见下一节)。
如何检查这些参数的值?
【问题讨论】:
标签: flume flume-ng fiware-cygnus
我正在寻找解决方案,因为某频道已满。 我为计算合适的信道容量而烦恼。
This document有如下描述。
为了计算合适的容量,只需考虑以下参数:
・每单位时间(比如 1 分钟)源要放入频道的事件量。
・单位时间内接收器从通道获取的事件数量。
・估计每单位时间无法处理的事件数量,因此要重新注入到通道中(见下一节)。
如何检查这些参数的值?
【问题讨论】:
标签: flume flume-ng fiware-cygnus
如何检查这些参数的值?
您不能只检查这些参数。它们取决于您的应用程序。
他们的意思是你应该有一个足够大的尺寸,这样发电机就不会卡住。这在您的应用程序中可能是不可能的。
假设您的生成器每秒接收一个事件,并且接收器需要 2 秒来管理该事件。现在假设您有 3 个接收器。在 1 秒内,您可以设法处理每个接收器 0.5 个事件。您有 3 个接收器,因此您的接收器一起能够处理 0.5 × 3 = 1.5 个事件,这比您获得的输入要多。您的容量可以是 1 或 2,使用 2 将大大增加您不被阻止的机会。
让我们再看一个例子:
在此示例中,接收器的总数非常大,以至于您必须分解代码以在多台计算机上工作或优化接收器代码,以便它可以在合理的时间内处理数据。假设您有 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 和更大的容量对于不被阻塞很重要。
【讨论】: