Порядок операций между временным окном и конвейером стока - PullRequest
0 голосов
/ 19 марта 2020

Предположим, у меня есть конвейер flink как таковой: kafka_source -> maps/filters/keyBy/timewindow(1 minute) -> sinkCassandra

К тому времени, когда сгруппированные сообщения выполнят операцию sinkCassandra, я гарантирую, что никакие другие слоты не будут одновременно запускать maps/filters/keyBy/timewindow(1 minute) часть конвейера?

Или возможно, чтобы какой-то другой слот запускал средний конвейер, в то время как другой набор выполняет операцию sinkCassandra?

EDIT (Добавлено больше требований, основанных на диалоге комментариев) :

То, что я пытаюсь сделать, - это эффективно выполнить поиск на основе ключа данных flink из хранилища данных, выполнить обновление и вернуть sh обновленные данные обратно.

Причина почему я уклоняюсь от использования kafka_source -> maps/filters -> keyBy/TimeWindow/statefulReduce -> sinkCassandra, потому что состояние потенциально может стать огромным (от 1 дня до 7 дней, где я могу разместить 7 дней в качестве максимального ограничения времени), и я не обязательно знаю временное окно для каждого ключа. Это означало бы ОГРОМНОЕ состояние даже при rocksdb.

Другой потенциальный вариант, на который я смотрю, это kafka_source -> maps/filters -> keyBy/sinkCass, где в рамках пользовательской операции приемника я сначала проверю какой-нибудь буфер в памяти, если я есть ключ, который я хочу обновить. Если нет, то я go вперед и получаю от Кассандры. Каждые 5 секунд (или каждые N секунд) я собирал все, что находится в буфере, и грипп sh в Кассандру. Чтобы ограничить память, я могу создать в памяти наименее недавно использованную хэш-карту (я не обязательно хочу, чтобы flu sh b / c несколько ключей снова появлялись!)

1 Ответ

0 голосов
/ 19 марта 2020

Если вы явно не настроили что-то необычное, каждый слот будет содержать один параллельный срез полного конвейера - каждый слот будет иметь экземпляр источника kafka, связанный с непересекающимся подмножеством разделов kafka, а также карты / filters / keyBy / окно и раковина кассандры.

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

EDiT (в ответ на добавление информации о требованиях):

Можно смело предположить, что для любого При заданном ключе данных flink после keyBy только один экземпляр каждого оператора будет обрабатывать события для этого ключа. Этот принцип является фундаментальным для дизайна Флинка. Если я правильно понимаю, что вы думаете, это единственная гарантия, которая вам нужна.

...