Apache Kafka vs. Apache Pulsar: come scegliere

Oggigiorno, la messaggistica pub / sub estremamente scalabile è praticamente sinonimo di Apache Kafka. Apache Kafka continua ad essere la scelta solida, open source e ideale per le applicazioni di streaming distribuite, sia che tu stia aggiungendo qualcosa come Apache Storm o Apache Spark per l'elaborazione o utilizzando gli strumenti di elaborazione forniti da Apache Kafka stesso. Ma Kafka non è l'unico gioco in città.

Sviluppato da Yahoo e ora un progetto di Apache Software Foundation, Apache Pulsar sta andando per la corona di messaggistica che Apache Kafka ha indossato per molti anni. Apache Pulsar offre il potenziale di un throughput più veloce e una latenza inferiore rispetto ad Apache Kafka in molte situazioni, insieme a un'API compatibile che consente agli sviluppatori di passare da Kafka a Pulsar con relativa facilità. 

Come scegliere tra il venerabile e coraggioso Apache Kafka e il nuovo Apache Pulsar? Diamo un'occhiata alle loro principali offerte open source e cosa portano le edizioni enterprise dei manutentori principali.

Apache Kafka

Sviluppato da LinkedIn e rilasciato come open source nel 2011, Apache Kafka si è diffuso in lungo e in largo, diventando praticamente la scelta predefinita per molti quando si pensa di aggiungere un bus di servizio o un sistema pub / sub a un'architettura. Dal debutto di Apache Kafka, l'ecosistema Kafka è cresciuto notevolmente, aggiungendo Scheme Registry per applicare schemi nella messaggistica Apache Kafka, Kafka Connect per un facile streaming da altre fonti di dati come database a Kafka, Kafka Streams per l'elaborazione del flusso distribuito e, più recentemente, KSQL per eseguire query di tipo SQL su argomenti Kafka. (Un argomento in Kafka è il nome di un particolare canale.)

Il caso d'uso standard per molte pipeline in tempo reale costruite negli ultimi anni è stato quello di inserire i dati in Apache Kafka e quindi utilizzare un processore di flusso come Apache Storm o Apache Spark per inserire dati, eseguire ed elaborare e quindi pubblicare output su un altro argomento per il consumo a valle. Con Kafka Streams e KSQL, tutte le tue esigenze di pipeline di dati possono essere gestite senza dover lasciare il progetto Apache Kafka in qualsiasi momento, anche se, ovviamente, puoi comunque utilizzare un servizio esterno per elaborare i tuoi dati, se necessario.

Sebbene Apache Kafka sia sempre stato molto amichevole dal punto di vista di uno sviluppatore, è stato un po 'un miscuglio operativo. Ottenere un piccolo cluster attivo e funzionante è relativamente facile, ma il mantenimento di un cluster di grandi dimensioni è spesso irto di problemi (ad esempio, lo scambio di partizioni leader dopo un errore del broker Kafka).

Inoltre, l'approccio adottato per supportare il multi-tenancy, tramite un'utilità chiamata MirrorMaker, è stato un modo sicuro per convincere gli SRE a strapparsi i capelli. In effetti, MirrorMaker è considerato un problema tale che aziende come Uber hanno creato il proprio sistema per la replica attraverso i data center (uReplicator). Confluent include Confluent Replicator come parte della sua offerta aziendale di Apache Kafka. Parlando come qualcuno che ha dovuto mantenere una configurazione MirrorMaker, è un peccato che Replicator non faccia parte della versione open source.

Tuttavia, non sono sicuramente tutte brutte notizie sul fronte operativo. È stato fatto molto lavoro nell'attuale serie Apache Kafka 1.x per ridurre alcuni dei problemi legati all'esecuzione di un cluster. Recentemente sono state apportate alcune modifiche che consentono al sistema di eseguire grandi cluster di oltre 200.000 partizioni in modo più semplificato e miglioramenti come l'aggiunta di code "dead letter" a Kafka Connect rendono l'identificazione e il ripristino da problemi nelle origini dati e nei sink Più facile. È probabile che nel 2019 vedremo anche il supporto a livello di produzione per l'esecuzione di Apache Kafka su Kubernetes (tramite grafici Helm e un operatore Kubernetes).

Nel 2014, tre degli sviluppatori originali di Kafka (Jun Rao, Jay Kreps e Neha Narkhede) hanno formato Confluent, che fornisce funzionalità aziendali aggiuntive nella sua piattaforma Confluent come il già citato Replicator, Control Center, plug-in di sicurezza aggiuntivi e le consuete offerte di supporto e servizi professionali. Confluent ha anche un'offerta cloud, Confluent Cloud, che è un servizio Confluent Platform completamente gestito che viene eseguito su Amazon Web Services o Google Cloud Platform, se preferisci non affrontare da solo alcuni dei costi generali operativi dei cluster in esecuzione.

Se sei bloccato in AWS e utilizzi i servizi Amazon, tieni presente che Amazon ha introdotto un'anteprima pubblica di Amazon Managed Streaming for Kafka (MSK), un servizio Kafka completamente gestito all'interno dell'ecosistema AWS. (Nota anche che Amazon MSK non è fornito in collaborazione con Confluent, quindi l'esecuzione di MSK non ti offrirà tutte le funzionalità di Confluent Platform, ma solo quelle fornite nell'open source Apache Kafka.)

Apache Pulsar

