如何计算适当的通道容量?

qaxu7uf2  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(392)

我正在寻找解决方案,因为sth频道已满。我很难计算出合适的信道容量。
本文件描述如下。
为了计算适当的容量,只需考虑以下参数:
・每单位时间(比如1分钟)由源放入通道的事件量。
・接收器每单位时间从通道获取的事件量。
・对每单位时间内无法处理的事件数量的估计,因此需要重新注入信道(见下一节)。
如何检查这些参数的值?

kx5bkwkv

kx5bkwkv1#

如何检查这些参数的值?
你不能只检查这些参数。它们取决于你的申请。
他们说的是你应该有一个足够大的尺寸,这样发电机就不会卡住。这在您的应用程序中可能不可能实现。
假设您的生成器每秒接收一个事件,而接收器管理该事件需要2秒钟。现在假设你有3个接收器。在1秒内,每个接收器可以处理0.5个事件。你有3个接收器,所以你的接收器,加在一起,能够处理0.5× 3=1.5个事件,这比作为输入得到的要多。您的容量可以是1或2,使用2将大大增加您不被阻止的机会。
让我们回顾另一个例子:
你的生成器希望每秒推送1000个事件
你的接受者需要3秒钟来处理一个事件
您需要1000 x 3=3000个接收器(3000个goroutines,可以并行全速运行…)
在这个例子中,接收器的总数是如此之大,以至于你要么分解你的代码在多台计算机上工作,要么优化你的接收器代码以便它能在合理的时间内处理数据。假设你有50个处理器,你的接收器每秒将获得1000个事件,所有50个处理器都可以全速运行,你需要一个接收器来完成它的工作:
50/1000=0.05秒
现在让我们假设,在大多数情况下,你的goroutines需要0.02,但是偶尔一次,一个goroutines需要1秒。这意味着你的血缘关系会落后一点。在这种情况下,您的容量(因此发电机不会被阻塞)应该略高于1000。同样,这将取决于有多少例程变慢,等等。在最后一个示例中,一次运行是0.02秒,因此处理1000个事件通常需要0.02秒。如果你能在1秒的时间内发送1000个事件,你甚至不需要50个goroutine,而且可以有更小的容量。另一方面,如果你有大爆发,你可能会在一次发送很多(比如500个)事件,那么更多的goroutine和更大的容量是很重要的,不要被阻止。

相关问题