Kafka DSL,ValueMapper和其他-我应该如何返回条件值?可选,为null还是?

时间:2018-10-15 06:43:50

标签: null apache-kafka optional

为什么我想知道在ValueMapper或类似程序中实现可有条件返回的值的逻辑时的最佳实践是什么。

在下面实现的ValueMapper的示例中,我只想在某些条件为真时才返回警报事件,否则不应该返回任何内容,或者至少不对其进行处理或推送至某个主题。

@Override
public AlarmMessage apply(final Message value) {

    if(value.getLevel() < threshold) {
      return AlarmMessage
          .builder()
          .withSource(value)
          .withAlarmId(alarmCode)
          .build();
    }

    return null;
  }

然后在拓扑中,我将KStream定义如下:

messageStream
        .mapValues(AlarmChecker::apply)
        .to(alarmTopic, Produced.valueSerde(AlarmMessage.serde()));

这听起来像是可选模式的完美用例。

但是,在Kafka DSL API文档(https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html)中,具有 null 键或值的消息被特定地处理,并导致特定的行为(忽略消息,在KTable中触发删除,等等)。 因此,我假设只要在Kafka API中定义的结果遵循我们想要的行为, null 就可以在此处安全使用( null 是忽略的隐式简写,删除或其他)。

可选的将是多余的,因为null检查已经在Kafka API中完成,并且用于赋予 null 特殊的含义。我在Optional中看到的唯一优势是在Kafak重构更改 null 用法的情况下。

但是我可能会错过一些东西,所以应该使用哪个?为什么?

0 个答案:

没有答案