Partilhar via


Conecte seu aplicativo Apache Spark aos Hubs de Eventos do Azure

Este tutorial orienta você na conexão de seu aplicativo Spark a Hubs de Eventos para streaming em tempo real. Esta integração ativa a transmissão em fluxo sem que seja necessário alterar os clientes de protocolo ou executar os seus próprios clusters do Kafka ou do Zookeeper. Este tutorial requer o Apache Spark v2.4+ e o Apache Kafka v2.0+.

Observação

Este exemplo está disponível no GitHub

Neste tutorial, você aprenderá a:

  • Criar um namespace de Hubs de Eventos
  • Clonar o projeto de exemplo
  • Executar o Spark
  • Leia a partir de Hubs de Eventos para Kafka
  • Escrever em Hubs de Eventos para Kafka

Pré-requisitos

Antes de iniciar este tutorial, certifique-se de que tem:

Observação

O adaptador Spark-Kafka foi atualizado para suportar Kafka v2.0 a partir do Spark v2.4. Em versões anteriores do Spark, o adaptador suportava Kafka v0.10 e posteriores, mas dependia especificamente de APIs Kafka v0.10. Como os Hubs de Eventos para Kafka não suportam Kafka v0.10, os adaptadores de Spark-Kafka das versões do Spark anteriores à v2.4 não são suportados pelos Hubs de Eventos para Ecossistemas Kafka.

Criar um namespace de Hubs de Eventos

É necessário um namespace do Event Hubs para enviar e receber de qualquer serviço do Event Hubs. Consulte Criando um hub de eventos para obter instruções sobre como criar um namespace e um hub de eventos. Obtenha a cadeia de ligação dos Hubs de Eventos e o nome de domínio completamente qualificado (FQDN), para utilizar mais tarde. Para obter instruções, veja Get an Event Hubs connection string (Obter uma cadeia de ligação dos Hubs de Eventos).

Clonar o projeto de exemplo

Clone o repositório de Hubs de Eventos do Azure e navegue até a subpasta tutorials/spark:

git clone https://github.com/Azure/azure-event-hubs-for-kafka.git
cd azure-event-hubs-for-kafka/tutorials/spark

Leia a partir de Hubs de Eventos para Kafka

Com algumas alterações de configuração, você pode começar a ler a partir de Hubs de Eventos para Kafka. Atualize BOOTSTRAP_SERVERS e EH_SASL com os detalhes do seu namespace, para começar a transmissão com Event Hubs tal como faria com Kafka. Para obter o código de exemplo completo, consulte o arquivo sparkConsumer.scala no GitHub.

//Read from your Event Hub!
val df = spark.readStream
    .format("kafka")
    .option("subscribe", TOPIC)
    .option("kafka.bootstrap.servers", BOOTSTRAP_SERVERS)
    .option("kafka.sasl.mechanism", "PLAIN")
    .option("kafka.security.protocol", "SASL_SSL")
    .option("kafka.sasl.jaas.config", EH_SASL)
    .option("kafka.request.timeout.ms", "60000")
    .option("kafka.session.timeout.ms", "30000")
    .option("kafka.group.id", GROUP_ID)
    .option("failOnDataLoss", "true")
    .load()

//Use dataframe like normal (in this example, write to console)
val df_write = df.writeStream
    .outputMode("append")
    .format("console")
    .start()

Se receber um erro semelhante ao seguinte, adicione .option("spark.streaming.kafka.allowNonConsecutiveOffsets", "true") à chamada spark.readStream e tente novamente.

IllegalArgumentException: requirement failed: Got wrong record for <spark job name> even after seeking to offset 4216 got offset 4217 instead. If this is a compacted topic, consider enabling spark.streaming.kafka.allowNonConsecutiveOffsets 

Escrever em Hubs de Eventos para Kafka

Você também pode escrever em Hubs de Eventos da mesma forma que escreve em Kafka. Não se esqueça de atualizar sua configuração para alterar BOOTSTRAP_SERVERS e EH_SASL com informações do namespace dos Hubs de Eventos. Para obter o código de exemplo completo, consulte o arquivo sparkProducer.scala no GitHub.

df = /**Dataframe**/

//Write to your Event Hub!
df.writeStream
    .format("kafka")
    .option("topic", TOPIC)
    .option("kafka.bootstrap.servers", BOOTSTRAP_SERVERS)
    .option("kafka.sasl.mechanism", "PLAIN")
    .option("kafka.security.protocol", "SASL_SSL")
    .option("kafka.sasl.jaas.config", EH_SASL)
    .option("checkpointLocation", "./checkpoint")
    .start()

Próximos passos

Para saber mais sobre Hubs de Eventos e Hubs de Eventos para Kafka, consulte os seguintes artigos: