Java Hazelcast Jet Pipelines API:处理来自多个父节点的数据

Java Hazelcast Jet Pipelines API:处理来自多个父节点的数据,java,union,pipeline,hazelcast,hazelcast-jet,Java,Union,Pipeline,Hazelcast,Hazelcast Jet,此问题与Hazelcast Jet 0.5.1中的管道API有关 我试图创建的管道有两个无限源:一个是ticker(每分钟发送一个事件的自定义源),另一个是Kafka主题 看起来是这样的: Pipeline pipeline = Pipeline.create(); ComputeStage<Object> tickerSource = pipeline.drawFrom(Sources.fromProcessor("ticker", TickerSource.getSupplier

此问题与Hazelcast Jet 0.5.1中的管道API有关

我试图创建的管道有两个无限源:一个是ticker(每分钟发送一个事件的自定义源),另一个是Kafka主题

看起来是这样的:

Pipeline pipeline = Pipeline.create();
ComputeStage<Object> tickerSource = pipeline.drawFrom(Sources.fromProcessor("ticker", TickerSource.getSupplier()));
ComputeStage<Object> kafkaSource  = pipeline.drawFrom(KafkaSources.kafka(sourceProperties, KAFKA_TOPIC));
Pipeline管道=Pipeline.create();
computeTestage tickerSource=pipeline.drawFrom(Sources.fromProcessor(“ticker”,tickerSource.getSupplier());
computeTestage kafkaSource=pipeline.drawFrom(KafkaSources.kafka(sourceProperties,kafka_TOPIC));
当这些源中的任何一个发出一个事件时,我希望该事件经过相同的步骤并排放到相同的接收器。我想要一个“联盟”,如果我们把我的问题转化为SQL术语。看起来像这样的东西:

我发现的所有关于将两个节点合并到一个节点的示例和文档都相当于SQL“JOIN”操作,而不是“UNION”

我发现绕过我的问题的唯一方法是这样做,但我觉得这是框架应该已经具备的东西,尽管我似乎找不到它

Arrays.asList(tickerSource, kafkaSource).forEach(source ->
{
    ComputeStage<Object> result = source.map(MyCustomProcessor::process);
    result.drainTo(Sinks.fromProcessor("first-sink", MyFirstSink.getSupplier());
    result.drainTo(Sinks.fromProcessor("second-sink", MySecondSink.getSupplier());
});
Arrays.asList(tickerSource,kafkaSource).forEach(source->
{
ComputeTestage结果=source.map(MyCustomProcessor::process);
result.drainTo(Sinks.fromProcessor(“first sink”,MyFirstSink.getSupplier());
result.drainTo(Sinks.fromProcessor(“第二个sink”,MySecondSink.getSupplier());
});
结果如下所示:


是的,你现在可以直接使用DAG API来做一个“合并”。因为你的管道看起来很简单,我会考虑使用它,也许是现在。或者你的解决方案也会很好。但是我们将增加这个功能(除其他之外)。在不久的将来,我将添加到管道API。我还将添加union和merge略有不同-union通常返回不同的项。现在将其合并到master中,以便在0.7-SNAPSHOT中可用: