Esegui la 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 archiviazione a livello di zona e di regione, oltre a una capacità pre-provisionata. In Pub/Sub Lite, puoi scegliere argomenti Lite a livello di zona o di regione. Gli argomenti Lite regionali offrono lo stesso SLA di disponibilità degli argomenti Pub/Sub. Tuttavia, esistono differenze di affidabilità tra Pub/Sub e Pub/Sub Lite in termini di replica dei messaggi.

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

Per scoprire di più sulle regioni e sulle zone supportate da Lite, consulta Località di 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 denominata che rappresenta un feed di messaggi. In Pub/Sub Lite, puoi scegliere di creare un argomento Lite regionale o zonale. Gli argomenti Pub/Sub Lite a livello di regione archiviano i dati in due zone di una singola regione. Gli argomenti Pub/Sub Lite di zona riproducono 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.

  • Abbonamento Una risorsa denominata che rappresenta l'interesse per la ricezione di messaggi da un determinato 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 abbonato è 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 publisher è chiamato produttore.

Differenze tra Kafka e Pub/Sub Lite

Sebbene Pub/Sub Lite sia concettualmente simile a Kafka, si tratta di un sistema diverso con un'API più ristretta e più incentrata sull'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 funzionalità di Kafka sono più utili quando utilizzi Kafka come database rispetto a un sistema di messaggistica. Se utilizzi Kafka principalmente come database, ti consigliamo di eseguire il tuo cluster Kafka o di utilizzare 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.

Stream Kafka

Kafka Streams è un sistema di elaborazione dei 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 delle chiavi e batch determinano la capacità richiesta per gestire un determinato argomento nel 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 la capacità di archiviazione sia 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.

Mappa 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 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, viene scelto il timestamp dell'evento se presente o viene utilizzato il timestamp di pubblicazione. Quando utilizzi Beam, sono disponibili sia i timestamp di pubblicazione sia quelli degli eventi.

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

Proprietà di configurazione del produttore

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

Proprietà Kafka Proprietà Pub/Sub Lite Descrizione
auto.create.topics.enable Non configurabile in Pub/Sub Lite Crea un argomento e una sottoscrizione che siano approssimativamente equivalenti a un gruppo di consumatori per un singolo argomento in Pub/Sub Lite. Puoi utilizzare la console, l'interfaccia a riga di comando gcloud CLI'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. Per ottenere le migliori prestazioni, il valore consigliato è 10 MiB.
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 del consumatore

Pub/Sub Lite supporta il protocollo di comunicazione Consumer. 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 di partizione. I timestamp degli eventi possono 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
Deduplica dei messaggi Sì, utilizzando Dataflow
Sottoscrizioni push No Sì, utilizzando l'esportazione Pub/Sub
Transazioni No
Archiviazione dei messaggi Limitato dallo spazio di archiviazione disponibile della 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à self-hosted con Kafka e quelle gestite da Google utilizzando Pub/Sub Lite:

Funzionalità Kafka Pub/Sub Lite
Disponibilità Esegui il deployment manuale di Kafka in altre località. Implementato in tutto il mondo. Vedi Località.
Ripristino di emergenza Progetta e gestisci il tuo backup e la tua replica. Gestito da Google.
Gestione dell'infrastruttura Esegui il deployment e gestisci manualmente macchine virtuali (VM) o macchine. Mantieni coerenti le versioni e le patch. Gestito da Google.
Pianificazione della capacità Pianifica manualmente in anticipo le esigenze di archiviazione e calcolo. Gestito da Google. Puoi aumentare la potenza di calcolo e lo 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 stime e gestisci i costi in Pub/Sub Lite è diverso da quello in Kafka. I costi di un cluster Kafka on-premise o in cloud includono il costo di macchine, dischi, reti, messaggi in entrata e messaggi in uscita. 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 e implementare il ripristino di emergenza che include una pianificazione e test approfonditi. Devi aggregare tutti questi vari costi per determinare il vero costo totale di proprietà (TCO).

I prezzi di Pub/Sub Lite includono il costo della prenotazione (byte pubblicati, byte iscritti, byte gestiti dal proxy Kafka) e il costo dello spazio di archiviazione provisionato. 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 di migrazione

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

Configurare le risorse Pub/Sub Lite

  1. Crea una prenotazione Pub/Sub Lite per il throughput previsto per tutti gli argomenti di cui esegui la migrazione.

    Utilizza il Calcolatore prezzi di Pub/Sub Lite per calcolare le metriche aggregate sul throughput dei tuoi argomenti Kafka esistenti. Per ulteriori informazioni su come creare prenotazioni, consulta Creare e gestire prenotazioni Lite.

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

    Per ulteriori informazioni su come creare argomenti Lite, consulta Creare e gestire gli argomenti Lite.

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

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

Eseguire l'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. Ottieni i parametri necessari per l'autenticazione in 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 l'autenticazione OAUTHBEARER solo per la configurazione che utilizza uno script sidecar Python. Queste versioni includono la versione Java 3.1.0 o successive di gennaio 2022.

Esegui i seguenti passaggi nell'istanza in cui esegui il client Kafka:

  1. Installa Python 3.6 o versioni successive.

    Consulta 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 la pagina google-auth.

  3. Esegui lo script kafka_gcp_credentials.py.

    Questo script avvia un server HTTP locale e recupera le credenziali Google Cloud predefinite 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 nell'autenticazione SASL/OAUTHBEARER per il client Kafka.

    I seguenti parametri sono obbligatori nelle proprietà per autenticarsi 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 in cui è in esecuzione Pub/Sub Lite.

Tutti gli altri client senza ricostruzione

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 in cui è in esecuzione 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 in cui è in esecuzione Pub/Sub.

Clona i dati utilizzando Kafka Connect

Il team di Pub/Sub Lite gestisce un'implementazione di un Sink 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 consumatori, un abbonamento è una risorsa esplicita ed è associato esattamente a un 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 Pub/Sub Lite per un determinato abbonamento, puoi avviare (ma non attendere) un'operazione di ricerca dell'amministratore per impostare la posizione iniziale del consumer.

Quando avvii i consumatori, questi si ricollega all'offset corrente nel 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, quando utilizzi l'API Kafka Producer per interagire con Pub/Sub Lite è obbligatorio anche quanto segue come parametro producer.

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.

Riavviare i client di produzione per acquisire nuove configurazioni.

Disattivare 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 a 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 riscontrare un throughput ridotto e un aumento del backlog. Un motivo potrebbe essere la capacità insufficiente.

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

Questo errore di throughput viene segnalato dalla metrica topic/flow_control_status per i publisher e dalla metrica subscription/flow_control_status 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 è stato raggiunto il limite di throughput per prenotazione.

Puoi visualizzare i grafici di utilizzo per la quota di pubblicazione e sottoscrizione dell'argomento o della prenotazione e verificare 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 relativo all'autorizzazione dell'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.

L'errore TOPIC_AUTHORIZATION_FAILED viene visualizzato nel client se non disponi delle autorizzazioni corrette per pubblicare nell'argomento Pub/Sub Lite.

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

Messaggio di errore relativo all'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.

Viene visualizzato l'errore INVALID_TOPIC_EXCEPTION nel client consumer se non viene fornito un percorso di abbonamento 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.