目前,我正在开发一个用于处理原始机器测量数据的风暴拓扑。但是,我在使用喷头时遇到了无法解释的问题。
我正在用Java编写的Azure HDInsight上运行一个简单的风暴拓扑。从eventhub中读取事件,为此,我正在使用Microsoft eventhub喷口(0.9版)。这个eventhub有8个分区,这意味着我还需要8个Eventhubspout实例。
但是,当我将拓扑运行几个小时时,喷口会停止接连接收消息,直到每个喷口都安静为止。没有任何反馈。通过其他方法检查时,eventhub仍在运行。风暴/喷口根本不再记录任何东西。
对于这里可能存在的问题,我有几个想法:
首先,最近我们调整了发送到拓扑的消息。通过批处理(并在拓扑本身中进行解析),我们显着减少了消息量。每条消息的大小也已大大增加。这会导致两个问题:
每个分区每+/- 4秒仅收到一条消息,对于风暴来说这是低得离谱。难道是因为它会自动超时并崩溃吗?
消息“有时”是否太大,导致喷头崩溃/显示奇怪的行为?
其次,由于某些Azure错误或网络不可用,eventhub有时会短暂脱机。这可能意味着eventhub暂时没有发送消息了。在不接收数据的同时,喷口关闭了,但无法唤醒了吗?
由于上述每种原因,eventhub喷嘴是否应该自动从中恢复?如何调试/解决此问题?
最佳答案
我尝试搜索一些确保可以从异常中自动恢复eventhub喷口的代码,但是似乎没有任何代码可以执行此操作。
但是,我认为此问题可能是由https://issues.apache.org/jira/browse/STORM-329之类的Storm错误引起的。
要调试这样的问题,您可以尝试引用How to debug Apache Storm in Eclipse?来在Eclipse上使用HDInsight Storm的辅助JVM中的启用调试来进行远程调试。
希望能帮助到你。最好的祝福。