Kafka Stream聚合期间的异常是什么意思?

时间:2018-05-22 23:59:40

标签: apache-kafka-streams

我在Kafka v1.0 Streams中编写应用程序,并在尝试运行应用程序时遇到奇怪的运行时问题。简化的应用程序看起来像:

KStream< String, ValueClass > stream = ...;
KGroupedStream< String, ValueClass > groupedStream = stream.groupByKey();
KTable< String, ValueClass > aggregatedTable = 
    groupedStream
    .aggregate( ()-> new ValueClass(),  // initializer
                ( string, invalue, aggvalue ) -> { 
                     ValueClass aggResult = f( invalue, aggvalue );
                     return aggResult; }, // aggregator
                Materialized.with( Serdes.String(), ValueClassSerde )
              );

我已经通过print( Printed.toSysOut() )操作确认输入KStream看起来像我期望的那样,添加groupByKey()应用程序仍然有效,但是当我添加聚合操作时,我得到了一个运行时错误:

java.lang.ClassCastException: java.lang.String cannot be cast to ValueClass

我已多次浏览该程序,但对我来说看起来仍然合理,我无法弄清楚处理过程中正在尝试将String强制转换为ValueClass的实例{1}}。

您能否解释一下错误消息告诉我的内容,以及解决问题需要做些什么?

下一个问题:我修改了上面的代码,添加了一个步骤,将聚合输出表转换为流并打印出来:

KStream< String, ValueClass > stream = ...;
KGroupedStream< String, ValueClass > groupedStream = stream.groupByKey();
KTable< String, ValueClass > aggregatedTable = 
    groupedStream
    .aggregate( ()-> new ValueClass(),  // initializer
                ( string, invalue, aggvalue ) -> { 
                     ValueClass aggResult = f( invalue, aggvalue );
                     return aggResult; }, // aggregator
                Materialized.with( Serdes.String(), ValueClassSerde )
              );
aggregatedTable.toStream().print( Printed.toSysOut() );

该程序运行,但没有任何结果。此外,当我在Eclipse调试器下运行并在聚合函数f中放置一个断点时,执行永远不会到达断点。

我已经阅读了一些关于KTable.toStream的内容,但没有输出每个结果以节省流量;是什么在这里发生,有没有办法阻止它,以便输出立即刷新?

0 个答案:

没有答案