c# - HDInsight Storm 事件中心 Spout 仅接收 1024 条消息

标签 c# .net azure apache-storm azure-hdinsight

我有一个 HDInsight Storm 集群(默认 60 核设置)

我已经使用了模板项目,并且正在使用最新的 jar 依赖项(0.9. 4)

昨天,我正在运行该应用程序,并通过我的事件中心传递了 20,000,000 条消息,没有出现任何问题。

添加新的 Bolt 后(我现在有一个从 EventHub 接收到的不同的 Bolt),我现在每次只(准确地)收到 1024 条消息。

如果我删除拓扑并重新部署它,它过去会处理 EventHub 中的所有消息,现在它只处理 1024。

我删除了 azure 中的服务总线命名空间,重新创建了它,将其扩展到 10 MU,但一次仍然只能处理 1024 条消息。

我所能想到的是,这可能与接收者积分有关?

查看source对于 github 上的 Java spout,您可以看到这一行:

+eventhubs.checkpoint.interval = 10
+eventhubs.receiver.credits = 1024

来自MSDN EventHubCredits的解释是:

The value for eventhub.receiver.credits determines how many events are batched before releasing them to the Storm pipeline

就好像我只收到一批。我目前提交了 1631 条消息,超过一批,但还不够两批。

[编辑] 这似乎与“StormConfig.setMaxSpoutPending”设置直接相关。我之前将其设置为 100,000,此后一直发生这种情况。删除配置此功能的代码块(如下)并重新部署后,它仍然发生。但是当我重新添加代码并将 MaxSpoutPending 设置为 500 时,我现在只能得到一批 500 个,再也没有了......

//global config:
var topologyConfig = new StormConfig();
topologyConfig.setMaxSpoutPending(500);
topologyConfig.setNumWorkers(partitionCount);
topologyBuilder.SetTopologyConfig(topologyConfig);

[编辑2] 我在azure中重建了整个集群,并重新部署了没有任何StormConfig的解决方案(我也删除了HDFS blob存储,所以这是一个全新的安装。我没有删除表存储,但我不认为用于 Storm 服务器).. 我又回到了 1024 条(不是之前的 500 条)消息,但没有更多了。

最佳答案

检查您的 Bolt 是否正在返回 ack。事件中心 Spout 期望收到确认,如果没有收到,它将停止接收。

关于c# - HDInsight Storm 事件中心 Spout 仅接收 1024 条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35160479/

相关文章:

Azure 配置可以执行多个任务吗?

c# - 如何创建一个将属于解决方案资源管理器中某个类的类?

c# - if 中的 Out 参数被认为是未分配的

.net - System.Linq.Enumerable.Reverse 是否将所有元素内部复制到数组中?

.net - 如何选择 WCF 绑定(bind)?

Azure: worker 角色循环通过 "recycling"

c# - Process.Start权限问题

c# - 如何在静态 WebMethod 中获取 Page.UICulture?

c# - 在同一解决方案/项目中混合 .NET 3.5 与 4/4.5 程序集

azure - Azure 上的 Terraform 预留 VM 实例