У Samza есть концепция работы с окнами, когда задание по потоковой обработке должно что-то делать через равные промежутки времени, независимо от того, сколько входящих сообщений обрабатывает задание.
Например, простой поминутный счетчик событий в самзе будет выглядеть следующим образом:
public class EventCounterTask implements StreamTask, WindowableTask {
public static final SystemStream OUTPUT_STREAM =
new SystemStream("kafka", "events-per-minute");
private int eventsSeen = 0;
public void process(IncomingMessageEnvelope envelope,
MessageCollector collector,
TaskCoordinator coordinator) {
eventsSeen++;
}
public void window(MessageCollector collector,
TaskCoordinator coordinator) {
collector.send(new OutgoingMessageEnvelope(OUTPUT_STREAM, eventsSeen));
eventsSeen = 0;
}
}
Может ли кто-нибудь дать мне знать, как реализовать эквивалентную вещь в apache flink (samza является однопоточной, поэтому window
и process
не будут происходить одновременно) или указать мне соответствующую документацию?
Есть по крайней мере четыре разных способа интерпретации «в минуту». В одном бинарном измерении существует различие между использованием времени события и времени обработки (одна минута, измеряемая отметками времени в событиях, или одна минута, измеряемая настенными часами ЦП). И другое бинарное измерение связано с тем, привязаны ли минуты к UTC или к первому событию.
Соответствующие низкоуровневые механизмы, доступные вам во Flink, — это окна времени события и времени обработки , а также таймеры, которые являются частью функций процесса . Учебники для самостоятельного изучения, примеры и упражнения с решениями см. в разделе Изучение Flink: практическое обучение.
Но с Flink работу с окнами легче выполнять с помощью SQL или Table API. Например, простой счетчик событий для каждой минуты обработки будет таким:
SELECT COUNT(*)
FROM Events
GROUP BY TUMBLE(proctime, INTERVAL '1' MINUTE)
Дополнительные сведения см. в документах по работе с окнами с помощью SQL и документах по работе с окнами с помощью Table API . Учебники по Flink SQL см. на странице https://github.com/ververica/sql-training.