pendingEmits 队列限制为 1024 个元素是否有特殊原因
Is there a particular reason that the pendingEmits queue is limited to 1024 elements
我正在 5 个 r4.xlarge
EC2 节点的集群上使用 Storm v1.2.1。目前,我正在处理一个涉及查询基于时间的滑动 windows 的网络数据集。在为我的用例找出足够好的配置的无数次反复试验之后,我遇到了 Executor
class,它维护了一个名为 pendingEmits
的成员,类型为 MpscChunkedArrayQueue<AddressedTuple>
(storm-client
模块中的第 119 行,class:org.apache.storm.executor.Executor
)。此队列具有 1024 个元素的硬编码上限。
每次我尝试使用我的数据集进行配置时,当 Storm 尝试以满容量向 pendingEmits
添加一个确认元组时,我会收到一个 IllegalStateException
。为了避免出现异常,我将 pendingEmits
的硬编码大小增加到 16534。这似乎有效(目前)。
为什么 pendingEmits
的最大大小设置为 1024?是因为性能,还是随机决定?
我对这个决定持怀疑态度,因为如果 window 包含超过 1024 个元组(在我的例子中每个 window 大约有 2700 个元组),队列将变满,并且IllegalStateException
将被抛出。
通过增加 pendingEmits
最大大小,我是否会危及 Storm 的其他方面(组件)?
谢谢!
我不确定为什么选择 1024(如你所说可能是为了性能),但如果你使用最新版本的 Storm,它应该被修复 https://github.com/apache/storm/pull/2676。
我正在 5 个 r4.xlarge
EC2 节点的集群上使用 Storm v1.2.1。目前,我正在处理一个涉及查询基于时间的滑动 windows 的网络数据集。在为我的用例找出足够好的配置的无数次反复试验之后,我遇到了 Executor
class,它维护了一个名为 pendingEmits
的成员,类型为 MpscChunkedArrayQueue<AddressedTuple>
(storm-client
模块中的第 119 行,class:org.apache.storm.executor.Executor
)。此队列具有 1024 个元素的硬编码上限。
每次我尝试使用我的数据集进行配置时,当 Storm 尝试以满容量向 pendingEmits
添加一个确认元组时,我会收到一个 IllegalStateException
。为了避免出现异常,我将 pendingEmits
的硬编码大小增加到 16534。这似乎有效(目前)。
为什么 pendingEmits
的最大大小设置为 1024?是因为性能,还是随机决定?
我对这个决定持怀疑态度,因为如果 window 包含超过 1024 个元组(在我的例子中每个 window 大约有 2700 个元组),队列将变满,并且IllegalStateException
将被抛出。
通过增加 pendingEmits
最大大小,我是否会危及 Storm 的其他方面(组件)?
谢谢!
我不确定为什么选择 1024(如你所说可能是为了性能),但如果你使用最新版本的 Storm,它应该被修复 https://github.com/apache/storm/pull/2676。