Pipeline de fluxo de dados do Google com cache local da instância + chamadas externas à API REST

Queremos criar um pipeline de fluxo de dados do Cloud Dataflow que ingere eventos do Pubsub e execute várias operações semelhantes a ETL em cada evento individual. Uma dessas operações é que cada evento tem umID de dispositivo que precisam ser transformados em um valor diferente (vamos chamá-loID mapeado), o mapeamento doID do dispositivo> ID mapeado sendo fornecido por um serviço externo através de uma API REST. O mesmoID de dispositivo pode ser repetido em vários eventos - portanto, essesID do dispositivo> ID mapeado os mapeamentos podem ser armazenados em cache e reutilizados. Como podemos lidar com eventos de até 3M por segundo no pico do pipeline, a chamada para a API REST precisa ser reduzida o máximo possível e também otimizada quando as chamadas são realmente necessárias.

Com essa configuração em mente, tenho as seguintes perguntas.

Para otimizar a chamada da API REST, o Dataflow fornece otimizações internas, como o pool de conexões ou, se decidirmos usar nossos próprios mecanismos, há restrições / limitações que precisamos ter em mente?

Estamos analisando algumas das opções de cache na memória para armazenar em cache localmente os mapeamentos, alguns dos quais também são suportados por arquivos locais. Portanto, existem restrições quanto à quantidade de memória (como uma fração da memória total da instância) esses cache podem usar sem afetar as operações regulares do Dataflow nos trabalhadores? se usarmos um cache com backup de arquivo, existe um caminho em cada trabalhador que seja seguro para uso pelo próprio aplicativo para construir esses arquivos?

O número de únicosID de dispositivo pode estar na ordem de muitos milhões - portanto, nem todos esses mapeamentos podem ser armazenados em cada instância. Para poder utilizar melhor o cache local, precisamos obter alguma afinidade entre osID de dispositivo e os trabalhadores onde eles são processados. Eu posso fazer um agrupamento baseado noID de dispositivo antes do estágio em que essa transformação acontece. Se eu fizer isso, existe alguma garantia de que o mesmoID de dispositivo será processado mais ou menos pelo mesmo trabalhador? se houver alguma garantia razoável, não precisaria acessar a API REST externa na maioria das vezes, exceto a primeira chamada, o que deve ser bom. Ou existe uma maneira melhor de garantir essa afinidade entre os IDs e os trabalhadores.

obrigado

questionAnswers(1)

yourAnswerToTheQuestion