Migrazione da Kafka a Pub/Sub Lite

Questo documento è utile se stai valutando la migrazione da Apache Kafka autonomo a Pub/Sub Lite.

Panoramica di Pub/Sub Lite

Pub/Sub Lite è un servizio di messaggistica a volume elevato progettato per un costo operativo ridotto. Pub/Sub Lite offre soluzioni a livello di zona e di regione Archiviazione e capacità di cui è stato eseguito il pre-provisioning. In Pub/Sub Lite, puoi scegliere argomenti Lite a livello di zona o di regione. Offerta per gli argomenti Lite a livello di regione la stessa disponibilità garantita dagli argomenti Pub/Sub. Tuttavia, esistono differenze di affidabilità tra Pub/Sub e Pub/Sub Lite in termini di replica dei messaggi.

Per saperne di più su Pub/Sub e Pub/Sub Lite, consulta la sezione Che cos'è Pub/Sub.

Per scoprire di più sulle regioni e sulle zone supportate da Lite, consulta Località Pub/Sub Lite

Terminologia in Pub/Sub Lite

Di seguito sono riportati alcuni termini chiave per Pub/Sub Lite.

  • Messaggio. Dati che si spostano tramite il servizio Pub/Sub Lite.

  • Argomento. Una risorsa con nome che rappresenta un feed di messaggi. In Pub/Sub Lite, puoi scegliere di creare un argomento Lite zonale o regionale. Gli argomenti Pub/Sub Lite a livello di regione archiviano i dati in due zone di una singola regione. Argomenti di zona Pub/Sub Lite di replicare i dati all'interno di una sola zona.

  • Prenotazione. Un pool denominato di capacità della velocità effettiva condiviso da più argomenti Lite in una regione.

  • Subscription Una risorsa denominata che rappresenta un interesse per ricevere messaggi da un particolare argomento Lite. Un abbonamento è simile a un gruppo di consumatori in Kafka che si connette solo a un singolo argomento.

  • Abbonato. Un client di Pub/Sub Lite che riceve messaggi da un argomento Lite e da una sottoscrizione specificata. Un abbonamento può avere più client sottoscrittore. In questo caso, i messaggi vengono bilanciati in base al carico tra i client dei sottoscrittori. In Kafka, un sottoscrittore è chiamato consumatore.

  • Editore. Un'applicazione che crea messaggi e li invia (pubblica) in un argomento Lite specifico. Un argomento può avere più publisher. In Kafka, un editore è chiamato produttore.

Differenze tra Kafka e Pub/Sub Lite

Mentre Pub/Sub Lite è concettualmente simile a Kafka, è un sistema diverso con un'API più ristretta che è più incentrata e importazione dati. Sebbene le differenze non siano rilevanti per l'importazione e l'elaborazione degli stream, esistono alcuni casi d'uso specifici in cui queste differenze sono importanti.

Kafka come database

A differenza di Kafka, Pub/Sub Lite non supporta al momento la pubblicazione transazionale o la compattazione dei log, anche se è supportata l'idempotenza. Queste caratteristiche Kafka sono più utili quando viene utilizzato come database di messaggistica immediata. Se utilizzi Kafka principalmente come database, valuta la possibilità di eseguire il tuo cluster Kafka o utilizzando una soluzione Kafka gestita come Confluent Cloud. Se nessuna di queste soluzioni è disponibile, puoi anche valutare la possibilità di utilizzare un database scalabile orizzontalmente come Cloud Spanner.

Flussi Kafka

Stream Kafka è un sistema di elaborazione dati basato su Kafka. Sebbene consenta l'iniezione di client consumer, richiede l'accesso a tutte le operazioni di amministratore. Kafka Streams utilizza anche le proprietà del database transazionale di Kafka per archiviare i metadati interni. Pertanto, al momento Pub/Sub Lite non può essere utilizzato per le applicazioni Kafka Streams.

Apache Beam è un sistema di elaborazione dei dati in streaming simile, integrato con Kafka, Pub/Sub e Pub/Sub Lite. Puoi eseguire le pipeline Beam in modo completamente gestito con Dataflow o sui cluster Apache Flink e Apache Spark esistenti.

