Migrazione da Kafka a Pub/Sub Lite

Questo documento è utile se stai prendendo in considerazione la migrazione da Apache Kafka autogestito a Pub/Sub Lite.

Panoramica di Pub/Sub Lite

Pub/Sub Lite è un servizio di messaggistica ad alto volume creato per i costi operativi ridotti. Pub/Sub Lite offre archiviazione a livello di zona e regionale oltre alla capacità di cui è stato eseguito il pre-provisioning. In Pub/Sub Lite, puoi scegliere argomenti Lite a livello di zona o di regione. Gli argomenti Lite a livello di regione offrono 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 pagina Che cos'è Pub/Sub.

Per scoprire di più sulle regioni e sulle zone supportate da Lite, vedi 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 con nome che rappresenta un feed di messaggi. All'interno di Pub/Sub Lite, puoi scegliere di creare un argomento Lite a livello di zona o di regione. Gli argomenti regionali Pub/Sub Lite archiviano i dati in due zone di una singola regione. Gli argomenti di zona Pub/Sub Lite replicano i dati all'interno di una sola zona.

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

  • Sottoscrizione Una risorsa denominata che rappresenta un interesse nella ricezione di messaggi da un particolare argomento Lite. Una sottoscrizione è simile a un gruppo di consumer in Kafka che si connette a un solo argomento.

  • Iscritto. Un client Pub/Sub Lite che riceve messaggi da un argomento Lite e in una sottoscrizione specificata. Una sottoscrizione può avere più client sottoscrittori. In questo caso, i messaggi vengono bilanciati del carico tra i client sottoscrittori. In Kafka, un sottoscrittore è chiamato consumer.

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

Differenze tra Kafka e Pub/Sub Lite

Pub/Sub Lite è concettualmente simile a Kafka, ma è un sistema diverso con un'API più ristretta e più incentrata sull'importazione dati. Sebbene le differenze siano irrilevanti per l'importazione e l'elaborazione dei flussi, esistono alcuni casi d'uso specifici in cui queste differenze sono importanti.

Kafka come database

A differenza di Kafka, Pub/Sub Lite attualmente non supporta la pubblicazione transazionale o la compattazione dei log, sebbene sia supportata l'idempotenza. Queste funzionalità Kafka sono più utili quando viene utilizzato come database piuttosto che come sistema di messaggistica. Se utilizzi Kafka principalmente come database, valuta la possibilità di eseguire il tuo cluster Kafka o di utilizzare una soluzione Kafka gestita come Confluent Cloud. Se nessuna di queste soluzioni è un'opzione, puoi anche considerare l'utilizzo di un database a scalabilità orizzontale come Cloud Spanner.

Flussi Kafka

I flussi Kafka è un sistema di elaborazione dati basato su Kafka. Sebbene consenta l'iniezione di client consumer, richiede l'accesso a tutte le operazioni dell'amministratore. I flussi Kafka usano anche le proprietà dei database transazionali di Kafka per l'archiviazione Per questo motivo, al momento Pub/Sub Lite non può essere usato per le applicazioni dei flussi Kafka.

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

Monitora

I client Kafka possono leggere le metriche lato server. In Pub/Sub Lite, le metriche pertinenti al comportamento di publisher e sottoscrittori 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 qualsiasi argomento specifico 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 la capacità di archiviazione e 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 intrinseci o configurati per partizione.

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 dalla crittografia at-restt e in transito. Per ulteriori informazioni sull'autenticazione Pub/Sub Lite, consulta la sezione 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à dei broker. In questa sezione vengono illustrate alcune delle più comuni utili per l'importazione dati, con i rispettivi equivalenti in Pub/Sub Lite. Poiché Pub/Sub Lite è un sistema gestito, non è necessario considerare molte proprietà dell'intermediario.

