Вопрос в руководстве разработчика для Kafka dsl api

У меня возник вопрос, когда я шел по этому замечательному руководству https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html

Мой вопрос находится в разделе «Пример семантики для агрегации таблиц». В частности, посмотрите на таблицу в этом разделе, на отметке времени 4, но каков механизм выполнения агрегатором "(E, 5 - 5)".

Меня смущает то, что ключ уже преобразован из имени («Алиса») в регион («А») на этапе группировки. Как «groupedTable» все еще может воспринимать исходный ключ в совокупности и выполнять вычитание?

Заранее спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
52
1

Ответы 1

Здесь действуют два механизма:

  1. базовое хранилище может получить старое значение ключа из хранилища, прежде чем оно поместит новое значение в хранилище
  2. при необходимости вышестоящий оператор, на котором размещено базовое хранилище, отправит нижестоящему оператору как новое, так и старое значение.

Спасибо! Но я не могу соотнести эти механизмы с кодом, представленным в руководстве (прямо над таблицей). Я предполагаю, что содержимое таблицы должно отражать логику кода.

fhmeansrock 12.02.2019 18:18

Не уверен, что смогу следовать. Однако отправка старого и нового значения является внутренней деталью реализации и не отображается в API (если это был ваш вопрос). Дело в том, что внутри поток данных между userProfiles KTable и aggregated KTable не является простым KeyValue.pair(region, user.length()), как указано в groupBy(), фактически физически передаваемые данные представляют собой две вложенные пары <key,<newValue,oldValue>>.

Matthias J. Sax 13.02.2019 00:40

Спасибо, Матиас, что ответил на мой вопрос! Хотя мне потребуется некоторое время, чтобы переварить его значение. Любая ссылка на эту тему приветствуется.

fhmeansrock 13.02.2019 02:08

Это не задокументировано, потому что это внутренние детали реализации - вы можете только заглянуть в код...

Matthias J. Sax 13.02.2019 03:37

Другие вопросы по теме