我试图设置Storm来聚合一个流,但是在同一个流上有各种(DRPC可用)指标。#Storm:如何为同一个数据源设置各种指标
E.g.该流包括具有发送者,接收者,消息到达的信道和通过其传送的网关的消息。我无法决定如何组织一个或多个可以给我的拓扑结构,例如网关和/或通道的消息总数。除了总数外,每分钟计数也会很好。
基本思想是让喷嘴接受消息事件,并根据需要汇总数据。目前,我正在与Trident和DRPC一起玩耍,并且我已经提出了两种可能的拓扑结构,可以在此阶段解决问题。无法确定哪种方法更好,如果有的话?
整个来源可在此gist。 它有三个类:
- RandomMessageSpout
- 用于发射所述消息数据
- 模拟真实数据源
- SeparateTopology
- 创建一个单独的DRPC流对于每个度量需要
- 还一个单独的查询状态针对每个指标
- 他们都使用相同的喷口实例
- CombinedTopology
- 创建具有所有度量的单个DRPC流创建需要
- 为每个度量创建一个单独的查询状态
- 每个查询状态提取所需的度量和组re sults它
现在,针对存在的问题和疑问:
- SeparateTopology
- 是否有必要使用相同的壶嘴实例或者我只能说新RandomMessageSpout( ) 每一次?
- 我喜欢这样的想法,我不需要坚持所有指标的分组数据,只是我们需要提取的分组
- 是由所有状态/查询组合实际处理的喷口发射的数据,例如,不是第一个来的?
- 这是否也会稍后在运行时动态添加新的状态/查询组合?
- CombinedTopology
- 我真的不喜欢,我需要,因为我并不需要所有
- 它出乎组合坚持所有的指标划分数据的想法,所有指标总是返回相同的数据
- 例如通道和网关查询返回状态的指标数据
- 我发现这是总是第一个字段分组的数据state definition
- this topic解释这种行为背后
- 但我想知道的理由,如果这是一个好办法在第一个地方做变薄(并且会想办法解决这个问题,如果需要的话)
- SnapshotGet VS TupleCollectionGet在stateQuery
- 与SnapshotGet的东西往往工作,但并不总是,只有TupleCollectionGet解决了这个问题
- 任何指针什么是正确的方式做到这一点?
我想这是一个稍长的问题/话题,但任何帮助非常感谢!另外,如果我完全错过了架构,对于如何实现这一点的建议将非常受欢迎。 在此先感谢:-)