Исправление агрегированного представления в потоковых данных - PullRequest
0 голосов
/ 19 марта 2019

Этот вопрос относится к представлениям агрегации KSQL или технологии потоковой обработки.Когда мы получаем события, мы применяем их по группам для их агрегирования.Теперь наступает событие, которое является исправлением некоторого предыдущего события.Это оставит мое агрегированное представление в противоречивом состоянии.Это не случай прибытия события из строя.Например, у меня есть событие (e), которое состоит из атрибута id объекта (t), категории (c) и количества (q).Следующие события

1) e1 —> t1, c1, q1
2) e2 -> t2, c2, q2
3) e3 -> t3, c1, q3
4) e4 -> t1, c1, q4 correction to e1
5) e5 -> t5, c2, q5

Мое агрегированное представление будет суммированием группы количеств по категориям

c1 -> q1 + q3 + q4

c2 -> q2 + q5.

c1, которая сейчас находится в несогласованном состоянии.c1 должен быть только q3 + q4.

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

1 Ответ

0 голосов
/ 21 марта 2019

В Kafka Streams вы можете сделать KStream#groupBy()#aggregate()#mapValue().Aggregate () не будет вычислять агрегацию, но вернет Map of id-> value.В mapValue () вы вычисляете агрегацию по всем значениям карты.Таким образом, при поступлении обновлений if заменяет старое значение новым значением в Map, а mapValue () будет правильно пересчитывать результат агрегирования.

...