Monitoraggio

I client Kafka possono leggere le metriche lato server. In Pub/Sub Lite, le metriche pertinenti al comportamento di publisher e abbonati vengono gestite tramite Cloud Monitoring senza alcuna configurazione aggiuntiva.

Gestione della capacità

La capacità di un argomento Kafka è determinata dalla capacità del cluster. Le impostazioni di replica, compattazione della chiave e batch determinano la capacità richiesta per gestire qualsiasi argomento specifico sul cluster Kafka. La velocità effettiva di un argomento Kafka è limitata dalla capacità delle macchine su cui sono in esecuzione i broker. Al contrario, devi definire sia l'archiviazione che la velocità effettiva per un argomento Pub/Sub Lite. La capacità di archiviazione di Pub/Sub Lite è una proprietà configurabile dell'argomento. La capacità di velocità effettiva si basa sulla capacità della prenotazione configurata e sui limiti per partizione intrinseci o configurati.

Autenticazione e sicurezza

Apache Kafka supporta diversi meccanismi di autenticazione e crittografia aperti. Con Pub/Sub Lite, l'autenticazione si basa sul sistema IAM. La sicurezza è garantita tramite la crittografia at-rest e in transito. Scopri di più sull'autenticazione di Pub/Sub Lite nella sezione relativa al flusso di lavoro di migrazione più avanti in questo documento.

Mappare le proprietà Kafka alle proprietà Pub/Sub Lite

Kafka offre molte opzioni di configurazione che controllano la struttura degli argomenti, i limiti e le proprietà del broker. Alcuni di quelli comuni utili per l'importazione dei dati sono descritti in questa sezione, con i relativi equivalenti in Pub/Sub Lite. Poiché Pub/Sub Lite è un sistema gestito, non devi prendere in considerazione molte proprietà del broker.

Proprietà di configurazione degli argomenti

Proprietà Kafka Proprietà Pub/Sub Lite Descrizione
retention.bytes Spazio di archiviazione per partizione Tutte le partizioni di un argomento Lite hanno la stessa capacità di archiviazione configurata. La capacità di archiviazione totale di un argomento Lite è la somma della capacità di archiviazione di tutte le partizioni dell'argomento.
retention.ms Periodo di conservazione dei messaggi Il periodo di tempo massimo per cui un argomento Lite memorizza i messaggi. Se non specifichi un periodo di conservazione dei messaggi, l'argomento Lite memorizza i messaggi finché non superi la capacità di archiviazione.
flush.ms, acks Non configurabile in Pub/Sub Lite Le pubblicazioni non vengono confermate finché non viene garantita la loro persistenza nello spazio di archiviazione replicato.
max.message.bytes Non configurabile in Pub/Sub Lite 3,5 MiB è la dimensione massima del messaggio che può essere inviata a Pub/Sub Lite. Le dimensioni dei messaggi vengono calcolate in modo ripetibile.
message.timestamp.type Non configurabile in Pub/Sub Lite Quando utilizzi l'implementazione del consumatore, il timestamp dell'evento viene scelto se presente o viene utilizzato il timestamp di pubblicazione. Quando si utilizza Beam, sono disponibili sia i timestamp di pubblicazione che quelli degli eventi.

Per scoprire di più sulle proprietà degli argomenti Lite, consulta Proprietà di un argomento Lite.

Proprietà di configurazione del producer

Pub/Sub Lite supporta il protocollo di comunicazione dei produttori. Alcune proprietà modificano il comportamento delle librerie client Cloud del producer; alcuni dei più comuni sono descritti nella tabella seguente.

Proprietà Kafka Proprietà Pub/Sub Lite Descrizione
auto.create.topics.enable Non configurabile in Pub/Sub Lite Creare un argomento e una sottoscrizione equivalenti più o meno a un gruppo di consumer per un singolo argomento in Pub/Sub Lite. Puoi utilizzare la console, gcloud CLI, l'API o le librerie client di Cloud.
key.serializer, value.serializer Non configurabile in Pub/Sub Lite

