有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可以使用Apache Storm处理具有动态属性集的元组吗?

我目前正在评估Apache Storm以处理来自多个数据源的异构数据。虽然所有数据可能共享一些公共属性(即“类型”属性),但我希望能够处理许多不同的元组“类”,并且能够处理新的数据类型,而对拓扑的更改最小。举例说明这些数据类型可能是什么样的:

{type=LogTransaction,timestamp=...,user=...,duration=...}
{type=LogEvent,timestamp=...,user=...,message=...}

Storm页面上的示例主要处理简单的元组,这些元组是预先定义好的,这样喷咀/螺栓就可以静态地声明输出字段

我最初的想法是声明类型并将所有其他属性存储在Map<String,Object>中,然后可以声明:

public void declareOutputFields(OutputFieldsDeclarer ofd) {
    ofd.declare(new Fields("type", "attributes"));
}

然而,我相信到那时,Storm的许多更高级的功能将不再正常工作。例如,据我所知,我不能再使用Trident对任何属性执行groupBy

有没有更好的方法来处理我在ApacheStorm中丢失的此类数据?我确实发现this post描述了一个类似的问题,但是我希望避免为每种数据类型创建Java类


共 (1) 个答案

  1. # 1 楼答案

    您可以使用自己的自定义字段,只要该字段是可序列化的,就可以在有多个主管的情况下正常工作

    由于storm是一种分布式数据处理工具,并且当存在多个监控器时,基于分组,某些螺栓将向运行在不同监控器上的螺栓发出字段。在这种情况下,输出字段将被序列化并通过网络发送。此序列化可以是常规java序列化或Kryo序列化(以避免网络延迟)

    因此,如果jvm无法序列化输出字段,您可能会遇到异常