我正在一个包含 5 个r4.xlarge
EC2 节点的集群上使用 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 修复。