Obbligatorio se utilizzi il produttore Kafka o una libreria equivalente che comunica utilizzando il protocollo wire.

batch.size Supportato in Pub/Sub Lite Il raggruppamento è supportato. Il valore consigliato per questo valore è 10 MiB per ottenere prestazioni ottimali.
linger.ms Supportato in Pub/Sub Lite Il raggruppamento è supportato. Il valore consigliato per questo valore è 50 ms per le migliori prestazioni.
max.request.size Supportato in Pub/Sub Lite Il server impone un limite di 20 MiB per batch. Imposta questo valore su un valore inferiore a 20 MiB nel client Kafka.
enable.idempotence Supportato in Pub/Sub Lite
compression.type Non supportato in Pub/Sub Lite Devi impostare esplicitamente questo valore su none.

Proprietà di configurazione consumer

Pub/Sub Lite supporta Protocollo di comunicazione del consumatore. Alcune proprietà modificano il comportamento delle librerie client Cloud per i consumatori. Alcune delle più comuni sono descritte nella tabella seguente.

Proprietà Kafka Descrizione
key.deserializer, value.deserializer

Obbligatorio se utilizzi il consumatore Kafka o una libreria equivalente che comunica utilizzando il protocollo wire.

auto.offset.reset Questa configurazione non è supportata o necessaria. È garantito che le sottoscrizioni abbiano una posizione dell'offset definita dopo la loro creazione.
message.timestamp.type Il timestamp di pubblicazione è sempre disponibile da Pub/Sub Lite e garantisce di non diminuire su base per partizione. I timestamp degli eventi potrebbero essere presenti o meno a seconda che siano stati allegati al messaggio al momento della pubblicazione. Quando utilizzi Dataflow, sono disponibili contemporaneamente i timestamp di pubblicazione e di evento.
max.partition.fetch.bytes, max.poll.records Impone un limite flessibile al numero di record e byte restituiti dalle chiamate poll() e al numero di byte restituiti dalle richieste di recupero interne. Il valore predefinito di "max.partition.fetch.bytes" pari a 1 MiB potrebbe limitare il throughput del client. Valuta la possibilità di aumentare questo valore.

Confrontare le funzionalità di Kafka e Pub/Sub Lite

La tabella seguente mette a confronto le funzionalità di Apache Kafka con quelle di Pub/Sub Lite:

Funzionalità Kafka Pub/Sub Lite
Ordinamento messaggi
Deduplicazione messaggi Sì utilizzando Dataflow
Sottoscrizioni push No Sì utilizzando l'esportazione Pub/Sub
Transazioni No
Archiviazione dei messaggi Limitata dallo spazio di archiviazione disponibile sulla macchina Illimitato
Ripetizione dei messaggi
Logging e monitoraggio Autogestito Automatizzato con Cloud Monitoring
Elaborazione dei flussi Sì con Kafka Streams, Apache Beam o Dataproc. Sì con Beam o Dataproc.

La tabella seguente mette a confronto le funzionalità ospitate autonomamente con Kafka e quelle gestite da Google mediante Pub/Sub Lite:

Funzionalità Kafka Pub/Sub Lite
Disponibilità Esegui manualmente il deployment di Kafka in località aggiuntive. Distribuito in tutto il mondo. Vedi le località.
Ripristino di emergenza Progetta e gestisci il tuo backup e la tua replica. Gestito da Google.
Gestione dell'infrastruttura Esegui il deployment e la gestione manuale di macchine virtuali (VM) o macchine. Mantieni un controllo delle versioni e patch coerenti. Gestito da Google.
Pianificazione della capacità Pianifica manualmente in anticipo le esigenze di archiviazione e calcolo. Gestito da Google. Puoi aumentare le risorse di elaborazione e spazio di archiviazione in qualsiasi momento.
Assistenza Nessuno. Assistenza e personale di guardia disponibili 24 ore su 24.

Confronto dei costi di Kafka e Pub/Sub Lite

