目前我正在开发一个 Storm 拓扑来处理原始机器测量数据。但是,我在喷嘴方面遇到了无法解释的问题。
我正在 Azure HDInsight 上运行一个用 Java 编写的简单 Storm 拓扑。事件是从 eventhub 中读取的,我使用的是 microsoft eventhub spout(版本 0.9)。这个eventhub有8个分区,这意味着我还需要8个Eventhubspout实例。
但是,当我运行拓扑几个小时时,spout 会陆续停止接收消息,直到每个 spout 都安静下来。没有给出任何反馈。当我通过其他方式检查 eventhub 时,它仍然正常运行。 Storm/the spouts 根本就不再注册任何东西。
对于这里可能出现的问题,我有几个想法:
首先,最近我们调整了发送到拓扑的消息。通过批处理(以及拓扑本身的解析),我们显着减少了消息量。每条消息的大小也大大增加。这可能会导致两个问题:
每个分区每 +/- 4 秒才收到一条消息,这对于 Storm 来说低得离谱。难道是因为这个自动超时崩溃了?
消息“有时”是否太大,导致 spout 崩溃/显示奇怪的行为?
其次,有时可能会由于某些 Azure 错误或网络不可用而导致 eventhub 短暂脱机。这可能意味着 eventhub 在一段时间内不会发送消息。没有接收数据时,spout关闭但无法唤醒?
对于上述每个原因,eventhub spout 不应该自动恢复吗?可以采取什么措施来调试/解决这个问题?
最佳答案
我尝试搜索一些确保自动从异常中恢复 eventhub spout 的代码,但似乎没有任何代码可以执行此操作。
但是,我认为该问题可能是由 Storm 错误引起的,例如 https://issues.apache.org/jira/browse/STORM-329 .
要调试这样的问题,可以尝试引用How to debug Apache Storm in Eclipse?通过在 HDInsight Storm 的工作线程 JVM 中启用调试来在 Eclipse 上进行远程调试。
希望有帮助。谨致问候。
关于java - Storm : eventhub spout stops receiving messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381516/