挂起的"发出"队列仅限于 1024 个元素是否有特殊原因



我正在一个包含 5 个r4.xlargeEC2 节点的集群上使用 Storm v1.2.1。目前,我正在处理一个涉及查询基于时间的滑动窗口的网络数据集。经过无数次试错循环,为我的用例找出一个足够好的配置,我遇到了Executor类,它维护一个名为pendingEmits的类型为MpscChunkedArrayQueue<AddressedTuple>的成员(storm-client模块中的第 119 行,类:org.apache.storm.executor.Executor(。此队列具有 1024 个元素的硬编码上限。

每次尝试使用数据集进行配置时,当 Storm 尝试将确认元组添加到具有完整容量的pendingEmits时,我都会收到一条IllegalStateException。为了避免出现异常,我将pendingEmits的硬编码大小增加到 16534。这似乎正在工作(目前(。

为什么pendingEmits的最大大小设置为 1024?是因为性能,还是随机决定?

我对这个决定持怀疑态度,因为如果一个窗口由超过 1024 个元组组成(在我的例子中,每个窗口大约有 2700 个元组(,队列将变得满员,并且IllegalStateException将被抛出。

通过增加最大大小pendingEmits是否会危及 Storm 的其他方面(组件(?

谢谢!

我不确定为什么选择 1024 确切(可能是为了您提到的性能(,但如果您拉取最新版本的 Storm,它应该 https://github.com/apache/storm/pull/2676 修复。

相关内容

最新更新