Proprietà di configurazione dell'argomento

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 archivia i messaggi. Se non specifichi un periodo di conservazione dei messaggi, l'argomento Lite archivia i messaggi finché non superi la capacità di archiviazione.
flush.ms, acks Non configurabile in Pub/Sub Lite Le pubblicazioni vengono confermate solo quando ne viene garantita la persistenza nello spazio di archiviazione replicato.
max.message.bytes Non configurabile in Pub/Sub Lite 3,5 MiB è la dimensione massima di un messaggio che può essere inviato a Pub/Sub Lite. Le dimensioni dei messaggi vengono calcolate in modo ripetibile.
message.timestamp.type Non configurabile in Pub/Sub Lite Quando si utilizza l'implementazione consumer, viene scelto il timestamp dell'evento, se presente, oppure 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à dell'argomento Lite, consulta Proprietà di un argomento Lite.

Proprietà di configurazione del producer

Pub/Sub Lite supporta il protocollo Wire del Producer. Alcune proprietà modificano il comportamento delle librerie client Cloud del producer. Alcune di quelle comuni sono descritte 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

Richiesto quando si utilizza il Producer di Kafka o una libreria equivalente che comunica utilizzando il protocollo Wire.

batch.size Supportato in Pub/Sub Lite Il raggruppamento in batch è supportato. Il valore consigliato per questo valore è 10 MiB per ottenere prestazioni ottimali.
linger.ms Supportato in Pub/Sub Lite Il raggruppamento in batch è supportato. Per ottenere prestazioni ottimali, il valore consigliato per questo valore è 50 ms.
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 il protocollo di cavo consumer. Alcune proprietà modificano il comportamento delle librerie client Cloud consumer. Nella tabella seguente vengono illustrate alcune proprietà più comuni.

Proprietà Kafka Descrizione
key.deserializer, value.deserializer

Richiesto quando si utilizza il consumer Kafka o una libreria equivalente che comunica usando il protocollo Wire.

auto.offset.reset Questa configurazione non è supportata o necessaria. Per gli abbonamenti è garantita una località di offset definita dopo la loro creazione.
message.timestamp.type Il timestamp di pubblicazione è sempre disponibile in Pub/Sub Lite e non diminuisce in base alla partizione. I timestamp degli eventi possono essere presenti o meno a seconda che siano stati allegati al messaggio al momento della pubblicazione. Quando si utilizza Dataflow, sono disponibili contemporaneamente i timestamp di pubblicazione e quelli degli eventi.
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 da richieste di recupero interne. Il valore predefinito per "max.partition.fetch.bytes" di 1 MiB potrebbe limitare la velocità effettiva del client. Ti consigliamo di aumentare questo valore.

Confronto tra le caratteristiche di Kafka e Pub/Sub Lite

La tabella seguente confronta le caratteristiche di Apache Kafka con le caratteristiche 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 Automatico 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 tramite 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 backup e 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. Personale 24 ore su 24 e assistenza disponibile.

Confronto dei costi di Kafka e Pub/Sub Lite

Il modo in cui stimi e gestisci i costi in Pub/Sub Lite è diverso da Kafka. I costi per un cluster Kafka on-premise o nel cloud includono il costo di macchine, disco, networking, 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 pianificazione e test approfonditi. È necessario aggregare tutti questi costi per determinare il vero 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 per le risorse che riservi oltre ai costi per i messaggi in uscita. Puoi utilizzare il Calcolatore prezzi per una stima dei costi.

Flusso di lavoro della migrazione

Per eseguire la migrazione di un argomento da un cluster Kafka a Pub/Sub Lite, utilizza le istruzioni seguenti.

Configura le risorse Pub/Sub Lite

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

    Utilizza il calcolatore prezzi Pub/Sub Lite per calcolare le metriche relative alla velocità effettiva aggregata degli argomenti Kafka esistenti. Per ulteriori informazioni su come creare prenotazioni, consulta Creare e gestire prenotazioni Lite.

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

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

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

    Ad esempio, per un gruppo di consumer denominato consumers che utilizza i dati di topic-a e topic-b, devi creare una sottoscrizione consumers-a associata a topic-a e una sottoscrizione consumers-b collegata a topic-b. Per maggiori informazioni su come creare abbonamenti, consulta Creare e gestire sottoscrizioni Lite.

Autenticazione in Pub/Sub Lite

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

Client Kafka basato su Java versione 3.1.0 o successiva con ricreazione

