Quando dovresti considerare l'adozione di Apache Kafka?
Apache Kafka è una piattaforma distribuita di event streaming da considerare quando più sistemi devono consumare gli stessi eventi in modo indipendente e la cronologia degli eventi deve essere conservata per un certo periodo, così da poter essere riletta in seguito. Anziché sceglierlo semplicemente perché è necessaria l'elaborazione asincrona, è preferibile valutare se servono insieme sottoscrizioni multiple, elaborazione ad alto volume, rielaborazione e tolleranza ai guasti. kafka.apache.org
Kafka viene spesso descritto come una "coda di messaggi", ma questa definizione da sola non ne spiega pienamente il valore principale. Eccelle nella registrazione come eventi dei fatti avvenuti in un sistema, quali la creazione di un ordine, il completamento di un pagamento, un'azione del cliente o un log di sistema, permettendo poi a più applicazioni e sistemi di dati di leggerli al proprio ritmo. Al contrario, se un piccolo servizio deve soltanto elaborare una volta un tipo di attività in background, la complessità operativa di Kafka può superarne i vantaggi.
Questo articolo definisce innanzitutto i problemi risolti da Kafka, quindi esamina i segnali che accrescono il valore della sua adozione e i compromessi implicati dalla sua progettazione e gestione.
Che tipo di piattaforma è Kafka?
Kafka opera intorno ai topic, che registrano eventi. Un evento è un record di dati che rappresenta un fatto avvenuto in un sistema, come "è stato creato un ordine", "un utente ha visualizzato un prodotto" oppure "è stata rilevata la temperatura di un sensore". Le applicazioni che scrivono eventi sono dette producer, mentre quelle che li leggono ed elaborano sono dette consumer. kafka.apache.org
I producer pubblicano eventi nei topic e i consumer si sottoscrivono ai topic che devono leggere. I producer non devono sapere direttamente chi legge i loro eventi. Anche se in seguito vengono aggiunti un servizio di analisi, un servizio di notifiche o un servizio di indicizzazione per la ricerca, il servizio degli ordini può, in linea di principio, pubblicare lo stesso evento relativo all'ordine senza dover aggiungere continuamente codice di integrazione separato per ciascun sistema. Si tratta di accoppiamento debole tra producer e consumer. kafka.apache.org
Inoltre, gli eventi Kafka non scompaiono immediatamente dopo la lettura da parte di un consumer. Vengono archiviati secondo le policy di retention a livello di topic, mentre i consumer gestiscono posizioni che indicano fino a quale punto hanno letto. Ciò consente a un nuovo consumer di leggere record storici o a un consumer esistente di rielaborare da un punto specifico dopo la correzione di un bug. kafka.apache.org
Per questa ragione, è più utile comprendere Kafka come una piattaforma che "mantiene una cronologia di eventi condivisibile" anziché come una piattaforma che si limita a "consegnare messaggi". La retention non implica tuttavia la conservazione eterna dei dati. La durata effettiva della conservazione deve essere stabilita in base alle policy dei topic e alla pianificazione della capacità di storage.
Come interagiscono i componenti principali?
Distinguere i componenti principali di Kafka facilita le decisioni di adozione e l'analisi degli incidenti.
| Componente | Ruolo | Aspetti da valutare per decidere l'adozione |
|---|---|---|
| Topic | Un flusso logico che raggruppa eventi di natura simile | Occorre definire il significato degli eventi, la durata della retention e i permessi di accesso. |
| Partizione | Un'unità di log ordinato che suddivide un topic | Diventa l'unità di throughput, parallelismo e garanzie di ordinamento. |
| Producer | Un'applicazione che scrive eventi in un topic | Occorre determinare le chiavi degli eventi e il comportamento di retry in caso di errore. |
| Consumer | Un'applicazione che legge eventi da un topic | Occorre progettare tenendo conto di elaborazioni duplicate, lag e recupero dagli errori. |
| Gruppo di consumer | Un insieme di consumer che si suddividono il lavoro | Le partizioni vengono ripartite fra i consumer appartenenti allo stesso gruppo. |
| Broker | Un server Kafka che archivia e serve eventi | È l'unità operativa per replica, domini di errore e capacità di storage. |
Un topic è suddiviso in una o più partizioni. Una partizione è un log di eventi ordinato e Kafka usa più partizioni per parallelizzare letture e scritture. Il numero di partizioni non è quindi solo un valore di configurazione: è una decisione progettuale che riflette insieme throughput previsto, parallelismo dei consumer e requisiti di ordinamento. kafka.apache.org
Un gruppo di consumer è un insieme di istanze consumer che svolgono la stessa attività. Per esempio, se varie istanze consumer caricano gli eventi degli ordini in un data warehouse, possono formare un unico gruppo. All'interno del gruppo, ciascuna partizione può essere assegnata a un consumer per distribuire il carico di elaborazione. Al contrario, un servizio di notifiche e un servizio di analisi appartengono a gruppi diversi, così ciascuno può leggere indipendentemente gli stessi eventi relativi agli ordini. kafka.apache.org
Questa struttura favorisce la scalabilità, ma avere in un gruppo più consumer attivi che partizioni non significa che tutti possano elaborare contemporaneamente un maggior numero di partizioni. Non bisogna aspettarsi che il parallelismo cresca senza limiti semplicemente aumentando il numero di istanze. Fin dall'inizio, la pianificazione delle partizioni deve considerare insieme la distribuzione effettiva delle chiavi e le future esigenze di scalabilità.
Quali problemi rendono Kafka una scelta più adatta?
Il segnale più forte a favore dell'adozione è una situazione in cui più sistemi devono consumare un evento per scopi diversi e a velocità differenti. Ciò che conta non è il numero di consumer in sé, ma se i consumer devono poter evolvere indipendentemente dal producer.
Considera un sistema di ecommerce in cui viene creato un ordine. All'inizio può bastare aggiornare soltanto il database degli ordini. In seguito possono essere aggiunti la prenotazione dell'inventario, i flussi di pagamento, le notifiche ai clienti, il rilevamento delle frodi, l'aggiornamento dei dati per ricerca e raccomandazioni e il caricamento per le analisi. Se ogni funzionalità continua a collegarsi al servizio degli ordini attraverso chiamate sincrone, la latenza o il guasto di una funzione può influire sul percorso di elaborazione dell'ordine e le relazioni di integrazione possono diventare complesse.
In questo caso, il servizio degli ordini può pubblicare un evento order created, mentre ciascun sistema a valle legge gli eventi necessari tramite un gruppo di consumer distinto. Un caso d'uso fondamentale di Kafka è la possibilità di aggiungere nuovi consumer senza modificare direttamente il producer esistente. kafka.apache.org
Le seguenti situazioni meritano in particolare una valutazione:
- Esistono eventi centrali, quali modifiche allo stato di ordini, pagamenti o iscrizioni, a cui fanno riferimento diversi sistemi aziendali.
- Dati quali clic degli utenti, visualizzazioni di pagina, log operativi o misurazioni si accumulano continuamente.
- Analisi, notifiche, indicizzazione e caricamento nel data warehouse necessitano ciascuno degli stessi eventi sorgente.
- Il flusso di produzione deve proseguire anche quando i consumer hanno velocità di elaborazione e punti di recupero diversi dopo i guasti.
- Quando emerge un nuovo caso d'uso, collegare direttamente il servizio sorgente a ogni sistema a valle è gravoso.
Una sola di queste condizioni non significa necessariamente che Kafka sia richiesto. Tuttavia, se più condizioni si verificano contemporaneamente e ciascun flusso di dati è destinato a crescere, un'architettura di event streaming può offrire maggiori vantaggi rispetto a semplici integrazioni point-to-point.
In che modo Kafka assorbe grandi volumi e picchi improvvisi?
Kafka è progettato per distribuire letture e scritture di eventi tramite le partizioni, quindi può essere utilizzato per flussi di dati che generano continuamente grandi quantità di eventi. Esempi tipici sono l'aggregazione di log, il tracciamento delle attività degli utenti, le metriche di monitoraggio, le misurazioni IoT e gli eventi transazionali. kafka.apache.org
In questo contesto, il ruolo di Kafka è ridurre l'accoppiamento che richiede che velocità di produzione e consumo coincidano sempre. Per esempio, se gli eventi raggiungono un picco in un certo periodo, i consumer potrebbero non riuscire a elaborarli tutti immediatamente. Se gli eventi sono conservati, i consumer possono recuperare l'arretrato. Questo dà ai consumer margine per adeguare indipendentemente la propria velocità di elaborazione senza bloccare i producer.
Ciò non significa che il lag scompaia. Significa invece che il lag può essere gestito come arretrato accumulato di eventi registrati. Il consumer lag è una metrica operativa che mostra quanto un consumer sia indietro rispetto agli eventi più recenti. Se il lag continua ad aumentare, occorre indagare sulle prestazioni del consumer, sulle dipendenze esterne, sulla distribuzione delle partizioni e sui retry in caso di errore. Kafka fornisce metriche di monitoraggio basate su JMX e gli ambienti di produzione devono considerare anche la sicurezza dei percorsi di accesso al monitoraggio. kafka.apache.org
Nel valutare i requisiti di throughput, è preferibile separare le seguenti domande invece di affermare genericamente che "il traffico è elevato":
- Quanti eventi si verificano al secondo o in ciascun periodo di tempo?
- Quali sono le dimensioni medie e massime di un singolo evento?
- Quanto durano i picchi?
- Quanto consumer lag è accettabile?
- Quanto rapidamente deve essere elaborato l'arretrato dopo un'interruzione?
- Per quanto tempo devono essere conservati gli eventi?
Rispondere a queste domande evidenzia che numero di partizioni, capacità di storage, replica, scalabilità dei consumer e tempo di rielaborazione sono aspetti collegati. Kafka fornisce una base per un throughput elevato, ma prestazioni e costi effettivi variano in base alla dimensione degli eventi, allo sbilanciamento delle chiavi, alle policy di retention e ai colli di bottiglia nella logica dei consumer.
Perché la rielaborazione è un motivo importante per adottare Kafka?
L'elaborazione in tempo reale è il lavoro che produce un risultato subito dopo l'arrivo di un evento. Alcuni esempi sono l'aggiornamento dell'inventario dopo un ordine, il rilevamento di transazioni che soddisfano determinate condizioni o l'aggregazione di metriche a livello di minuto. Tuttavia, rielaborare dati storici può essere un requisito importante quanto l'elaborazione in tempo reale.
La rielaborazione è necessaria per molte ragioni. Dopo aver corretto un bug nel codice del consumer, puoi ricreare risultati mancanti o calcolati erroneamente. Quando vengono introdotte nuove regole analitiche, puoi creare dati derivati dalla cronologia degli eventi esistente. Se il consumo si interrompe a causa di un guasto, puoi ripristinarlo rileggendo dall'ultima posizione elaborata. In Kafka, gli eventi non vengono rimossi subito dopo il consumo e possono essere riletti entro la policy di retention. kafka.apache.org
Per esempio, supponi che gli eventi di comportamento dei clienti siano stati inizialmente usati soltanto per aggregare il conteggio giornaliero dei visitatori. Se in seguito è necessaria un'analisi delle conversioni per canale di acquisizione, un gruppo di consumer separato può leggere gli eventi storici e generare nuovi risultati analitici, a condizione che gli eventi includano i campi necessari e che il periodo di retention sia ancora attivo. Il lavoro può essere isolato senza interrompere il consumer di aggregazione esistente né eseguire query su larga scala sul database del servizio sorgente.
Tuttavia, la possibilità di rielaborare non risolve da sola i problemi di qualità dei dati. Se gli eventi non dispongono degli identificatori necessari, di timestamp di occorrenza o informazioni di versione, oppure se il significato dello schema è cambiato senza gestione della compatibilità, è difficile produrre risultati affidabili anche quando è possibile leggere i dati storici. Inoltre, un requisito di rielaborazione di dati più vecchi del periodo di retention potrebbe non essere soddisfatto dai soli topic Kafka. Pertanto, se la rielaborazione è una ragione per l'adozione, determina prima "cosa verrà riprodotto, per quanto tempo e con quale significato".
Kafka può anche collegare database e sistemi esterni?
Kafka può essere utilizzato non soltanto per consegnare eventi fra servizi, ma anche come flusso centrale per pipeline di dati. Il change data capture (CDC) è un approccio per inviare in un flusso di dati le modifiche che avvengono in un database e può essere considerato quando i cambiamenti nei dati operativi devono riflettersi in analisi, ricerca o altri servizi. Kafka Connect fornisce un'API e un modello di connector per integrazioni ricorrenti di input e output di dati con sistemi esterni. kafka.apache.org
Esempi in cui questa configurazione può essere utile includono:
- Inviare continuamente le modifiche da un database operativo a un archivio analitico.
- Raccogliere log e metriche da più applicazioni in un flusso condiviso.
- Riflettere in un indice o in una tabella derivata di un altro archivio i dati generati in un sistema.
- Costruire flussi di dati continui fra ambienti on-premises e cloud.
L'uso dei connector non elimina differenze nei modelli di dati, semantica delle eliminazioni, problemi di ordinamento, gestione degli accessi o limiti di scrittura dei sistemi di destinazione. In particolare, quando si usano le modifiche del database come eventi, devi distinguere fra il fatto che "una riga è cambiata" e l'evento aziendale che "un ordine è stato confermato". Il primo è più vicino a una modifica dello storage, mentre il secondo è un evento di business con significato di dominio. Trattarli come equivalenti può portare i consumer a dipendere eccessivamente dalla struttura di storage.
L'adozione di Kafka per pipeline di dati è quindi più affidabile quando fa più che ridurre il numero di connessioni: quando chiarisce anche proprietari dei dati, schemi e responsabilità delle modifiche.
In quale misura è garantito l'ordinamento e perché la progettazione delle chiavi è importante?
In Kafka, l'ordinamento degli eventi è garantito all'interno di una partizione, non nell'intero topic. Le partizioni multiple consentono l'elaborazione parallela, ma non esiste un unico ordinamento globale fra esse. kafka.apache.org
Per esempio, se lo stato di un ordine deve essere elaborato nella sequenza created, payment completed e shipping started, puoi usare l'ID dell'ordine come chiave affinché gli eventi per lo stesso ordine vengano registrati nella stessa partizione. Questo consente di usare l'ordine dei record all'interno di quell'ordine come unità di riferimento. Anche le modifiche di stato dei clienti possono essere progettate in modo simile usando l'ID cliente come chiave.
Al contrario, se tutti gli eventi degli ordini devono essere elaborati uno alla volta secondo un ordine cronologico complessivo, potrebbe essere di fatto necessaria una scelta vicina a una singola partizione. In tal caso l'ordinamento può diventare più semplice, ma la capacità di elaborazione parallela è limitata. Ordinamento globale e parallelismo elevato non sono proprietà ottenibili insieme senza limiti.
La selezione delle chiavi presenta un altro problema. Se un particolare cliente o dispositivo genera un numero insolitamente alto di eventi, tale chiave può concentrarsi in una partizione. Ciò può essere considerato key skew e solo alcuni consumer potrebbero diventare eccessivamente occupati. Le chiavi dovrebbero quindi rappresentare l'unità di business che richiede ordinamento, ma devono anche essere valutate per assicurare che non generino uno sbilanciamento eccessivo nella distribuzione dei dati prevista.
Quando documenti i requisiti di ordinamento, non fermarti a dire che "l'ordinamento è importante". È preferibile renderli specifici come segue:
- All'interno di quale ambito identificativo è richiesto l'ordinamento?
- È richiesto l'ordine in base al tempo dell'evento o l'ordine di scrittura del record?
- Come saranno gestiti gli eventi arrivati in ritardo?
- Quale errore di business si verifica se gli eventi sono fuori ordine?
- È necessario l'ordinamento globale anche a costo di ridurre il parallelismo?
Le risposte determinano la separazione dei topic, le chiavi, il numero di partizioni e la logica dei consumer.
Come devono essere compresi l'elaborazione duplicata e l'elaborazione exactly-once?
I consumer Kafka necessitano di una progettazione che presupponga per impostazione predefinita l'elaborazione at-least-once, considerando guasti e retry. Per esempio, se un consumer termina l'elaborazione di un evento ma si arresta prima di registrare la propria posizione di elaborazione, potrebbe leggere di nuovo lo stesso evento dopo il ripristino. È pertanto possibile l'elaborazione duplicata dello stesso evento. kafka.apache.org
La soluzione pratica consiste nel rendere idempotente la logica del consumer. L'idempotenza è la proprietà di produrre lo stesso risultato finale anche quando la stessa operazione viene eseguita più volte. Per esempio, un'operazione come set the status of order 123 to delivered può essere progettata in modo che ripetere il medesimo aggiornamento di stato non modifichi sostanzialmente il risultato. Al contrario, un'operazione che unconditionally adds 1,000 points può produrre un risultato diverso se riceve due volte lo stesso evento, quindi richiede una strategia di deduplicazione, come la registrazione degli ID evento o l'uso di vincoli univoci nell'archivio di destinazione.
Quando collega lettura, elaborazione e scrittura all'interno di topic Kafka, Kafka supporta configurazioni di elaborazione exactly-once tramite transazioni e il livello di isolamento read_committed. Tuttavia, ciò non deve essere inteso come se ogni effetto esterno avvenisse automaticamente una sola volta. Gli effetti collaterali esterni a Kafka, quali aggiornamenti di database esterni, invio di email o chiamate API di pagamento, richiedono coordinamento con il sistema di destinazione e una progettazione separata. kafka.apache.org
Pertanto, prima dell'adozione, poni le seguenti domande per ogni consumer:
- Cosa accade se lo stesso evento viene elaborato due volte?
- Ogni evento dispone di un ID utilizzabile per rilevare i duplicati?
- L'archivio dei risultati impedisce i duplicati o supporta aggiornamenti sicuri?
- Quali sono i criteri di retry quando una chiamata esterna fallisce o la sua risposta non è chiara?
- Come saranno gestiti gli effetti collaterali già eseguiti durante la rielaborazione?
Se Kafka viene adottato senza rispondere a queste domande, il trasporto può essere affidabile mentre risultati aziendali duplicati o incoerenti rimangono difficili da rilevare.
Tolleranza ai guasti e durabilità sono garantite automaticamente?
Kafka può essere configurato per prepararsi ai guasti dei broker replicando le partizioni dei topic. Questo può essere un vantaggio importante per flussi di dati in cui sono rilevanti partizioni replicate, operatività continuativa durante i guasti dei broker e distribuzione del carico fra molti consumer. kafka.apache.org
Tuttavia, la conclusione che "i dati non possono mai essere persi perché usiamo Kafka" non è corretta. Durabilità e disponibilità effettive dipendono dal fattore di replica, dalle impostazioni di acknowledgment dei producer, dall'ambito dei guasti che possono verificarsi contemporaneamente, dalle policy di retention e dalle procedure operative. Anche in presenza di repliche, i risultati possono differire dalle aspettative se le repliche sono collocate nello stesso dominio di errore, se impostazioni importanti non soddisfano il livello richiesto o se gli operatori non hanno validato le procedure di ripristino. kafka.apache.org
È utile scrivere esplicitamente i requisiti di tolleranza ai guasti. Per esempio: "La produzione e il consumo degli eventi degli ordini devono continuare se un broker si arresta", "I duplicati sono accettabili dopo il guasto di un consumer, ma le omissioni no", oppure "Gli eventi entro un periodo specificato devono poter essere rielaborati". Questi requisiti determinano non solo replica e acknowledgment, ma anche idempotenza dei consumer, monitoraggio, capacità di storage ed esercitazioni di ripristino.
Poiché una cronologia rielaborabile può diventare un'importante risorsa di dati, dovresti valutare separatamente se i topic contengono informazioni personali o dati aziendali sensibili. Il controllo degli accessi e la sicurezza delle interfacce operative non sono attività successive e separate dalla progettazione del flusso di dati. Le operazioni Kafka richiedono inoltre impostazioni di sicurezza per l'accesso amministrativo, incluso il monitoraggio. kafka.apache.org
Kafka è sempre migliore di una semplice coda di lavoro o di un'API sincrona?
No. Kafka non sostituisce automaticamente ogni requisito asincrono. Se il requisito è più vicino a "convertire un'immagine una volta", "generare un report e restituire solo il risultato" o "far prelevare ed elaborare un job a un consumer", e retention a lungo termine, sottoscrizioni multiple e rielaborazione non sono centrali, una coda di lavoro più semplice o un servizio gestito può essere più adatto in termini di costo e overhead operativo. I principali punti di forza di Kafka emergono quando si combinano flussi di eventi su larga scala, più consumer indipendenti e riuso della cronologia conservata. kafka.apache.org
Anche le API sincrone hanno un ruolo diverso. Una richiesta in cui un utente fa clic su un pulsante e necessita di un risultato immediato di successo o errore si adatta naturalmente a un'API request-response. Una volta completata quella richiesta, il flusso che informa i sistemi a valle del fatto può essere separato in eventi. In altre parole, anziché scegliere esclusivamente chiamate sincrone o Kafka, è spesso più appropriato usare le API per le interazioni utente e gli eventi per il fan-out asincrono a valle.
Il seguente confronto può semplificare la decisione:
| Esigenza principale | Approccio da valutare per primo | Condizioni in cui Kafka diventa particolarmente vantaggioso |
|---|---|---|
| Elaborare un job una volta | Coda di lavoro semplice o servizio asincrono gestito | Quando più sistemi indipendenti devono leggere lo stesso risultato del job o evento |
| Richiesta che necessita di un risultato immediato | API sincrona | Quando attività a valle diverse devono essere distribuite in fan-out asincrono dopo il completamento della richiesta |
| Trasferire dati fra sistemi | Integrazione diretta o approccio file/batch | Quando coesistono flusso continuo, più destinazioni e requisiti di rielaborazione |
| Raccogliere dati di log, comportamento o misurazione | Strumenti di raccolta e storage | Quando più consumer devono elaborare in modo indipendente flussi ad alto volume |
| Gestire la cronologia delle modifiche di stato | Database aziendale | Quando gli eventi devono essere riprodotti per ricostruire stato o dati derivati |
Questa tabella non è una regola assoluta di selezione del prodotto. Anche la piattaforma esistente di un team, la disponibilità di servizi gestiti, le policy di sicurezza e il personale operativo influenzano la decisione. L'aspetto chiave è la natura del flusso di dati che stai cercando di risolvere, non un elenco di funzionalità.
Cosa deve essere predisposto per operatività e governance?
L'adozione di Kafka non si limita all'aggiunta di una libreria applicativa. Richiede anche un modello operativo per gestire continuamente topic, partizioni, replica, retention, permessi di accesso, monitoraggio e capacità. Kafka fornisce metriche JMX, ma le informazioni operative creano valore reale solo quando stabilisci quali metriche attivano gli avvisi, chi risponde e come avviene il ripristino. kafka.apache.org
Innanzitutto, i contratti degli eventi devono essere gestiti. Un contratto di evento comprende non solo nomi dei campi e tipi di dati, ma anche il significato aziendale di ciascun campo, se sia facoltativo, come vengono gestite le modifiche di versione e la distinzione fra momento di produzione e momento di occorrenza. Sono necessari standard di compatibilità affinché i consumer non operino silenziosamente in modo errato quando un producer elimina un campo o ne modifica il significato.
Successivamente, le policy dei topic devono essere chiare. Per ciascun topic, devi decidere quanto segue:
- Quali eventi contiene e chi ne è responsabile.
- Quali sono il periodo di retention e i criteri per la capacità di storage.
- Quali requisiti di ordinamento e throughput hanno determinato il numero di partizioni e la chiave.
- Quale livello di guasto sono destinati a gestire replica e acknowledgment dei producer.
- Chi può produrre e consumare e come vengono protetti i dati sensibili.
- A quale livello di consumer lag iniziano indagine e risposta.
Anche la pianificazione della capacità è importante. Periodi di retention più lunghi o una replica maggiore incrementano i requisiti di storage. Se i consumer devono poter rielaborare dopo essere stati fermi a lungo, la cronologia potrebbe dover essere conservata di conseguenza. Viceversa, una retention breve può ridurre i costi, ma limita l'intervallo di dati storici disponibile per il ripristino dopo interruzioni o per l'aggiunta di nuovi consumer. Questa scelta definisce non solo i costi, ma anche l'ambito delle capacità del prodotto e della recuperabilità.
Nelle organizzazioni in cui la responsabilità operativa non è chiara, una piattaforma Kafka condivisa può invece aumentare i problemi di dipendenza. Concordare quali modifiche e incidenti siano responsabilità dei proprietari dei topic, degli operatori della piattaforma, dei responsabili della sicurezza e dei team di sviluppo dei consumer è importante quanto la configurazione tecnica.
Quali domande dovresti usare per decidere prima dell'adozione?
La domanda che distingue meglio se adottare Kafka non è: "Abbiamo bisogno di messaggi asincroni?" Una domanda più accurata è: Più consumer indipendenti devono leggere continuamente una cronologia di eventi su larga scala e rielaborarla dopo lag o guasti? Se la risposta è chiaramente sì, i requisiti sono probabilmente allineati alle caratteristiche fondamentali di Kafka. kafka.apache.orgkafka.apache.org
Puoi usare la seguente checklist quando avvii discussioni sull'adozione:
- Consumer multipli: Più sistemi devono attualmente, o nel prossimo futuro, utilizzare in modo indipendente lo stesso evento?
- Valore della cronologia: Gli eventi devono essere conservati dopo il consumo e riletti per correzioni di bug, audit o nuove analisi?
- Scala di elaborazione: L'acquisizione sostenuta di grandi volumi o i picchi di traffico richiedono di disaccoppiare produzione e consumo?
- Ambito di ordinamento: Il problema può essere risolto con un ordinamento per chiave, come cliente o ordine, anziché con l'ordinamento globale?
- Gestione dei duplicati: Ogni consumer può elaborare o identificare in sicurezza gli eventi duplicati?
- Gestione dei contratti: Esistono proprietari e processi per gestire modifiche agli schemi e ai significati degli eventi?
- Prontezza operativa: Esiste un responsabile in grado di osservare e rispondere a lag, capacità di storage, guasti dei broker, permessi e rielaborazione?
- Confronto con le alternative: Il requisito potrebbe essere soddisfatto più semplicemente soltanto tramite distribuzione di job a un singolo consumer o request-response?
Non tutti gli elementi devono essere perfetti fin dall'inizio per adottare Kafka. Tuttavia, se le esigenze degli elementi da 1 a 5 sono forti mentre manca la preparazione per gli elementi 6 e 7, può esserci un ampio divario tra possibilità tecnica e sistema realmente gestibile. Può essere utile validare prima contratti degli eventi, gestione dei duplicati, osservazione del lag e rielaborazione in un unico flusso di dati di piccola portata.
Conclusione: Kafka è potente quando la cronologia degli eventi deve essere condivisa
Apache Kafka non è soltanto uno strumento per spostare messaggi in modo asincrono; è una piattaforma che conserva flussi di eventi condivisi da più sistemi e consente loro di consumarli indipendentemente. Il valore della sua adozione aumenta negli ambienti che necessitano contemporaneamente di sottoscrizioni multiple agli stessi eventi, elaborazione parallela di flussi di dati ad alto volume, recupero dopo il lag e rielaborazione di record storici. kafka.apache.orgkafka.apache.org
Al contrario, alternative più semplici possono essere più adatte per requisiti che affidano lavoro una tantum a un singolo consumer, richieste incentrate su risposte immediate o flussi ridotti in cui l'overhead operativo deve essere minimizzato. Quando scegli Kafka, valuta non solo il throughput, ma anche se sei pronto a gestire ordinamento a livello di partizione, elaborazione duplicata, policy di retention, contratti degli eventi, sicurezza e osservabilità. Più queste condizioni sono presenti, più Kafka può diventare una base per ridurre l'accoppiamento tra servizi ed espandere le modalità di utilizzo dei dati.