Hazelcast-Jet DrainTo语法问题

时间:2019-01-30 13:50:57

标签: hazelcast-jet

我正在尝试使用Jet进行汇总,源和接收器都是Kafka主题,要求是从源中获取GPB(google proto buf)消息并发布GPB消息。问题是我可以发布Double,但不能发布GPB消息,这给了我编译错误。

这很好:

    Pipeline p = Pipeline.create();
    p.drawFrom(KafkaSources.<String, Balance> kafka(<properties>, <topic>)) 
    .map(s->s.getValue() ).groupingKey(x->x.account)
    .rollingAggregator(AggregateOperations.summingDouble(Balance::amount))
    .drainTo(KafkaSinks.kafka(<prop>,<sinktopic>));

即使以上代码可以正常工作,它也会发布double来沉没主题,而我的要求是发布具有double属性的GPB来沉没主题。 当我尝试通过在map之前放置drainTo来做到这一点时,它给了我语法错误。下面是我尝试过的:

    .rollingAggregator(AggregateOperation.summingDouble(Balance::amount))
    .map(k->Amount.newBuilder().setAmount(k.getValue()).build())
    .drainTo(KafkaSinks.kafka(<prop>,<sinktopic>));

金额是具有double属性的GPB消息。这给了我我不理解的语法错误。您能帮我解决这个问题吗?

在不同情况下有不同汇总的地方,您还可以共享一些文档或链接吗?我浏览了Hazelcast示例,演示,不是全部,而是很少,但是在那里找不到我的用例。非常感谢。

1 个答案:

答案 0 :(得分:0)

我猜语法错误是这样的:

  

不兼容的类型。需要水槽<? super Amount>,但将'kafka'推断为Sink >:不存在类型变量K,V的实例,因此String符合Entry

(下一次,请共享该异常,您的代码具有对非共享类的依赖关系,而我无法对其进行编译。)

这意味着Kafka接收器期望输入时输入java.util.Map.Entry,但您给了Amount。您需要通过以下方式map

.map(entry-> Util.entry(entry.getKey(), Amount.newBuilder().setAmount(entry.getValue()).build()))