Поддерживает ли Apache Flink использование HTTP-запросов в качестве ввода и вывода? - PullRequest
0 голосов
/ 16 июня 2020

В качестве игрушечного примера скажем, что я хотел бы создать веб-приложение, которое получало HTTP-запросы с идентификатором и суммой в долларах и возвращало ответ с общей суммой в долларах, которую ID заплатил за 24 часа. Используя Apache Flink, безусловно, можно создать это приложение, если вход и выход, скажем, являются потоком Kafka.

Но поддерживается ли / возможно ли создать приложение Flink, где входом являются HTTP-запросы, а выходными данными является ответ на HTTP-запрос?

Если это не так поддерживается Flink, существует ли другая структура потоковой передачи данных, которая поддерживала бы это? windows и другие вычисления с отслеживанием состояния по HTTP-«потоку» запросов. )

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Flink не предоставляет официальных источников или приемников HTTP, но вы можете реализовать свои собственные на основе базовых классов Sink и Source. Однако я не думаю, что это `` правильный '' подход, Flink не предназначен для получения HTTP-запросов и прямого ответа на них, Flink обычно использует какой-то постоянный источник / приемники данных, поэтому он может воссоздать / пересчитать состояние, если приложение не работает. .

Я рекомендую вам использовать что-то вроде Kafka Bridge: https://strimzi.io/blog/2019/07/19/http-bridge-intro/, он позволяет HTTP-клиентам писать и получать сообщения от Kafka topi c, используя простые запросы. В этом сценарии у вас будут клиенты, отправляющие сумму и данные идентификатора в topi c, тогда Flink будет использовать этот topi c в качестве результатов ввода и вывода для второго topi c. Наконец, ваш клиент может сделать второй запрос для опроса результатов:

client -> KafkaBridge -> InputTopi c -> Flink -> ResultsTopi c

client -> KafkaBridge -> РезультатыTopi c

1 голос
/ 16 июня 2020

Сам Flink не имеет источника или приемника HTTP, но есть источник на основе Netty в Apache Bahir, что вам и нужно. Дополнительную информацию о bahir-netty можно найти здесь . Но насколько мне известно, нет Sink, который отправлял бы данные в виде HTTP-запросов, поэтому вам, вероятно, придется реализовать это самостоятельно.

...