我一直在使用storm拓扑设置,以便在不出现内存错误的情况下实现最大吞吐量。
3节点storm(V1.0.1)群集。显然,一个节点也是主节点,部署到AWS M3.2xLarge实例上。有12个工作人员(每个节点4个):
topology.workers: 12
每个工作者有4 GB的堆空间:
worker.heap.memory.mb: 4096
特别是我的一个bolt,让我们称之为:hashingbolt
具有12的并行性提示。
这将创建12个执行器,每个执行器有一个任务(因为我正在使用Flux配置/部署)。hashingbolt
的流类型为local_or_shuffle
。
当单击Storm UI中的hashingbolt
时,我希望在Executors(All Time)部分下看到12行-每个Executors一行-每行都包含一些内容。
我希望storm首先将4个本地执行器(在主节点上,因为local_or_shuffle
更喜欢本地执行器(如果可用的话))最大,然后恢复到shuffle并开始将其他两个节点上的执行器最大。
只有4个执行者做过任何事情。所有其他的都是空闲的,从不ACK/发射一个东西。我假设这是因为这4个执行者是本地的,他们是首选的。
现在,如果我将流类型更改为shuffle
,那么--当然--所有执行程序都可以工作,吞吐量也会增加。
local_or_shuffle
中使用?是不是因为4个执行器做的工作不够充分?local_or_shuffle
模式被推送到远程工作者吗?任何洞察力或建议都是非常感谢的。
除了下面所选的答案之外,我相信在具有平行度的螺栓上选择SHUFFLE,然后在后续螺栓上选择LOCAL_OR_SHUFFLE,也将确保所有工人保持忙碌,同时享受将后续工作保持在本地的潜在速度效益。
关于这一点的一些一般性评论:如果您只有3个节点,从性能的角度来看,使用比节点更多的工作者买不到多少东西。唯一的性能优势是每个内部“dispatcher线程”的负载较少(参见http://www.michael-noll.com/blog/2013/06/21/commanding-storm-internal-message-buffers/)。由于worker JVM本质上是多线程的,您可以将更多的执行器分配给单个worker--只要您的机器有足够的内核,您就会获得您所希望的速度。
每个拓扑使用比可用节点更多的工作者的主要目的实际上是为了获得更好的容错能力。如果一个工作JVM失败,那么执行器就会减少。一个supervisor可以拥有多个工作JVM的原因是拓扑隔离。单个工作JVM将只执行来自单个拓扑的spouts/bolts。因此,如果要在一台主机上部署多个拓扑,则每个拓扑至少需要每个主机一个工作者。
关于local-or-shuffle:如果您使用local-of-shuffle,为什么您会担心不是所有的下游执行者都得到分配的工作呢?如果本地服务器可以处理负载,那么拓扑结构就可以正常运行...如果不能处理负载,数据将自动分配给其他数据。所以我不理解您对并非所有执行者都获得输入数据的担忧。
此外,如果您想让所有执行者都忙,为什么不使用shuffle而不是local-or-shuffle呢?这保证了所有执行者获得完全相同的工作份额。
在过去的几天里,测试我情绪的问题是,尽管我的ESP8266芯片完全能够在while循环中通过parsePacket获取数据包,但当我既想监听传入的数据包,又想让我的ESP8266读取传感器并通过wifi发送这些数据包时,它完全忽略了这些。 所以我删掉了所有与传感器有关的内容,并在下面粘贴了代码,但下面是正在发生的事情。 在Setup()中,ESP设置wifi、SoftAP节点、UDP并进行配置 然
我很难让这个代码正常工作。我学了很多,但我是个初学者。 这是剧本: //将新事件推送到日历函数pushToCalendar(){//电子表格变量 var sheet=SpreadsheetApp.getActiveSheet(); var range=sheet.getRange(1,1,5,25); var values=range.getValues(); 这里有一个到假人的链接: https
我有一个Github repo项目,使用Github操作和一个docker文件来构建SpringBoot Java项目 我想从Github repo下载来自Github repo的定制工件包,并能够将工件上传到其中。 所以我按照配置Apache Maven用于GitHub包的链接,将该部分添加到settings.xml文件中: 为了从dockerfile构建中发布包,我在pom.xml中添加了以下
从包A中,我从特权包B触发了正在运行的服务。包B执行包A的更新。目标设备正在使用Android 9(API Level 28)。更新成功(应用程序版本代码已更改)。但我的问题是更新后,包A在后台;在我的设备上,它在后台应用程序列表中,我必须手动按下它才能将其带到前台。 我希望它在安装后回到前台。 我尝试了什么: > 在安装后从包B向包a发送广播意图;看起来在包的广播接收器上没有接收到意图(可能是因
GraphRequest请求=GraphRequest。newGraphPathRequest(AccessToken.getCurrentAccessToken(),“/我/朋友”,new GraphRequest。Callback(){@Override public void onCompleted(GraphResponse response){//在此处插入代码 } 这是我的男拳。xml
是否有一种方法可以扫描多个Google工作表,从键上的主工作表中找到匹配项,并在适用的情况下更新Google工作表中的单元格? 例如,下面我有4张。第一个是主人,其他的是孩子。如果来自Master的任何工作表的A列(倡议名称)上有匹配,则更新C列(金额)和D列(日期)中的单元格,否则保持工作表不变。在本例中,船长的倡议名称为“G”,金额为“50”,日期为“2020年1月4日”。儿童1的倡议名称为“