Таймер моргания асинхронный - PullRequest
1 голос
/ 17 февраля 2020

У меня есть вопрос, касающийся Flink и его службы таймера.

У меня есть поток keyBy, который использует таймер. Когда вызывается таймер, мне нужно отправить запрос http, который может занять время, чтобы ответить. У меня вопрос, должен ли я сделать http-вызов asyn c? или flink делает вызов по таймеру уже как новый поток с asyn c на ключ?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы можете использовать ProcessFunction, в котором хранятся данные, необходимые для HTTP-запроса, и которые могут иметь таймер. Когда он запускается, вы отправляете запись, содержащую данные запроса, которые последующий AsyncFunction будет использовать для создания запроса periodi c, который вам нужен.

1 голос
/ 17 февраля 2020

Если вы спрашиваете, вызывается ли метод onTimer в отдельном потоке для каждого ключа, то я почти уверен, что это не так. Таким образом, в этом случае вам потребуется асинхронно вызывать HTTP-вызов.

Но, если честно, я не думаю, что в общем случае стоит использовать функцию onTimer для выполнения HTTP-вызовов. Я ничего не знаю о вашем сценарии использования, но я думаю, что вам следует рассмотреть возможность использования различных механизмов, таких как создание побочного вывода и затем использование оператора Flink Async. Использование асинхронных вызовов внутри onTimer может быть непростым делом, особенно если учесть такие вещи, как повторные попытки, тайм-ауты и возможные сбои.

Таким образом, в соответствии с комментарием, сценарий использования состоит в том, чтобы сделать вызов для обслуживания каждые X минут и тогда опубликуйте что-нибудь в Кафке. Итак, что вы можете сделать, это просто иметь функцию процесса, которая планирует таймеры. При каждом срабатывании таймера вы генерируете некоторую выходную запись с данными, необходимыми для запроса, если есть какие-либо данные. Затем вы используете оператор Async, чтобы фактически выполнить запросы, проанализировать ответ и на основе ответа сгенерировать некоторую выходную запись, которая затем может быть сохранена в Kafka.

...