Flink лучший способ сгруппировать записи по идентификатору поля - PullRequest
0 голосов
/ 09 июля 2019

Я настраиваю Apache Flink, связанный с брокером Kafka.

Я получил следующие сообщения в случайном порядке:

  • сообщение (отметка времени = [..], индекс = 1, someData = [..])
  • сообщение (отметка времени = [..], индекс = 2, someData = [..])
  • сообщение (отметка времени = [..], индекс = 3, someData = [..])
  • сообщение (отметка времени = [..], индекс = 2, someData = [..]) * сообщение 1012 *
  • (отметка времени = [..], индекс = 3, someData = [..])
  • сообщение (отметка времени = [..], индекс = 1, someData = [..])

Мои записи, полученные от Кафки, получили поле index.

В моем приложении мне нужно вычислить последние две из этих записей, которые имеют одинаковый идентификатор, а затем немедленно отправить ответ.

Например, эти две:

  • сообщение (отметка времени = [..], индекс = 1, someData = [..])
  • сообщение (отметка времени = [..], индекс = 1, someData = [..])

Каков наилучший способ хранения и вычисления двух последних записей с одним и тем же индексным полем?Не могли бы вы рассказать мне несколько советов?

1 Ответ

0 голосов
/ 09 июля 2019

Ваши требования не совсем понятны, но механизмы, которые вы, вероятно, захотите понять, используют keyBy(e -> e.index) для группировки / разделения потока по полю индекса и состояние ключа для запоминания последнего события ( или два) для каждого значения индекса.

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

...