Il modo in cui stimi e gestisci i costi in Pub/Sub Lite è diverso da quello di Kafka. I costi per un cluster Kafka on-premise cloud includono il costo di macchine, disco, networking, messaggi in entrata e messaggi. Sono inclusi anche i costi generali per la gestione e la manutenzione di questi sistemi e della relativa infrastruttura. Quando gestisci un cluster Kafka, devi eseguire manualmente l'upgrade delle macchine, pianificare la capacità del cluster implementare il ripristino di emergenza che include pianificazione e test approfonditi. È necessario aggregare tutti questi costi per determinare la vera il costo totale di proprietà (TCO).

I prezzi di Pub/Sub Lite includono il costo di prenotazione (byte pubblicati, byte sottoscritti, byte gestiti dal proxy Kafka) e il costo dello spazio di archiviazione di cui è stato eseguito il provisioning. Paghi esattamente le risorse che prenoti, oltre agli addebiti per i messaggi in uscita. Puoi utilizzare il Calcolatore prezzi per fornire una stima dei costi.

Flusso di lavoro della migrazione

Per eseguire la migrazione di un argomento da un cluster Kafka a Pub/Sub Lite, segui le istruzioni riportate di seguito.

Configura le risorse Pub/Sub Lite

  1. Crea un Pub/Sub Lite prenotazione per la velocità effettiva prevista per tutti gli argomenti di cui esegui la migrazione.

    Utilizzare Pub/Sub Lite Calcolatore prezzi per calcolare il risultato metriche relative alla velocità effettiva dei tuoi argomenti Kafka esistenti. Per ulteriori informazioni su come creare prenotazioni, consulta Creare e gestire le prenotazioni Lite.

  2. crea un argomento Pub/Sub Lite per ogni argomento corrispondente in Kafka.

    Per saperne di più su come creare argomenti Lite, consulta Creare e gestire argomenti Lite.

  3. Crea una sottoscrizione Pub/Sub Lite per ogni corrispondente coppia di gruppo di consumer e argomento nel cluster Kafka.

    Ad esempio, per un gruppo di consumatori denominato consumers che utilizza da topic-a e topic-b, devi creare una sottoscrizione consumers-a è associato a topic-a e un abbonamento consumers-b associato a topic-b. Per ulteriori informazioni su come creare abbonamenti, consulta Creare e gestire abbonamenti Lite.

Autenticazione in Pub/Sub Lite

In base al tipo di client Kafka, scegli uno dei seguenti metodi:

Client Kafka basati su Java versione 3.1.0 o successive con ricostruzioni

Per i client Kafka basati su Java della versione 3.1.0 o successive che possono essere ricostruiti sull'istanza in cui è in esecuzione il client Kafka:

  1. Installa il pacchetto com.google.cloud:pubsublite-kafka-auth.

  2. Ottenere i parametri necessari per l'autenticazione su Pub/Sub Lite con l'aiuto di com.google.cloud.pubsublite.kafka.ClientParameters.getParams.

    Il metodo getParams() (vedi un esempio di codice ) inizializza le seguenti configurazioni JAAS e SASL come parametri per l'autenticazione in Pub/Sub Lite:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=http://localhost:14293
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    

Client Kafka basati su Java che eseguono la versione 3.1.0 o successive senza ricostruzioni

Per i client Kafka che supportano KIP-768, supportiamo un'autenticazione OAUTHBEARER solo configurazione che utilizza uno script collaterale Python. Queste versioni includono la versione Java 3.1.0 o successive di gennaio 2022.

