#apache-flink #data-stream
#apache-flink #поток данных
Вопрос:
У меня есть сценарий с приложением flink, которое получает потоки данных в следующем формате:
{ «event_id»: «c1s2s34», «event_create_timestamp»: «2019-03-07 11:11:23″, » количество»: «104.67» }
Я использую следующее окно прерывания, чтобы найти сумму, количество и средние значения для входных потоков за последние 60 секунд.
Значение ключа.timeWindow (время.секунды (60))
Однако, как я могу обозначить агрегированный результат таким образом, чтобы я мог сказать, что в выходном потоке данных между 16: 20 и 16: 21 агрегированными результатами являются сумма x, количество y и среднее значение z.
Любая помощь уместна.
Комментарии:
1. Как вы хотите использовать результаты — собираетесь ли вы их распечатать, или записать в файл, или отправить в Kafka, …?
2. Привет, Дэвид, я хочу отправить результат в Kinesis Firehose.
Ответ №1:
Если вы посмотрите на пример работы с окнами на учебном сайте Flink — https://training.ververica.com/exercises/hourlyTips.html — вы увидите пример того, как использовать processwindowфункцию для создания выходных событий из Windows, которые включают информацию о времени и т.д. Основная идея заключается в том, что методу process() в ProcessWindowFunction передается контекст, который, в свою очередь, содержит объект Window, из которого вы можете определить время начала и окончания для окна, например, context.window().getEnd()
.
Затем вы можете настроить, чтобы ваша функция Processwindow возвращала кортежи или POJO, содержащие всю информацию, которую вы хотите включить в свои отчеты.