Кафка DSL, ValueMapper и другие - Как вернуть условное значение?Необязательно, ноль или? - PullRequest
0 голосов
/ 15 октября 2018

и почему мне интересно, как лучше всего применять логику в 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 doc (https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html), сообщение с нулевым ключом или значением являетсяобрабатывается конкретно и приводит к определенному поведению (сообщение игнорируется, удаление триггера в KTable и т. д.). Поэтому я предполагаю, что null можно безопасно использовать здесь, как только результирующее поведение, как определено в API Kafka, следуетто, что мы хотим ( null , являющийся неявным сокращением для игнорирования, удаления или другого).

Необязательный будет излишним какнулевая проверка уже сделана внутри API Kafka и используется для придания особого значения null .Единственное преимущество, которое я вижу в Опциональном, здесь в случае, если рефакторинг Kafak изменяет использование null .

Но я могу что-то упустить, какой из них следует использовать и почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...