Per i client Kafka basati su Java della versione 3.1.0 o successive che possono essere ricreati nell'istanza in cui viene eseguito 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() (visualizza 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 basato su Java che eseguono la versione 3.1.0 o successiva senza ricreare

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

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 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 in uso e della località a cui ti stai connettendo. I ruoli Publisher Pub/Sub Lite (roles/pubsublite.publisher) e Sottoscrittore Pub/Sub Lite (roles/pubsublite.subscriber) hanno questa autorizzazione richiesta. Aggiungi questi ruoli all'entità.

    Le credenziali vengono utilizzate nell'autenticazione SASL/OAUTHBEARER per il client Kafka.

    I seguenti parametri sono obbligatori nelle 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 client, segui questi passaggi:

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

  2. Codifica il file dell'account di servizio mediante la codifica base64 da utilizzare 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 l'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 del gruppo 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. Questo fa sì che il connettore esegua il routing dei messaggi alla partizione Pub/Sub Lite con lo stesso indice della partizione kafka in cui erano stati originariamente pubblicati.

Esegui la migrazione dei consumer

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 a un solo argomento. A causa di questa differenza, in qualsiasi posizione nell'API Kafka Consumer che richiede la trasmissione di un topic, occorre passare il percorso di sottoscrizione completo.

Oltre alle configurazioni SASL per il client Kafka, sono necessarie anche le seguenti impostazioni quando si utilizza l'API Kafka Consumer per interagire con Pub/Sub Lite.

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

Sostituisci REGION con la regione in cui si trova l'abbonamento Pub/Sub Lite.

Prima di avviare il primo job consumer di Pub/Sub Lite per una determinata sottoscrizione, puoi avviare (ma non attendere) un'operazione di ricerca di amministratore per impostare la località iniziale per il consumer.

Quando avvii i consumatori, questi si riconnettono all'offset attuale nel backlog dei messaggi. Esegui in parallelo i client vecchi e nuovi, finché è necessario verificare il loro comportamento, quindi disattiva i client consumer precedenti.

Esegui la migrazione dei producer

Oltre alle configurazioni SASL per il client Kafka, è richiesto anche quanto segue come parametro del producer quando si utilizza l'API Kafka Producer per interagire con Pub/Sub Lite.

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

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

Dopo aver eseguito la migrazione di tutti i consumer dell'argomento in modo da leggere da Pub/Sub Lite, sposta il traffico del producer in modo che scriva direttamente in Pub/Sub Lite.

Esegui la migrazione graduale dei client producer per scrivere 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 producer per scrivere direttamente in Pub/Sub Lite, il connettore non copia più i dati.

Puoi disattivare l'istanza Kafka Connect.

Risoluzione dei problemi delle connessioni Kafka

Poiché i client Kafka comunicano tramite un protocollo di cavo personalizzato, non possiamo fornire messaggi di errore per gli errori in tutte le richieste. Affidati ai codici di errore inviati come parte del messaggio.

Per visualizzare ulteriori dettagli sugli errori che si verificano nel client, imposta il livello di logging per il prefisso org.apache.kafka su FINEST.

Velocità effettiva bassa e backlog in aumento

Esistono diversi motivi per cui potresti notare una bassa velocità effettiva e un backlog crescente. Uno dei motivi 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 la sottoscrizione e la pubblicazione, la velocità effettiva corrispondente per la sottoscrizione e la pubblicazione viene limitata.

Questo errore di velocità effettiva è 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 velocità effettiva per prenotazione.

Puoi visualizzare i grafici sull'utilizzo per la quota di pubblicazione e sottoscrizione per argomento o 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 Autorizzazione argomento non riuscita

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

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

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

Messaggio di errore relativo all'argomento non valido

L'abbonamento tramite l'API Kafka richiede il passaggio del percorso di sottoscrizione completo in tutte le posizioni in cui è previsto un topic nell'API Kafka Consumer.

Ricevi l'errore INVALID_TOPIC_EXCEPTION nel tuo client consumer se non trasmetti un percorso di abbonamento formattato correttamente.

Richiesta non valida se non si utilizzano le prenotazioni

Il supporto del protocollo kafka Wire richiede che a tutti gli argomenti sia associata una prenotazione per poter pagare per l'utilizzo.