Esegui questi passaggi sull'istanza in cui esegui il client Kafka:

  1. Installa Python 3.6 o versioni successive.

    Vedi Installazione di Python.

  2. Installa il pacchetto di autenticazione Google: pip install google-auth

    Questa libreria semplifica i vari meccanismi di autenticazione server-to-server per accedere alle API di Google. Consulta le google-auth pagina.

  3. Esegui lo script kafka_gcp_credentials.py.

    Questo script avvia un server HTTP locale e recupera le credenziali predefinite di Google Cloud nell'ambiente utilizzando google.auth.default().

    L'entità nelle credenziali recuperate deve disporre dell'autorizzazione pubsublite.locations.openKafkaStream per il progetto Google Cloud che stai utilizzando e per la località a cui ti stai connettendo. I ruoli Pub/Sub Lite Publisher (roles/pubsublite.publisher) e Pub/Sub Lite Subscriber (roles/pubsublite.subscriber) dispongono di questa autorizzazione richiesta. Aggiungi questi ruoli al tuo principale.

    Le credenziali vengono utilizzate nella Autenticazione SASL/OAUTHBEARER per il client Kafka.

    I seguenti parametri sono obbligatori nelle tue proprietà per eseguire l'autenticazione in Pub/Sub Lite dal client Kafka:

    security.protocol=SASL_SSL
    sasl.mechanism=OAUTHBEARER
    sasl.oauthbearer.token.endpoint.url=localhost:14293
    sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.secured.OAuthBearerLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
      required clientId="unused" clientSecret="unused" \
      extension_pubsubProject="PROJECT_ID";
    

    Sostituisci PROJECT_ID con l'ID del progetto che esegue Pub/Sub Lite.

Tutti gli altri clienti senza ricreare

Per tutti gli altri clienti, svolgi i seguenti passaggi:

  1. Scarica un file JSON della chiave dell'account di servizio per l'account di servizio che intendi utilizzare per il tuo client.

  2. Codifica il file dell'account di servizio utilizzando base64-encode per utilizzarlo come stringa di autenticazione,

    Sui sistemi Linux o macOS, puoi utilizzare il comando base64 (spesso installato per impostazione predefinita) come segue:

    base64 < my_service_account.json > password.txt
    

    Puoi utilizzare i contenuti del file delle password per l'autenticazione con i seguenti parametri.

    Java

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="PROJECT_ID" \
     password="contents of base64 encoded password file";
    

    Sostituisci PROJECT_ID con l'ID del progetto che esegue Pub/Sub.

    Librdkafka

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.username=PROJECT_ID
    sasl.password=contents of base64 encoded password file
    

    Sostituisci PROJECT_ID con l'ID del progetto che esegue Pub/Sub.

Clona i dati utilizzando Kafka Connect

Il team di Pub/Sub Lite gestisce un'implementazione Sink di Kafka Connect. Puoi configurare questa implementazione per copiare i dati da un argomento Kafka a un argomento Pub/Sub Lite utilizzando un cluster Kafka Connect.

Per configurare il connettore in modo che esegua la copia dei dati, consulta Connettore Kafka per gruppi Pub/Sub.

Se vuoi assicurarti che l'affinità di partizione non sia interessata dal processo di migrazione, assicurati che l'argomento Kafka e l'argomento Pub/Sub Lite abbiano lo stesso numero di partizioni e che la proprietà pubsublite.ordering.mode sia impostata su KAFKA. Di conseguenza, il connettore indirizzerà i messaggi alla partizione Pub/Sub Lite con lo stesso indice della partizione Kafka in cui sono stati pubblicati originariamente.

Esegui la migrazione dei consumatori

Il modello di risorse di Pub/Sub Lite è diverso da quello di Kafka. In particolare, a differenza di un gruppo di consumer, un abbonamento è una risorsa esplicita ed è associati a un solo argomento. A causa di questa differenza, in qualsiasi punto dell'API Kafka Consumer che richiede di passare un topic, deve essere passato il percorso di sottoscrizione completo.

Oltre alle configurazioni SASL per il client Kafka, quando utilizzi l'API Kafka Consumer per dialogare con Pub/Sub Lite sono richieste anche le seguenti impostazioni.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443
group.id=unused

Sostituisci REGION con la regione in cui esiste la tua sottoscrizione Pub/Sub Lite.

Prima di avviare il primo job consumer di Pub/Sub Lite per un determinato di abbonamento, puoi avviare (ma non attendere) un Operazione ricerca amministratore per impostare la posizione iniziale per il consumatore.

