Kafka流:左连接期间类强制转换异常

时间:2019-11-04 20:30:03

标签: left-join apache-kafka-streams

我是kafka的新手。我试图将kafka流(命名为 inputStream )加入到kafka-table(命名为 detailTable )中,其中kafka-stream的构建方式为:

//The consumer to consume the input topic
Consumed<String, NotifyRecipient> inputNotificationEventConsumed = Consumed
        .with(Constants.CONSUMER_KEY_SERDE, Constants.CONSUMER_VALUE_SERDE);


//Now create the stream that is directly reading from the topic
KStream<NotifyKey, NotifyVal> initialInputStream =
        streamsBuilder.stream(properties.getInputTopic(), inputNotificationEventConsumed);


//Now re-key the above stream for the purpose of left join
KStream<String, NotifyVal> inputStream = initialInputStream
          .map((notifyKey,notifyVal) ->
              KeyValue.pair(notifyVal.getId(),notifyVal)
          );

通过以下方式创建kafka表:

//The consumer for the table
Consumed<String, Detail> notifyDetailConsumed =
          Consumed.with(Serdes.String(), Constants.DET_CONSUMER_VALUE_SERDE);

//Now consume from the topic into ktable
KTable<String, Detail> detailTable = streamsBuilder
          .table(properties.getDetailTopic(), notifyDetailConsumed);

现在,我尝试以以下方式将 inputStream 加入 detailTable

  //Now join
  KStream<String,Pair<Long, SendCmd>> joinedStream = inputStream
          .leftJoin(detailTable, valJoiner)
          .filter((key,value)->value!=null);

我收到一个错误,似乎在连接过程中尝试 inputStream 的键和值投射到默认键序列和默认值序列,并获得类强制转换异常。

不确定如何解决此问题,并在那里需要帮助。 让我知道是否需要提供更多信息。

1 个答案:

答案 0 :(得分:1)

由于使用的是map(),因此键和值类型可能会发生变化,因此需要通过Joined.with(...)指定正确的Serdes作为.leftJoin()的第三个参数。