No meio clássico de uso do Spark, nós temos um grupo de máquinas que executam um ETL em um conjunto de dados previsível, onde já se conhece previamente o tamanho e quantidade de dados (finita) a serem processados, ou seja, conseguimos ajustar o tamanho desse cluster ao longo do tempo.
Por outro lado, ao ler dados em streaming, podemos ter de zero a infinitos números de registros, que podem variar seu throughput ao longo do tempo. A partir dessa imprevisibilidade que os conceitos principais surgem, como também nos levará a bloqueios em certas features nativas do Spark.
Então a imprevisibilidade torna-se a peça chave quando comparamos os dois cenários, que pode nos trazer uma série de dúvidas, sendo a principal delas a seguinte:
É possível controlar a quantidade de dados a serem processados?
Essa única questão pode nos levar a demais outras acerca da quantidade de recursos; a distribuição da carga, a quantidade de arquivos gerados (small files/too many files passa a ser um problema constante nessa estratégia), ou até mesmo sobre o conceito de streaming:
Se controlamos a leitura dos dados, entrando em possíveis pausas, estamos realmente trabalhando com streaming?
Nos artigos seguintes vamos ver como chegaremos nos conceitos de micro-batching, watermarking, states, latency, dentre outros.