Луч: Параллельно Обрабатывайте Несколько Боковых Входов

#apache-beam

Вопрос:

В настоящее время я использую DoFn в качестве обходного пути из-за отсутствия разъемов в Apache Beam. В основном у нас разработан канал, в котором в настоящее время есть один компонент, который загружает и обрабатывает информацию из S3 (я знаю, что загрузка будет поддерживаться пакетом SDK Beam, но обработка и некоторые другие вещи достаточно специфичны, чтобы наш технический руководитель использовал свой собственный разъем), и другой компонент, который запрашивает некоторую информацию об инвентаризации. Я могу запустить оба из них в функции ParDo и выдать результаты; Я успешно могу ввести один из них (и я не вижу, почему бы не использовать другой) в свой основной конвейер в качестве побочного ввода.

Но я хочу, чтобы обе загрузки происходили параллельно, создавая два боковых входа, которые затем могут быть интегрированы в основной конвейер. Итак, у меня есть что-то вроде этого:

 side_input1 = (pipeline1  | 'Create connection information' gt;gt; beam.Create(['connection string'])  | 'Query' gt;gt; beam.ParDo(QueryRESTSource()) )  side_input2 = (pipeline2  | 'Create connection information' gt;gt; beam.Create(['different connection string'])  | 'Query availability2' gt;gt; beam.ParDo(VeryDifferentQuerySource()) )  

Я указываю, что это разные источники, потому что я боюсь, что кто-нибудь ответит: «Ну, просто передайте обе строки подключения в create, а затем два экземпляра ParDo будут выполняться в каждой строке». Но это совсем не так-оба источника будут поступать из разных протоколов и в идеальном состоянии через два соединителя. Я просто использую наши существующие компоненты в ParDo на данный момент, чтобы посмотреть, смогу ли я заставить их параллельно интегрироваться в основной конвейер…и я понятия не имею, как это сделать.

Поиск в Интернете «как загрузить два боковых входа параллельно Apache Beam» на самом деле не дал никаких хороших результатов.