У меня есть потоковое приложение Flink, которому требуется возможность «приостановить» и «отменить» обработку определенного потока с ключами.«Обработка» означает просто выполнение некоторого простого обнаружения аномалий в потоке.
Поток, о котором мы думаем, работает следующим образом:
Поток команд, либо ProcessCommand
, PauseCommand
, либоResumeCommand
, каждый с id
, который используется для KeyBy
.
ProcessCommands
, проверит, приостановлена ли клавиша перед обработкой, и буфер, если нет.
PauseCommands
приостановит обработку ключа.
ResumeCommands
приостановит обработку ключа и очистит буфер.
Кажется ли этот поток разумным, и если да, я смогу использовать что-то вроде split
оператор для достижения?
Пример потока, пропущены отдельные отметки времени записи:
[{command: process, id: 1}, {command: pause, id: 1}, {command: process, id: 1}, {command: resume, id: 1}, {command: process, id: 1}]
Flow:
=>
{command: process, id: 1} # Sent downstream for analysis
=>
{command: pause, id: 1} # Starts the buffer for id 1
=>
{command: process, id: 1} # Buffered into another output stream
=>
{command: resume, id: 1} # Turns off buffering, flushes [{command: process, id: 1}] downstream
=>
{command: process, id: 1} # Sent downstream for processing as the buffering has been toggled off