Data la predilezione di Apache Software Foundation per la raccolta di progetti che sembrano duplicare funzionalità (preferiresti Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark o Apache Storm per le tue esigenze di elaborazione dati con grafi aciclici diretti?), Lo faresti perdonati se guardi oltre gli annunci su Apache Pulsar che diventa un progetto Apache di primo livello prima di selezionare Apache Kafka come opzione affidabile per le tue esigenze di messaggistica. Ma Apache Pulsar merita uno sguardo.

Apache Pulsar è nato in Yahoo, dove è stato creato per soddisfare le esigenze dell'organizzazione che altre offerte open source non erano in grado di fornire al momento. Di conseguenza, Pulsar è stato costruito da zero per gestire milioni di argomenti e partizioni con pieno supporto per la replica geografica e il multi-tenancy.

Sotto le coperte, Apache Pulsar utilizza Apache BookKeeper per mantenere le sue esigenze di archiviazione, ma c'è una svolta: Apache Pulsar ha una funzionalità chiamata Tiered Storage che è piuttosto qualcosa. Uno dei problemi dei sistemi di registro distribuiti è che, sebbene si desideri che i dati rimangano nella piattaforma di registro il più a lungo possibile, le unità disco non sono di dimensioni infinite. Ad un certo punto, prendi la decisione di eliminare quei messaggi o di archiviarli altrove, dove possono essere potenzialmente riprodotti attraverso la pipeline di dati se necessario in futuro. Che funziona, ma può essere operativamente complicato. Apache Pulsar, tramite Tiered Storage, può spostare automaticamente i dati più vecchi su Amazon S3, Google Cloud Storage o Azure Blog Storage e continuare a fornire una visualizzazione trasparente al client;il client può leggere dall'inizio del tempo proprio come se tutti i messaggi fossero presenti nel registro.

Proprio come Apache Kafka, Apache Pulsar ha sviluppato un ecosistema per l'elaborazione dei dati (sebbene fornisca anche adattatori per Apache Spark e Apache Storm). Pulsar IO è l'equivalente di Kafka Connect per il collegamento ad altri sistemi di dati sia come sorgenti che come sink e Pulsar Functions fornisce funzionalità di elaborazione dati. Le query SQL vengono fornite utilizzando un adattatore per il motore Presto open source di Facebook.

Un aspetto interessante è che le funzioni Pulsar e Pulsar IO vengono eseguite all'interno di un cluster Pulsar standard anziché essere processi separati che potrebbero potenzialmente essere eseguiti ovunque. Sebbene questa sia una riduzione della flessibilità, rende le cose molto più semplici da un punto di vista operativo. (Esiste una modalità di esecuzione locale che potrebbe essere utilizzata in modo improprio per eseguire funzioni al di fuori del cluster, ma la documentazione fa di tutto per dire "Non farlo!")

Apache Pulsar offre anche diversi metodi per eseguire le funzioni all'interno del cluster: possono essere eseguiti come processi separati, come contenitori Docker o come thread in esecuzione nel processo JVM di un broker. Ciò si collega al modello di distribuzione per Apache Pulsar, che supporta già Kubernetes o Mesosphere DC / OS in produzione. Una cosa da tenere presente è che le funzioni Pulsar, Pulsar IO e SQL sono aggiunte relativamente nuove ad Apache Pulsar, quindi aspettati qualche spigolo vivo se le usi.

Esiste anche un wrapper API limitato, solo Java e compatibile con Kafka, in modo da poter potenzialmente integrare le applicazioni Apache Kafka esistenti in un'infrastruttura Apache Pulsar. Questo è probabilmente più adatto per test esplorativi e un piano di migrazione provvisorio rispetto a una soluzione di produzione, ma è bello averlo!

In modo simile a Confluent, gli sviluppatori di Apache Pulsar di Yahoo (Matteo Merli e Sijie Guo) hanno formato una società spinoff, Streamlio, di cui sono co-fondatori insieme ai creatori di Apache Heron (Karthik Ramasamy e Sanjeev Kulkarni) . L'offerta aziendale di Streamlio include il consueto supporto commerciale e soluzioni di servizi professionali, insieme a una console di gestione closed-source, ma cose come il supporto multi-tenancy efficiente e duraturo fanno parte del prodotto open source principale.

Apache Kafka o Apache Pulsar?

Apache Kafka è un prodotto maturo, resistente e testato in battaglia. Ha client scritti in quasi tutte le lingue più diffuse, nonché una serie di connettori supportati per diverse origini dati in Kafka Connect. Con i servizi gestiti offerti da Amazon e Confluent, è facile creare, eseguire e mantenere un cluster Kafka di grandi dimensioni, molto più semplice rispetto agli anni precedenti. Continuo a utilizzare Apache Kafka in nuovi progetti e probabilmente lo farò per molti anni a venire.

Tuttavia, se hai intenzione di costruire un sistema di messaggistica che deve essere multi-tenant o georeplicato dall'inizio o che ha esigenze di archiviazione dei dati di grandi dimensioni, oltre alla necessità di interrogare ed elaborare facilmente tutti quei dati, non importa come molto tempo fa, allora suggerisco di calciare le gomme di Apache Pulsar. Sicuramente si adatta ad alcuni casi d'uso con cui Apache Kafka può lottare, mentre funziona bene anche in termini di funzionalità di base di cui hai bisogno da una piattaforma di log distribuita. E se non ti dispiace essere all'avanguardia in termini di documentazione e risposte alle domande di Stack Overflow, tanto meglio!