Perguntas comuns da entrevista de Big Data para Spark Streaming

1. De que forma o SparkStreaming consome dados no Kafka e qual é a diferença entre eles?

1. Com base no receptor

  • Este método usa o receptor para obter dados. O receptor é implementado usando a API do consumidor de alto nível do Kafka. Os dados obtidos pelo receptor do Kafka são armazenados na memória do executor do spark (se houver um aumento repentino nos dados, um grande número de lotes se acumula, É fácil ter problemas de estouro de memória) e, em seguida, quais dados serão o trabalho iniciado pelo processo de streaming de faísca
  • No entanto, na configuração padrão, este método pode perder dados devido à falha da camada subjacente. Se você deseja habilitar o mecanismo de alta disponibilidade e perda zero de dados, você deve habilitar o mecanismo de registro de gravação antecipada do fluxo contínuo (Write Ahead Log, WAL) O mecanismo gravará de maneira síncrona os dados Kafka recebidos no log de gravação antecipada no sistema de arquivos distribuído (como hdfs). Portanto, mesmo se o nó subjacente falhar, os dados no log de gravação antecipada podem ser usados ​​para recuperação

2. Abordagem de base direta

  • Esse método direto que não é baseado no Receiver foi introduzido no spark1.3 para garantir um mecanismo mais robusto. Em vez de usar o Receiver para receber dados, esse método consultará periodicamente o Kafka para obter cada tópico. + O último deslocamento da partição, que define o intervalo do deslocamento de cada lote. Quando os dados de processamento do trabalho começarem, ele usará a API de consumidor simples de Kafka para obter os dados do intervalo de deslocamento especificado de Kafka

As vantagens são as seguintes:

  • Simplifique a leitura paralela: se você quiser ler várias partições, não precisa criar vários DStreams de entrada e, em seguida, realizar operações de união neles. O Spark criará tantas partições RDD quanto partições kafka. E lerá dados do kafka em paralelo. Existe uma relação de mapeamento um para um entre a partição kafka e a partição RDD
  • Alto desempenho: se você deseja garantir perda zero de dados, é necessário ativar o mecanismo WAL no método baseado em receptor. Este método é realmente ineficiente, porque os dados são copiados duas vezes e o próprio Kafka tem um mecanismo de alta confiabilidade. Os dados são copiados e aqui serão copiados para o WAL. Com base no método direto, não depende do Receptor e não precisa abrir o mecanismo do WAL. Desde que os dados sejam copiados no Kafka, eles podem ser restaurados por meio da cópia do Kafka
  • Uma e apenas uma vez mecanismo de transação

3. Comparação dos dois

  • Com base no método do receptor, a API de alto nível do Kafka é usada para salvar o deslocamento consumido no zookeeper. Esta é a forma tradicional de consumir dados do Kafka. Este método, em conjunto com o mecanismo WAL, pode garantir alta confiabilidade com perda zero de dados, mas No entanto, não há garantia de que os dados serão processados ​​uma e apenas uma vez, e podem ser processados ​​duas vezes. Porque o Spark e o Zookeeper podem não estar sincronizados
  • Com base no método direto, usando a API simples do Kafka, o próprio SparkStreaming é responsável por rastrear o deslocamento de consumo e salvá-lo no checkpoint. O próprio parque deve ser sincronizado, para que possa garantir que os dados sejam consumidos apenas uma vez.
  • 在实际生产环境中大都用Direct方式

2. Princípio da função da janela Spark Streaming

  • A função da janela é encapsular novamente com base no tamanho do lote de cálculo SparkStreaming definido originalmente. Cada vez que vários lotes de dados são calculados, um parâmetro de etapa deslizante precisa ser passado ao mesmo tempo para definir a próxima tarefa de cálculo após a conclusão do cálculo. Onde começar a contar de cada vez
  • Na figura, time1 é o tamanho do lote calculado por SparkStreaming. A caixa tracejada e a caixa grande sólida são do tamanho da janela, que deve ser um múltiplo inteiro do lote. A distância entre a caixa tracejada e a caixa sólida grande (quantos lotes estão separados) é o tamanho da etapa deslizante
    Insira a descrição da imagem aqui

Três. Princípio de tolerância a falhas de streaming de faísca

Uma característica do fluxo de faíscas é a alta tolerância a falhas

  • Em primeiro lugar, o spark rdd tem um mecanismo tolerante a falhas. Cada rdd é um conjunto de dados imutável distribuído e recalculado, que registra essa linhagem de operação determinística, desde que os dados de entrada sejam tolerantes a falhas, então qualquer erro de partição rdd Ou indisponíveis, todos podem ser recalculados usando os dados de entrada originais por meio de operações de conversão
  • Os logs de gravação antecipada geralmente são usados ​​em bancos de dados e sistemas de arquivos para garantir a durabilidade das operações de dados. Os logs de gravação antecipada geralmente gravam a operação em um arquivo de log durável e confiável e, em seguida, aplicam a operação aos dados. Ocorreu uma exceção na operação, você pode ler o arquivo de log e reaplicar a operação
  • Além disso, a exatidão dos dados recebidos só é confirmada pelo receptor depois que os dados são pré-gravados no log. Os dados que foram armazenados em cache, mas ainda não salvos, podem ser enviados pela fonte de dados novamente depois que o driver é reiniciado. Esses dois mecanismos garantem dados zero. Perdidos, todos os dados são recuperados do registro ou reenviados pela fonte de dados

Acho que você gosta

Origin blog.csdn.net/sun_0128/article/details/107974157
Recomendado
Clasificación