我有一个HDInsight Storm Cluster(默认60核心设置)
我使用了模板项目,并使用了最新的jar依赖项(0.9。 4)
昨天我正在运行该应用程序并通过我的事件中心传递了20,000,000条消息,没有问题。
添加新螺栓后(我现在从EventHub接收到不同的螺栓)我现在每次只接收1024条消息(确切地说)。
如果我删除拓扑并重新部署它,它会用来处理EventHub中的所有消息,现在它只执行1024.
我已经删除了天蓝色的服务总线命名空间,我重新创建了它,将其扩展到10个MU,并且一次只能处理1024个消息。
我能想到的是,这可能与接收者信用有关吗?
在github上查看Java spout的source,你可以看到这一行:
+eventhubs.checkpoint.interval = 10
+eventhubs.receiver.credits = 1024
从MSDN起,对EventHubCredits的解释是:
eventhub.receiver.credits的值确定事件的数量 在将它们发布到Storm管道之前进行批处理
好像我只收到一批。我目前正在提交1631封邮件,不止一批,但不足以进行两批。
[编辑] 这似乎与" StormConfig.setMaxSpoutPending"直接相关。设置。我之前已将其设置为100,000,此后一直在发生。删除配置此代码的代码块(下面)并重新部署后,它仍然发生。但是,当我重新添加代码,并将MaxSpoutPending设置为500时,我现在只获得500批次,而不是更多......
//global config:
var topologyConfig = new StormConfig();
topologyConfig.setMaxSpoutPending(500);
topologyConfig.setNumWorkers(partitionCount);
topologyBuilder.SetTopologyConfig(topologyConfig);
[EDIT2] 我在azure中重建了整个集群,并在没有任何StormConfig的情况下重新部署了解决方案(我也删除了HDFS blob存储,所以这是一个全新的安装。我没有删除表存储,但我没有&#39 ; t认为它用于Storm Server)..而且我回到了1024(不是之前的500)消息,但没有更多。
答案 0 :(得分:2)
检查你的螺栓是否正在返回。事件中心Spout期待ack,如果它没有得到它,它将停止接收。