Quando avvii il flusso di lavoro, i consumatori si riconnettono alla compensazione attuale in il backlog dei messaggi. Esegui i client vecchi e nuovi in parallelo per tutto il tempo necessario per verificarne il comportamento, quindi disattiva i client consumer vecchi.

Esegui la migrazione dei produttori

Oltre alle configurazioni SASL per il client Kafka, anche il seguente è obbligatorio come parametro producer quando utilizzi API Kafka Producer per interagire con Pub/Sub Lite.

bootstrap.servers=REGION-kafka-pubsub.googleapis.com:443

Sostituisci REGION con la regione in cui esiste l'argomento Pub/Sub Lite.

Dopo aver eseguito la migrazione di tutti i consumatori dell'argomento in modo che possano leggere da Pub/Sub Lite, sposta il traffico dei produttori in modo che scriva direttamente in Pub/Sub Lite.

Esegui gradualmente la migrazione dei client di produzione in modo che scrivano nell'argomento Pub/Sub Lite anziché nell'argomento Kafka.

Riavvia i client producer per acquisire nuove configurazioni.

Disattiva Kafka Connect

Dopo aver eseguito la migrazione di tutti i produttori in modo che scrivano direttamente in Pub/Sub Lite, il connettore non copia più i dati.

Puoi ridurre l'istanza Kafka Connect.

Risolvere i problemi di connessione Kafka

Poiché i client Kafka comunicano tramite un protocollo di rete personalizzato, non possiamo fornire messaggi di errore per i problemi in tutte le richieste. Fai affidamento sui codici di errore inviati nell'ambito del messaggio.

Puoi visualizzare ulteriori dettagli sugli errori che si verificano nel client impostando il livello di registrazione per il prefisso org.apache.kafka su FINEST.

Bassa velocità effettiva e aumento del backlog

Esistono diversi motivi per cui potresti notare una velocità effettiva bassa e un arretrato crescente. Un motivo potrebbe essere la capacità insufficiente.

Puoi configurare la capacità di velocità effettiva a livello di argomento o usando le prenotazioni. Se è configurata una capacità di velocità in uscita insufficiente per le operazioni di iscrizione e pubblicazione, la velocità in uscita corrispondente per le operazioni di iscrizione e pubblicazione viene limitata.

Questo errore di velocità effettiva viene segnalato Metrica topic/flow_control_status per gli editori e subscription/flow_control_status metrica per gli abbonati. La metrica fornisce i seguenti stati:

  • NO_PARTITION_CAPACITY: questo messaggio indica che è stato raggiunto il limite di velocità effettiva per partizione.

  • NO_RESERVATION_CAPACITY: questo messaggio indica che l'offerta per prenotazione è stato raggiunto il limite di velocità effettiva massima.

Puoi visualizzare i grafici sull'utilizzo per l'argomento o la prenotazione quota di pubblicazione e sottoscrizione e verifica se l'utilizzo è pari o vicino al 100%.

Per risolvere il problema, aumenta la capacità di velocità effettiva dell'argomento o della prenotazione.

Messaggio di errore Autorizzazione argomento non riuscita

La pubblicazione tramite l'API Kafka richiede che l'agente di servizio Lite disponga delle autorizzazioni necessarie per pubblicare nell'argomento Pub/Sub Lite.

Ricevi l'errore TOPIC_AUTHORIZATION_FAILED nel client nell'evento di non disporre delle autorizzazioni corrette per pubblicare Pub/Sub Lite.

Per risolvere il problema, controlla se l'agente di servizio Lite per il progetto è stato superato nella configurazione di autenticazione.

Messaggio di errore relativo a un argomento non valido

L'abbonamento tramite l'API Kafka richiede il passaggio del percorso di abbonamento completo in tutti i punti in cui è previsto un topic nell'API Kafka Consumer.

In caso contrario, ricevi l'errore INVALID_TOPIC_EXCEPTION nel tuo client consumer un percorso di sottoscrizione ben formattato.

Richiesta non valida quando non si utilizzano le prenotazioni

L'utilizzo del supporto del protocollo di cablaggio Kafka richiede che a tutti gli argomenti sia associata una prenotazione per poter addebitare l'utilizzo.