Migrazione da Kafka a Pub/Sub Lite

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

Panoramica di Pub/Sub Lite

Pub/Sub Lite è un servizio di messaggistica ad alto volume creato a basso costo operativo. Pub/Sub Lite offre risorse a livello di zona e di regione Archiviazione e capacità sottoposta a 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, ci sono e le differenze di affidabilità tra Pub/Sub Pub/Sub Lite in termini di della 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. Entro Pub/Sub Lite, puoi scegliere di creare un'istanza Argomento Lite. Gli argomenti regionali Pub/Sub Lite archiviano i dati in tra 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à di 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 consumer in Kafka che si connette a un solo argomento.

  • Iscritto. Un client di Pub/Sub Lite che riceve i messaggi. da un argomento Lite e da una sottoscrizione specificata. Un abbonamento possono avere più client sottoscrittori. In tal caso, i messaggi vengono il bilanciamento del carico tra i client sottoscrittori. In Kafka, un sottoscrittore è chiamato consumatore.

  • Editore. Un'applicazione che crea messaggi e invia (pubblica) a uno specifico argomento Lite. 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 siano irrilevanti 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 al momento non supporta pubblicazione transazionale o compattazione dei log, sebbene sia 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 o l'utilizzo di una soluzione Kafka gestita come Confluent Cloud. Se nessuna di queste soluzioni è disponibile, puoi valutare l'uso un database scalabile orizzontalmente, come Cloud Spanner.

Flussi Kafka

Stream Kafka è un sistema di elaborazione dati basato su Kafka. Anche se consente un'iniezione di client consumer, richiede l'accesso a tutti gli amministratori operazioni. I flussi Kafka utilizzano anche le proprietà dei database transazionali di Kafka per l'archiviazione dei metadati interni. Pub/Sub Lite attualmente non può essere utilizzato per applicazioni Kafka Streams.

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

Monitoraggio

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

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 Kafka è limitata dalla capacità delle macchine su cui i broker in esecuzione. 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 proprietà configurabile dell'argomento. La capacità di velocità effettiva si basa dell'account di servizio prenotazione, e limiti intrinseci o configurati per ogni 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-rest e in transito. Scopri di più sull'autenticazione Pub/Sub Lite nel Flusso di lavoro della migrazione, più avanti in questo documento.

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

Kafka ha molte opzioni di configurazione che controllano la struttura degli argomenti. limiti e le proprietà dell'intermediario. Alcuni dei più comuni sono utili per l'importazione dati sono trattati in questa sezione, con i loro equivalenti in in Pub/Sub Lite. Poiché Pub/Sub Lite è un per un sistema gestito, non c'è bisogno molte proprietà degli intermediari.

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 Protocollo del cavo del produttore. 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

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 Protocollo di comunicazione del consumatore. Alcune proprietà modificano il comportamento delle librerie client Cloud consumer. alcuni dei più comuni sono descritti nella tabella seguente.

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 quello di Kafka. I costi per un cluster Kafka on-premise cloud includono il costo di macchine, disco, networking, messaggi in entrata e messaggi. Include anche i costi generali per la gestione e il mantenimento sistemi e la 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 del costo dell'archiviazione di cui è stato eseguito il provisioning. Paghi esattamente per le risorse che oltre ai costi per i messaggi in uscita. Puoi utilizzare lo Calcolatore prezzi per fornire una stima dei costi.

Flusso di lavoro della migrazione

Per eseguire la migrazione di un argomento da un cluster Kafka Segui queste istruzioni in Pub/Sub Lite.

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 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 sottoscrizione corrispondente 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 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 stai eseguendo 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 quanto segue JAAS e SASL come parametri per l'autenticazione 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 un'autenticazione OAUTHBEARER solo configurazione che utilizza uno script collaterale Python. Queste versioni includono la versione di gennaio 2022 Java 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 le varie autenticazioni server-to-server meccanismi 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 avere il pubsublite.locations.openKafkaStream l'autorizzazione per il progetto Google Cloud in uso e la località ti stai collegando. Publisher Pub/Sub Lite (roles/pubsublite.publisher) e sottoscrittore Pub/Sub Lite (roles/pubsublite.subscriber) ruoli hanno questo l'autorizzazione richiesta. Aggiungi questi ruoli al tuo principal.

    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 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 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 installati per impostazione predefinita) come segue:

    base64 < my_service_account.json > password.txt
    

    Puoi usare 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 del gruppo Pub/Sub.

Se vuoi assicurarti che l'affinità di partizione non sia interessata dalla migrazione assicurati che l'argomento kafka e l'argomento Pub/Sub Lite abbiano lo stesso numero di partizioni e che pubsublite.ordering.mode è impostata su KAFKA. In questo modo il connettore esegue il routing dei messaggi la partizione Pub/Sub Lite con lo stesso indice della partizione kafka in cui erano state pubblicate inizialmente.

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 consumer, un abbonamento è una risorsa esplicita ed è associati a un solo argomento. A causa di questa differenza, qualsiasi punto della API Kafka Consumer che richiede il passaggio di un topic, la sottoscrizione completa e il percorso di conversione.

Oltre alle configurazioni SASL per il client Kafka, sono necessarie anche le impostazioni seguenti 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 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 sia la vecchia versione nuovi clienti in parallelo, per tutto il tempo necessario per verificare il loro comportamento, e poi distruggere i vecchi clienti consumer.

Esegui la migrazione dei producer

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 si trova l'argomento Pub/Sub Lite.

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

Esegui la migrazione graduale dei client producer per scrivere nel all'argomento Pub/Sub Lite anziché all'argomento Kafka.

Riavvia i client producer per acquisire nuove configurazioni.

Disattiva Kafka Connect

Dopo aver eseguito la migrazione di tutti i producer a cui 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 rete su misura, 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 Impostando 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 velocità effettiva bassa e un arretrato crescente. Uno dei motivi potrebbe essere la capacità insufficiente.

Puoi configurare la capacità di velocità effettiva a livello di argomento o usando le prenotazioni. Se la capacità di velocità effettiva insufficiente per la sottoscrizione e di pubblicazione, la velocità effettiva corrispondente la sottoscrizione e la pubblicazione sono limitate.

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 la partizione è stato raggiunto il limite di velocità effettiva massima.

  • 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 il capacità di velocità effettiva per argomento o prenotazione.

Messaggio di errore Autorizzazione argomento non riuscita

La pubblicazione mediante l'API Kafka richiede che l'agente di servizio Lite abbia le autorizzazioni appropriate 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 all'argomento non valido

La sottoscrizione tramite l'API Kafka richiede il passaggio del percorso di sottoscrizione completo tutte le posizioni 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 se non si utilizzano le prenotazioni

Il supporto del protocollo Kafka Cable richiede che a tutti gli argomenti sia associata una prenotazione per addebitare l'utilizzo.