我在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的其他方面(组件)?
谢谢!
答案 0 :(得分:1)
我不确定为什么要选择1024(可能就像你提到的那样),但是如果你拉出最新版本的Storm,它应该是https://github.com/apache/storm/pull/2676。