Evitando a perda de dados quando consumidores lentos pressionam a contrapressão no processamento do fluxo (spark, aws)

Eu sou novo no processamento de fluxo distribuído (Spark). Eu li alguns tutoriais / exemplos que abordam como a contrapressão resulta no (s) produtor (es) diminuindo a velocidade em resposta a consumidores sobrecarregados. O exemplo clássico dado é a ingestão e análise de tweets. Quando há um aumento inesperado no tráfego, de modo que os consumidores não conseguem lidar com a carga, eles aplicam contrapressão e o produtor responde ajustando sua taxa mais baixa.

O que realmente não vejo coberto é que abordagens são usadas na prática para lidar com a enorme quantidade de dados recebidos em tempo real que não podem ser processados imediatamente devido à menor capacidade de todo o pipeline?

Imagino que a resposta para isso seja dependente do domínio comercial. Para alguns problemas, pode ser bom apenas soltar esses dados, mas nesta pergunta eu gostaria de focar em um caso em que não queremos perder nenhum dado.

Como vou trabalhar em um ambiente da AWS, meu primeiro pensamento seria "armazenar em buffer" o excesso de dados em uma fila SQS ou em um fluxo Kinesis. É tão simples quanto isso na prática ou existe uma solução de streaming mais padrão para esse problema (talvez como parte do próprio Spark)?

questionAnswers(1)

yourAnswerToTheQuestion