风暴:eventhub spout停止接收消息

时间:2016-02-13 15:14:21

标签: java azure apache-storm azure-eventhub

目前我正在开发用于处理原始机器测量数据的风暴拓扑。但是,我正在遇到鲸鱼喷水无法解释的问题。

我在Azure HDInsight上运行一个简单的风暴拓扑,用Java编写。从eventhub读取事件,我正在使用microsoft eventhub spout(版本0.9)。这个eventhub有8个分区,这意味着我还需要8个Eventhubspout实例。

但是,当我运行拓扑几个小时后,喷嘴会一个接一个地停止接收消息,直到每个喷口都安静。没有任何反馈意见。当我通过其他方式检查时,eventhub仍然正常运行。风暴/鲸鱼根本就没有注册任何东西了。

我对这里可能存在的问题有几点看法:

  • 首先,我们最近调整了发送到拓扑的消息。通过批处理(以及拓扑本身中的解析),我们显着减少了消息量。每条消息的大小也大大增加。这可能会导致两个问题:

    1. 每个分区每隔+/- 4秒只收到一条消息,这对于风暴来说是非常低的。可能因为这个而自动超时和崩溃吗?

    2. 这封邮件有时可以'太大了,导致喷口崩溃/表现出奇怪的行为?

  • 其次,由于某些Azure错误或网络不可用,有时会发生eventhub短暂脱机的情况。这可能意味着eventhub暂时不发送消息。虽然没有收到数据,但是喷口关闭但不能再醒来了?

对于上述每个原因,eventhub spout是否应自动从中恢复?可以做些什么来调试/解决这个问题?

3 个答案:

答案 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/

让我知道这是否对您也有帮助。