KStream-KTable上的反序列化行为left Join

时间:2019-05-17 09:16:04

标签: java apache-kafka-streams

使用Kafka Streams DSL,我将事件反序列化为bean,然后将其包装为“ EventCarrier”。 KStream处理事件。

EventCarrier允许我记录处理期间发生的任何异常。我根据是否存在异常将流分为成功流和失败流。

模型运行良好,直到我将流加入KTable。在这一点上,似乎Kafka放弃了EventCarrier,并通过再次反序列化原始事件来创建一个新的Carrier。原来存储在原始EventCarrier中的所有专家都将丢失。

在这种情况下是否应该进行反序列化,或者我做错了什么?

 KStream<String, EventCarrier> notificationStream[] = myStream
    .filter((key, carrier) -> shouldNotify(carrier.getEvent()))
    .selectKey((key, carrier) -> carrier.getEvent().getGuid())
    .peek((key, carrier) -> carrier.recordException(new Exception("Ouch!!")))
    .peek((key, carrier) -> System.out.println("1:" + carrier.getException()))
    .leftJoin(notificationsTable, (carrier, notification) -> 
         recordWhetherNotificationFound(carrier, notification))
    .peek((key, carrier) -> System.out.println("2:" + carrier.getException()))

和方法

    private ProductEventCarrier recordWhetherNotificationFound(ProductEventCarrier carrier, NotificationEvent notification) {
            carrier.setNotificationFound(nonNull(notification));
        return carrier;
    }

在上面的代码中,异常在第一个println中按预期方式打印,但在第二个println中为空。

0 个答案:

没有答案