是否有一个特殊原因,pendingEmits队列限制为1024个元素

时间:2018-05-25 21:30:37

标签: apache-storm

我在5个r4.xlarge EC2节点的集群上使用Storm v1.2.1。目前,我正在处理涉及查询基于时间的滑动窗口的网络数据集。在为我的用例找出足够好的配置的众多反复试验周期之后,我遇到了Executor类,该类维护了一个名为pendingEmits的成员MpscChunkedArrayQueue<AddressedTuple>storm-client模块中的第119行,类:org.apache.storm.executor.Executor)。此队列具有1024个元素的硬编码上限。

每当我尝试使用我的数据集进行配置时,当Storm试图向IllegalStateException添加完整容量的确认元组时,我会收到pendingEmits。为了避免异常,我将pendingEmits的硬编码大小增加到16534.这似乎有效(暂时)。

为什么pendingEmits的最大尺寸设置为1024?是因为表现,还是随机决定?

我对这个决定持怀疑态度,因为如果一个窗口包含超过1024个元组(在我的情况下每个窗口大约有2700个元组),队列将变满,并且IllegalStateException将被抛出。

通过增加pendingEmits最大尺寸,我是否会危及Storm的其他方面(组件)?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定为什么要选择1024(可能就像你提到的那样),但是如果你拉出最新版本的Storm,它应该是https://github.com/apache/storm/pull/2676