【发布时间】:2018-04-04 23:04:20
【问题描述】:
我们正在开发一个基于 STORM 的物联网信号处理平台,并考虑到水平可扩展性。该平台旨在同时处理多个信号(从 MQTT 主题收集),通过对它们应用一系列信号处理算法。到目前为止,我们的解决方案包括in this diagram:
MQTT 服务器,主题名称包含 信号(例如,“患者/1”、“患者/2”、……、“患者/N”。
一个 MQTT spout,它订阅了其名称的所有主题
匹配模式“患者/+”(因此,接收所有的值 每个信号和标识符)。我们正在使用这个
方法,因为我们不知道在某些时候可以接收到多少信号 点,我们不希望每个可能的 Spout 都不同
信号!几个链式螺栓,每个信号处理步骤一个
(算法)。
我们解决方案的初步测试运行良好。通过为 spout 建立并行提示,我们能够注意到 Storm 如何将负载分布到多台机器上,从而提高了整个系统的吞吐量。然而,使用这种配置——据我们所知——我们有一个单点故障:MQTT spout,它现在将是在 Storm 的一个节点中运行的单个实例。我们知道为此类 Spout 启用并行提示不是一个好主意(因为我们尝试过),因为它会影响为同一主题创建多个 MQTT 订阅者,因此会传播多个在处理螺栓上复制相同的信号。
所以,我们现在的问题是:
您认为我们目前的方法有什么缺点吗,主要是 考虑到我们的可扩展性要求?
鉴于 Storm 的集群模型,具有单个 MQTT spout (没有并行提示)可以被认为是一个单点 失败? (例如,如果它正在运行的机器发生故障),或者 Storm会保证在集群的其他机器上恢复吗?
鉴于我们的目标是可扩展的架构,我们正在 考虑“可集群化”的 MQTT 服务器,例如 EMQ 或 ActiveMQ 信号的入口点。然而,我们认为我们的单身 MQTT spout 在某些时候可能会成为瓶颈。你能给我们吗 关于如何扩展读取数据所需资源的一些建议 来自MQTT主题,避免了冗余值的问题 读数?
亲切的问候!
【问题讨论】:
标签: mqtt apache-storm