Iscriviti a Google Pub/Sub
Azure Databricks offre un connettore predefinito per sottoscrivere Google Pub/Sub in Databricks Runtime 13.3 LTS e versioni successive. Questo connettore fornisce semantica di elaborazione di tipo exactly-once per i record del sottoscrittore.
Nota
Pub/Sub potrebbe pubblicare record duplicati e i record potrebbero arrivare al sottoscrittore non in ordine. È necessario scrivere il codice di Azure Databricks per gestire i record duplicati e non ordinati.
Esempio di sintassi
Nell'esempio di codice seguente viene illustrata la sintassi di base per la configurazione di un flusso strutturato letto da Pub/Sub:
val authOptions: Map[String, String] =
Map("clientId" -> clientId,
"clientEmail" -> clientEmail,
"privateKey" -> privateKey,
"privateKeyId" -> privateKeyId)
val query = spark.readStream
.format("pubsub")
// we will create a Pubsub subscription if none exists with this id
.option("subscriptionId", "mysub") // required
.option("topicId", "mytopic") // required
.option("projectId", "myproject") // required
.options(authOptions)
.load()
Per altre opzioni di configurazione, vedere Configurare le opzioni per la lettura in streaming pub/sub.
Configurare l'accesso a Pub/Sub
Databricks consiglia di usare i segreti quando si forniscono opzioni di autorizzazione. Per autorizzare una connessione sono necessarie le opzioni seguenti:
clientEmail
clientId
privateKey
privateKeyId
La tabella seguente descrive i ruoli necessari per le credenziali configurate:
Ruoli | Obbligatorio o facoltativo | Modalità di utilizzo |
---|---|---|
roles/pubsub.viewer oppure roles/viewer |
Richiesto | Controllare se la sottoscrizione esiste e ottenere la sottoscrizione |
roles/pubsub.subscriber |
Richiesto | Recuperare i dati da una sottoscrizione |
roles/pubsub.editor oppure roles/editor |
Facoltativo | Abilita la creazione di una sottoscrizione se non esiste e consente anche l'uso deleteSubscriptionOnStreamStop di per eliminare le sottoscrizioni alla terminazione del flusso |
Schema pub/sub
Lo schema per il flusso corrisponde ai record recuperati da Pub/Sub, come descritto nella tabella seguente:
Campo | Type |
---|---|
messageId |
StringType |
payload |
ArrayType[ByteType] |
attributes |
StringType |
publishTimestampInMillis |
LongType |
Configurare le opzioni per la lettura in streaming pub/sub
Nella tabella seguente vengono descritte le opzioni supportate per Pub/Sub. Tutte le opzioni vengono configurate come parte di una lettura structured streaming usando .option("<optionName>", "<optionValue>")
la sintassi.
Nota
Alcune opzioni di configurazione pub/sub usano il concetto di recupero invece di micro batch. Ciò riflette i dettagli dell'implementazione interna e le opzioni funzionano in modo analogo a quelle di altri connettori Structured Streaming, ad eccezione del fatto che i record vengono recuperati e quindi elaborati.
Opzione | Default value | Descrizione |
---|---|---|
numFetchPartitions |
Impostare su una metà del numero di executor presenti all'inizializzazione del flusso. | Numero di attività Spark parallele che recuperano record da una sottoscrizione. |
deleteSubscriptionOnStreamStop |
false |
Se true , la sottoscrizione passata al flusso viene eliminata al termine del processo di streaming. |
maxBytesPerTrigger |
Nessuno | Limite flessibile per l'elaborazione delle dimensioni del batch durante ogni micro batch attivato. |
maxRecordsPerFetch |
1000 | Numero di record da recuperare per ogni attività prima dell'elaborazione dei record. |
maxFetchPeriod |
10 secondi | Durata del recupero di ogni attività prima dell'elaborazione dei record. Databricks consiglia di usare il valore predefinito. |
Semantica di elaborazione batch incrementale per Pub/Sub
È possibile usare Trigger.AvailableNow
per utilizzare i record disponibili dalle origini Pub/Sub di un batch incrementale.
Azure Databricks registra il timestamp quando si inizia una lettura con l'impostazione Trigger.AvailableNow
. I record elaborati dal batch includono tutti i dati recuperati in precedenza e tutti i record appena pubblicati con un timestamp minore del timestamp di inizio del flusso registrato.
Si veda Configurazione dell'elaborazione batch incrementale.
Monitoraggio delle metriche di streaming
Le metriche di stato di Structured Streaming segnalano il numero di record recuperati e pronti per l'elaborazione, le dimensioni dei record recuperati e pronti per l'elaborazione e il numero di duplicati rilevati dall'avvio del flusso. Di seguito è riportato un esempio di queste metriche:
"metrics" : {
"numDuplicatesSinceStreamStart" : "1",
"numRecordsReadyToProcess" : "1",
"sizeOfRecordsReadyToProcess" : "8"
}
Limiti
L'esecuzione speculativa (spark.speculation
) non è supportata con Pub/Sub.