目前我正在开发用于处理原始机器测量数据的风暴拓扑。但是,我正在遇到鲸鱼喷水无法解释的问题。
我在Azure HDInsight上运行一个简单的风暴拓扑,用Java编写。从eventhub读取事件,我正在使用microsoft eventhub spout(版本0.9)。这个eventhub有8个分区,这意味着我还需要8个Eventhubspout实例。
但是,当我运行拓扑几个小时后,喷嘴会一个接一个地停止接收消息,直到每个喷口都安静。没有任何反馈意见。当我通过其他方式检查时,eventhub仍然正常运行。风暴/鲸鱼根本就没有注册任何东西了。
我对这里可能存在的问题有几点看法:
首先,我们最近调整了发送到拓扑的消息。通过批处理(以及拓扑本身中的解析),我们显着减少了消息量。每条消息的大小也大大增加。这可能会导致两个问题:
每个分区每隔+/- 4秒只收到一条消息,这对于风暴来说是非常低的。可能因为这个而自动超时和崩溃吗?
这封邮件有时可以'太大了,导致喷口崩溃/表现出奇怪的行为?
其次,由于某些Azure错误或网络不可用,有时会发生eventhub短暂脱机的情况。这可能意味着eventhub暂时不发送消息。虽然没有收到数据,但是喷口关闭但不能再醒来了?
对于上述每个原因,eventhub spout是否应自动从中恢复?可以做些什么来调试/解决这个问题?
答案 0 :(得分:0)
我试图搜索一些代码,这些代码确保从异常中自动恢复eventhub spout,但似乎没有任何代码可以执行此操作。
但是,我认为这个问题可能是由https://issues.apache.org/jira/browse/STORM-329等风暴错误引起的。
要调试这样的问题,您可以尝试在HDInsight Storm的工作者JVM中启用调试,在Eclipse上引用How to debug Apache Storm in Eclipse?进行远程调试。
希望它有所帮助。最诚挚的问候。
答案 1 :(得分:0)
你是否有可能没有采用元组? 如果你不熟悉,那么spout会假设消息仍处于“待定”状态,并且不会尝试从事件中心获取新消息。
你看到鲸鱼喷水有什么错误吗?
答案 2 :(得分:0)
我也遇到了类似的问题,在检查了所有Storm事件中心代码等之后,我意识到至少在Storm方面没有等待。因此,在蔚蓝的eventhub方面本身必须出错。 以下内容有助于增加我每分钟从eventhub收到的事件。 天蓝色的通过量单位设置为默认值1。喷口以12 / min的速度接收。将吞吐量单位设为5后,它开始以500 / min的速度接收。
这是一篇不错的文章,位于同一行:https://blog.bennymichielsen.be/2015/08/11/scaling-an-azure-event-hub-throughput-units/
让我知道这是否对您也有帮助。