风暴喷口/拓扑性能

ma8fv8wu  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(392)

我对ApacheStorm的性能有一个问题,主要是从喷口。
我有一个从红隼队列中发射物品的拓扑。我买了大约2000件,每次 nextTuple 在我发出的喷口中被称为。
当我在i7macbookpro的本地集群中运行时,我看到我每秒发出大约20个元组,风暴将调用 nextTuple 每50ms一次。
我使用1个喷口任务和1个喷口执行器运行。我有 setMaxSpoutPending 设置为10。
为什么每次打电话都有这么大的时间间隔 nextTuple ? outputcollector是否在发出新元组之前等待每个元组的回音?
我正在运行Java8和StormVersion0.9.4

brgchamk

brgchamk1#

你的模式很不对劲。。。您应该只从队列中获取一个元组,或者发出所有获取的2000个元组。这将遵循storm的设计。
使用额外的线程并不符合storm的设计。你没有理由不想同时发出2000个元组。。。
是的,如果你在你的喷口中分配消息ID并设置 max.spout.pending 风暴不会再打电话给我了 Spout.nextTuple() 只要有超过10个元组在飞行中,即没有确认。

nqwrtyyt

nqwrtyyt2#

根据文件:https://storm.apache.org/apidocs/backtype/storm/spout/ispout.html
storm在同一个线程上执行ack、fail和nexttuple。这意味着ispout的实现者不需要担心这些方法之间的并发问题。但是,这也意味着实现者必须确保nexttuple是非阻塞的:否则该方法可能会阻塞待处理的ack和fails。
技巧1:调用nexttuple时发出1个tuple。技巧2:不要在nexttuple中获取数据,而是在单独的线程中执行,并使用任何并发队列来推送和轮询数据,这样nexttuple将只轮询数据。技巧3:尝试将setmaxspoutpending设置为1。技巧4:确保每个bolt的execute(tuple)方法都得到了优化。

相关问题