Flink DataStream - как запустить источник из элемента ввода? - PullRequest
0 голосов
/ 21 сентября 2018

Скажем, у меня есть Флинк SourceFunction<String>, который называется RequestsSource.

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

Выходные данные могут быть объединены в один DataStream.Например,

Input Requests: A, B
Data produced:
 A1
 B1
 A2
 A3
 B2
 ...

... и т. Д., С новыми элементами, добавляемыми в DataStream навсегда.

Как мне написать оператор Flink, который может это делать?Могу ли я использовать, например, FlatMapFunction?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

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

Я не верю, что асинхронный ввод-вывод может генерировать неограниченный поток результатов изодно входное событие.ProcessFunction может сделать это, но только через метод onTimer.

0 голосов
/ 22 сентября 2018

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

См. Также Обучение Apache Flink - асинхронный ввод-вывод .

- Кен

...