
ciao è questo lavoro va bene parlare post-pranzo
So come funziona grazie a Katie
ok io tutti sono Neha RK day e il
co-fondatore CTO al confluente uno dei
creatori di Kafka e questo discorso è di circa
applicazioni o micro sorgenti anche se io
specificamente evitato di usare quella parola in
il mondo dell’elaborazione del flusso è questo
importante perché illimitato su ordinato
i set di dati su larga scala sono sempre di più
comune oggi se si tratta di utilizzo mobile
statistiche o reti di sensori o semplicemente
i dati del flusso di dati del blog web sono ovunque
e c’è una spinta enorme verso ottenere
risultati più rapidi, ma per molto tempo
ho osservato un processo di elaborazione sei tu
sapere come interpretato come qualcosa che
è solo un livello MapReduce più veloce
qualcosa che è molto più vicino al tuo
Hadoop di
e il tuo data warehouse è qualcosa
ciò richiede un intero cluster da eseguire e
sai in particolare per problemi di nicchia
come l’apprendimento automatico più veloce o più veloce
analisi ma nella mia esperienza di
lavorando in questo settore per gli ultimi cinque
a sei anni abbiamo imparato è
colpisce in realtà una grande area del
società essenzialmente della compagnia
logica aziendale e applicazioni in
fatto può sfruttare l’elaborazione del flusso e
questo è ciò di cui parla questo e
dove i flussi di Kafka e Kafka che è
Il più recente livello di elaborazione del flusso di Kafka
entra a posto così, senza ulteriori indugi
Iniziamo prima di tutto
iniziamo rispondendo a questa domanda
elaborazione del flusso è questa parola d’ordine oggi
ci sono molti modi per definirlo ma
oggi userò un modo molto specifico
modo che è semplicemente un
paradigma di programmazione per l’elaborazione
dataset illimitati ora se si guarda
i paradigmi di programmazione ci sono vari
modi di tagliare questa torta, ma qui sto
andando ad usare un modo specifico che è il
modo in cui un’applicazione riceve il suo input e
il modo in cui produce la sua uscita e se
si guarda a questo output di input IO
dimensione quindi ci sono tre paradigmi
per la programmazione si richiede una risposta
ci sono sistemi cattivi e poi lo faremo
venire all’elaborazione del flusso in modo da richiedere
la risposta è davvero semplice, siamo usati
a questi sistemi questi sono i nostri PC
applicazioni a cui si invia un input in
il vostro servizio e poi si attende per uno
uscita indietro e l’unico modo di ridimensionamento
i servizi distribuendo più istanze
di esso le proprietà di richiesta / risposta
i sistemi sono così strettamente
accoppiato è sensibile alla latenza e tu
vuoi ridimensionarlo distribuendo di più
istanze ora alla fine del
l’altra estremità dello spettro è cattiva
sistemi qui si invia tutti i tuoi input in
aspetti che i sistemi crunch tutto ciò
dati e quindi inviano tutto il loro output
indietro e la grande differenza dalla richiesta
i sistemi di risposta sono questo accoppiamento perdente
e aspettativa tipicamente intorno alla latenza
questi sistemi ottengono forse ore per essere eseguiti o
a volte giorni e anche se la cosa
nota su sistemi cattivi è che loro
supponiamo che i dati siano limitati in natura
sai quando sai che sai come
definire cosa significa tutto qui va bene allora
arrivando al flusso di sistemi di elaborazione qui
mandi qualche input e ne ottieni qualcuno
uscita indietro e la definizione di alcuni
è lasciato al programma potrebbe significare uno
input o potrebbe significare tutti i tuoi input
l’ output è disponibile in vari
due volte potresti ottenere un articolo in uscita
per ogni elemento di input o un elemento di output
per ogni n elementi di input è davvero un
generalizzazione dei due precedenti
estremi che abbiamo visto la cosa da notare
è l’elaborazione del flusso che assume
che i dati sono illimitati in natura lo è
senza fine e quindi è progettato intorno
che ora per molto tempo conosci il flusso
in lavorazione
è mal interpretato come qualcosa che potrebbe
essere transitori o smarriti o approssimativi
alcuni sistemi sono stati così, ma il mio
affermazione è che quelli sono essenzialmente
inconvenienti del modo in cui quelli specifici
i sistemi sono stati progettati ma non è un
proprietà intrinseca del flusso
il paradigma dell’elaborazione infatti nuota
i sistemi di elaborazione possono essere assolutamente
fatto per generare risultati perfetti solo
come quei sistemi fanno altrettanto bene
in modo efficiente quindi la ragione è questa
conosci la conflazione dei problemi con
l’elaborazione del flusso è perché quando tu
elaborare i set di dati illimitati che ci sono
vari complicati compromessi coinvolti e
quelli sono intorno al costo di latenza e
correttezza e spesso i tempi sono i sistemi
specificamente progettato per ottimizzare insieme
alcune di queste dimensioni rispetto al dare
l’utente la flessibilità di scegliere il
trade-off che sono corretti o adatti a
la loro applicazione e questo conta molto
perché una taglia non va bene qui
alcune applicazioni potrebbero interessare
correttezza come la fatturazione mentre alcuni possono
non come l’ elaborazione del lotto che potrebbe interessare a qualcuno
sulla latenza come avvisi mentre alcuni possono
non come ETL mentre alcune applicazioni
in realtà potrebbe non essere a posto con il pagamento del
costo per l’ottimizzazione completa lungo il
altre due dimensioni quindi questa flessibilità
è importante durante la progettazione di un buon flusso
sistemi di elaborazione questo discorso è di circa
conosci l’ elaborazione del flusso per
sviluppo di applicazioni cosa sono
interessato a esplorare è come il
la logica aziendale di tutta l’azienda può essere
progettato come elaborazione del flusso
applicazioni e cosa potrebbe essere richiesto
se dovessimo farlo così in tutto questo
parlare, ho intenzione di lavorare su questo
esempio questo esempio è da a
vendita al dettaglio di mattoni e malta sai compagnia
o l’industria qui sai per la vendita al dettaglio
le aziende ci sono due input che sono
rilevante o importante per lo meno
e queste sono vendite di cose e
spedizioni di cose
e per le aziende sane questi due
le cose non finiscono mai e spero
questi sono essenzialmente flussi di input
sono illimitati e non finiscono mai
se tu se vedi che li conosci
due input sono utili per un intero set di
applicazioni a valle che potresti inviare
per il tuo Hadoop o il tuo magazzino per
analytics potresti mandarlo in qualche modo
del sistema di rilevamento delle frodi o potresti
indicizzarlo in un sistema di ricerca che può
alimenta la funzione di ricerca attraverso il tuo
inventario e quindi ci sono due tipi
di elaborazione che dovrebbe accadere
continuamente ma per molti di questi
le aziende oggi potrebbero non essere progettate
in questo modo e quelli sono aggiustamenti dei prezzi
e aggiustamenti di inventario questo è
essenzialmente ciò che Amazon fa un ottimo lavoro
fuori di che hanno un totalmente
vista in tempo reale di ciò che viene venduto
ciò che è richiesto e loro hanno questo
capacità di fare entrambi i tipi di a
rettifiche e rettifiche di prezzo a
approfittare di questa domanda e così via
questo è essenzialmente ciò che è ciò che cade
tuttavia nel secchio di elaborazione del flusso
potrebbe non essere progettato in questo modo oggi
e quindi daremo un’occhiata a questo se tu
guarda un po ‘questa immagine
diversamente nella parte superiore sono cose che
cadi nel sai cosa è successo
categoria questi sono eventi che sono
interessante per questo business e
tutto il resto è essenzialmente a
risposta a quell’evento così come una risposta
potresti inviarlo al tuo magazzino o
cerca sai indicizzarlo in una ricerca
sistema o potrebbe elaborarlo utilizzando alcuni
una specie di processore ora sta facendo un passo
indietro se tutta questa cosa è stata progettata come
una grande applicazione monolitica quindi
quello che sto per dire è che non è così
conta davvero ma in realtà
le applicazioni non sono progettate in questo modo
in genere hai diversi servizi ciascuno
servizio ne hai conosciuti alcuni
responsabilità che fa e così
quando ne hai conosci diversi
le applicazioni che hanno bisogno di interagire con
l’un l’altro hai essenzialmente una coppia
di scelte giuste se non hai un modo
per tamponare questi flussi di input e poi cosa
sei rimasto con se sai la necessità di
coppia strettamente tutti
questi servizi a valle con il
servizi che generano questi diritti e
se lo fai, allora ha tutto il
aspetti negativi dell’accoppiamento stretto che è
guasti a cascata o sensibilità a
problemi di prestazioni se d’altra parte
se tu avessi un log o una stecca come Kafka a
il centro che potrebbe tamponare il tuo
flussi di input allora la permette
flessibilità di disaccoppiare tutto il
servizi a valle in modo che non lo siano
strettamente accoppiato si finisce con molto
architettura più resiliente e altro ancora
importante quello che stiamo andando a guardare
in è che ti permette di fare streaming
elaborando alcuni di questi alcuni di questi
azioni che dovrebbero effettivamente essere
azioni continue o elaborazione può
capita se hai Kafka per tamponare tutto
questo dato va bene, così ti sto elaborando
sapere legare questo a questo
conversazione questo è in realtà è solo
un sacco di funzioni o azioni in cima
di ciò che succede in ordine di dati dell’evento
e perché Kafka è emerso come a
sorta di un sistema di fatto per la memorizzazione
dati dell’evento si riduce sostanzialmente
nella scrittura di funzioni in cima a Kafka
argomenti o stream di Kafka così sai
Kafka è stato lì per un po ‘che ha
è stato usato per cinque anni
attraverso migliaia di aziende così finite
negli ultimi cinque anni un paio di stream
sono emersi approcci di elaborazione
tempo il primo è davvero quello che chiamo
elaborazione del flusso fai-da-te qui
quello che le persone fanno è usare la base
Librerie di Kafka e costruiscono stream
elaborare la logica e inserirsi nel codice
la loro applicazione e se lo fai
poi ci sono un paio di problemi
relativo al flusso di elaborazione che tu
dovrebbe sapere che avresti dovuto affrontare
quelli sei sai assicurarti che il tuo
i dati arrivano e vengono elaborati in ordine
assicurandoti di poterlo fare mentre tu
sapere ridimensionare orizzontalmente il tuo
applicazione fuori tolleranza d’ errore quindi
assicurandoti di avere tutto il
garanzie come macchine e processi
fallire la gestione dello stato alcune operazioni in
elaborazione del flusso come join e finestra
dag Rockets richiede manutenzione
stato così
cosa succede alla gestione dello stato
rielaborare così la capacità di sapere
aggiorna la tua applicazione o correggi bug in
la tua applicazione che essenzialmente
richiede di tornare indietro nel tempo e
rielaborare i risultati passati e infine durare
ma non meno importante l’idea del tempo del
correttezza nell’elaborazione del flusso
strettamente legato al trattamento corretto di
tempo e parlerò di ognuno di
questi problemi e come il flusso di kafka
risolve questi così l’altro approccio è
sai invece di farlo da solo
usi uno dei tanti stream
quadri di elaborazione che sono là fuori
SPARC ha un modulo di streaming che è
abbastanza forte c’è tempesta
samms che alcuni di noi hanno costruito su LinkedIn
c’è anche un sistema emergente chiamato
flink che funziona davvero bene
la cosa da notare su questi sistemi è
che sai che condividono un certo tipo
di MapReduce eredita l’idea di fare
un livello MapReduce più veloce e questo funziona
in realtà piuttosto bene per alcuni sottoinsiemi di
problemi ci sono un sacco di innovazione
accadendo in questo spazio ci sei tu
sapere a causa di questa eredità MapReduce
ci sono alcuni tratti che questi sistemi
condividere incluso quello che abbiamo costruito in
LinkedIn che si chiama Sansa e quelli
tratti sono che tu sai in genere lì
è un modo personalizzato di configurare il tuo
codice di elaborazione che è proprietà
di un lavoro eseguito su un cluster
sono i framework di elaborazione del flusso
opera quindi c’è un modo personalizzato per
pacchetto e distribuire il codice molto simile a
Lavoro MapReduce c’è l’intero tipo di
problema della mappatura della gestione delle risorse
processi alle macchine e ci sono tonnellate
di soluzioni per che oggi questo funziona
in realtà piuttosto bene per voi sapere le cose
come sai il codice che già scorre in
Hadoop che ha bisogno di correre più veloce
domande a lungo termine come sai
apprendimento automatico o lunga durata
tipi di analisi di query che funziona
abbastanza bene su questo tipo di sistemi
quello che volevamo fare è sapere prendere un
fai un passo indietro e guarda l’elaborazione del flusso
per lo sviluppo di applicazioni e se tu
guarda che poi ci sono
un sottoinsieme di problemi quando si tratta di
questi tratti il primo è quello per
solo gestione e configurazione della confezione
ci sono un sacco di strumenti giusto
c’è più oscuro e chef e burattino e
sale e quella è una lunga lista per
la gestione delle risorse come pure ci sono
un sacco di strumenti mezzos che è
di cosa parla l’ altro
ci sono i kubernetes e tutto il resto
l’ecosistema è eccitante ed è in movimento
e così se pensi a cosa
prenderà per gli sviluppatori di applicazioni a
utilizzare primitive di elaborazione del flusso
dovresti assicurarti che sia così
meno dipendenze esterne lo è
leggero in cui può essere incorporato
applicazioni e la seconda cosa è
che non permetterete agli sviluppatori di usare
gli strumenti di loro scelta per la configurazione
gestione per l’imballaggio di applicazioni per
spiegamento e così abbiamo pensato che tu
sai se torni e guarda questo
problema di progettazione come libreria
essenzialmente il modo giusto di andare se tu
voglio avvicinarmi allo sviluppo di applicazioni
e così questo è esattamente ciò che Kafka
flussi è una libreria Java che è
costruito sopra Kafka e il motivo
è costruito su Kafka perché
Kafka fornisce i primitivi di base
che sono necessari per la lavorazione dei gamberetti
e guardiamo guardiamo a cosa significa
quindi i flussi di rame sono essenzialmente due
interfacce uno è un callback del processore
api e l’altro è un DSL di alto livello
ed entrambi sono Java al momento, quindi
guardando l’API del processore solo per
fai un esempio , è piuttosto semplice
ottenere una chiave in un valore che è un senso
essenzialmente un messaggio in Kafka tu
elaborarlo che potrebbe essere il tuo codice e
durante l’elaborazione si potrebbe aggiornare
in qualche stato possiamo parlarne più tardi
e quindi potresti inviare quel messaggio
in un certo senso questo incapsula il
per intero conosci lo scopo del flusso
l’elaborazione di flussi di input si
avere un codice di elaborazione e poi tu
hanno flussi di output e questo è il codice
che scrivi per costruire uno dei tuoi
processori sai che te lo chiedi
configuralo per dirgli dove connetterti
a Kafka scrivi la tua classe di processore
e poi dici solo start e puoi
prendi questo codice ed eseguilo
su un’istanza o su un processo o su di te
può prenderlo ed eseguirlo su multipli
processi i flussi di Kafka gestiscono il carico
bilanciamento dei dati
ora la seconda API potrebbe essere difficile
leggere è il DSL di alto livello questo è un
semplice applicazione che conta le parole
sai che questo è essenzialmente il set
di API è che fornisce sono quelli
che potresti aspettarti di filtrare la finestra di join
aggregato e così via e così via ora
se si utilizza questo processore esplicito
API o si utilizza il DSL internamente cosa
operatori di elaborazione del flusso tipicamente
i moduli sono topologie e tu ti conosci
con i flussi di kafka non devi
preoccuparsi di come viene eseguita questa topologia
i processi di Kafka si occupano di
assegnando le partizioni che il tuo
la topologia ha bisogno di equamente tra tutti i
istanze della vostra applicazione cosa
succede è questa topologia è giusta
incorporato nella tua applicazione
è quasi un dettaglio che non lo fai
sapere come tornare al
problemi di elaborazione del flusso e come
Kafka fornisce i primitivi e come Kafka
i flussi fanno leva su quei primitivi che facciamo
dai un’occhiata a ciascuno di questi e guarda
cosa significa in realtà
prima di ordinare per quelli di voi che
potrebbe avere familiarità con questo Kafka
astrazione potrebbe apparire familiare questo è
l’astrazione chiave che fornisce Kafka
che è un log e non è davvero niente
ma una matrice ordinata o strutturata di
messaggi in modo che i dati siano completamente ordinati
è immutabile quindi una volta scritti i dati
non cambia mai e ogni record può essere
identificato utilizzando un indice univoco o a
numero di sequenza in Kafka questo è chiamato
un offset così essenzialmente questo lo sai
astrazione si assicura che i dati siano
entrambi scritti e letti in ordine
e questo è ciò che fornisce l’ ordine
astrazione in Kafka che è anche usato
di Kafka scorre così tornando da te
conosco il partizionamento e la scalabilità che
è la vista logica del log
fisicamente se si voleva ridimensionare questo
logout avresti frammento in
partizioni adatte e se avete fatto che
allora questo è esattamente il back-end di
Apache Kafka dove un log è un argomento è
una cosa logica e fisicamente l’argomento
vive in partizioni su cui sono schierate
i broker quando arrivano i messaggi sono
aggiunto a uno dei log delle partizioni
e c’è una sorta di politica per
mantenendo una finestra fissa del registro così
non sei a corto di spazio potrebbe essere
in base al tempo o potrebbe essere basato su
dimensione o una politica di compattazione speciale
chiamato compattazione legale che stiamo andando
per parlare più tardi, va bene
quindi conosci parte del problema
partizione come la scalabilità sei a conoscenza
parallelismo dei dati che è quello che abbiamo cercato
in che modo è possibile suddividere i dati
ma poi parte di esso è in fase di elaborazione
parallelismo che è come stai ora
processo attraverso un insieme distribuito di
macchine e processi per quella Kafka
ha un primitivo chiamato gestione di gruppo
che consente un gruppo di processi
essenzialmente la tua applicazione a
iscriversi a una risorsa partizione chiamata
l’ argomento mentre Kafka è trasparente
gestisce il bilanciamento del carico in modo che tu
può avere più processi e sa
come assegnare partizioni tra quelle
processi che consumano essenzialmente grandi
quantità di dati tra più istanze
della tua applicazione che incorpora il
Il consumatore di Kafka è piuttosto semplice allo stesso modo
il primitivo è disponibile negli stream di Kafka
ora se guardi a questo il consumatore è
sostituito dalla topologia dei flussi e it
sfrutta la funzionalità di gestione del gruppo
quindi ha essenzialmente lo stesso effetto
puoi avere la topologia dei flussi di Kafka
eseguire su più processi che
essenzialmente sono la tua applicazione e
gestisce il bilanciamento del carico e
assegnazione di partizioni in modo uniforme tra
quelle di Kafka trasmettono istanze in modo imperdonabile
tolleranza alla nostra prossima fermata, lo sappiamo noi
ha esaminato come possono essere elaborati e dati
ridimensionato orizzontalmente ma allora che dire
tolleranza d’errore e che dire se tu
riavviare parte della tua applicazione o esso
semplicemente si blocca ora la cosa è che il
stessa struttura di gestione del gruppo
gestisce la tolleranza agli errori quindi se uno di
la tua istanza
della tua domanda potrebbe morire o è
riavviato, lo sai
gestisce in modo trasparente il riequilibrio di
partizioni in modo che il nuovo set di
restano le istanze dal vivo che raccolgono
il carico delle istanze fallite e il
la stessa cosa è disponibile per Kafka Shrim
quindi se uno dei tuoi processi è in esecuzione
alcuni dei tuoi compiti di streaming di Kafka muoiono
I flussi di Kafka spostano automaticamente quelli
attività o quelle istanze di topologia al
istanze rimanenti vivi del tuo
domanda in modo da venire a dichiarare
gestione e perché questo è importante in
stream processing Se notate alcune delle
le operazioni comuni in streaming
elaborare alcune operazioni come il filtro
e mappa sono essenzialmente un record in
una volta che sai che il nostro disco viene da te
o filtralo o no viene un record
e lo si mappa e lo si invia attraverso di voi
non è necessario mantenere alcun contesto di
sai di un record mentre passa il tuo
stream processor ma poi ce ne sono alcuni
conosci gli operatori che richiedono
mantenendo uno stato quando si finestra
i dati che hai per te sanno ricordare a
un paio di messaggi che lo formulano
finestra e così è la gestione dello stato
importante nello stream che ti processa
quasi non riesco a liberarmene
quindi ci sono diverse opzioni quando
arriva alla gestione dello stato il primo
è forse l’ approccio più comune
qual è il tuo stato e te
basta inserirla in una sorta di valore chiave
negozio che conosci e di cui ti fidi
quello realmente funziona tuttavia ci è a
disadattamento delle prestazioni impedite per
esempio, Kafka può effettivamente elaborare
messaggi al ritmo di centinaia di
migliaia di messaggi al secondo porno
mentre un valore di chiave esterna memorizza quando
usato in questo modo che è per tutti
messaggio o ogni gruppo di messaggi
è necessario creare un RPC esterno per questa chiave
value store e ne ottieni o ne imposta alcuni
messaggio o dati che può gestire solo
forse migliaia di messaggi per
secondo quindi c’è intrinsecamente questo
disallineamento delle prestazioni la seconda opzione
stai spingendo il tuo stato all’interno di questo
processore quindi è disponibile localmente se
l’hai fatto allora è ovviamente così
più veloce perché tutti i dati che è
è richiesto per la tua elaborazione
disponibile all’interno del processore
la cosa bella è che fornisce
isolamenti migliori quindi un processore veloce
non può rimuovere il database che è
usato da altri processori e lo è
in realtà flessibile, quindi questo è questo stato
in realtà collegabile in modo che potrebbe essere un
mappa hash in memoria o potrebbe essere una roccia
città bestia o potrebbe essere i tuoi dati personali
struttura che potrebbe essere letta o scritta
ottimizzare in base alla propria applicazione
e quindi ciò che fa lo streaming di Kafka è questo
fornisce l’opzione di locale durevole
stato questo è collegabile al momento in
l’attuale versione dei flussi di Kafka
questo è o un negozio di rocce o un DB
mappa hash in memoria ma la cosa bella è
che è un fault tolerant e tu
potrebbe pensare come ciò che fa è quello
ogni aggiornamento che è scritto su qualsiasi
è il frammento del tuo negozio di stato
scritto in modo trasparente a un altamente
argomento Kafka disponibile e duraturo quindi
anche quando i processori vanno e vengono quando loro
riavviati sulla nuova macchina che possono
scansiona questo registro compatto in Kafka e
ricreare il negozio di stato ora questo è
solo un’opzione quindi se scegli di te
può ancora tornare indietro e attaccare il tuo stato
in un database esterno ce ne sono altri
implicazioni di ciò, ma questo è un
opzione fornita fuori dalla scatola
in macchine per la tosse, quindi potresti pensare
su di te sai se registri ogni aggiornamento
fatto in una sorta di negozio di stato come
funziona
senza esaurire lo spazio e questo è
in realtà dove la terza spazzatura
la politica di raccolta in Kafka è a portata di mano
che è log compaction l’idea è quella
sai immaginare ogni aggiornamento che è stato
fatto a un negozio di stato è scritto come un
messaggio in Kafka e ricorda che a
il messaggio in Kafka è una chiave e un valore così
questa è la chiave primaria e questo è il
valore che è essenzialmente il contenuto
della tua fila e se lo facessi allora
conosci ogni riga che esiste nel tuo
database esiste in questo argomento di Kafka
infatti come le righe vengono aggiornate potresti
trova più messaggi che appartengono a
la stessa chiave
se la ROI non viene mai aggiornata, potresti
trova solo un messaggio che non passa mai
via quindi l’implicazione è che tu lo sai
tutto ciò che hai nel tuo
l’ archivio di stato esterno è disponibile come
messaggio qui quindi se si voleva
ricreare il contenuto del contenuto corrente
del tuo negozio statale tutto ciò che devi fare
stai scannerizzando questo argomento di Kafka dal
molto all’inizio e quando raggiungi il
fine avete il vostro negozio lo stato
la politica di compattazione quello che fa è
periodicamente cancella valori più vecchi per
ogni chiave unica per mantenere solo il
ultimo valore e questo è quello che vedi
la riga con la chiave a è stata scritta o
aggiornato tre volte ma ciò che conta davvero
è l’ultimo valore e questo è ciò che
la versione compattata del registro è simile
e questo è esattamente ciò che
i database tradizionali fanno è avere
redo log e ogni aggiornamento a una riga
è loggato in quel log di redo e così via
è esattamente il nostro handle di database
crash recovery ok quindi questa compattazione della legge
la funzionalità è davvero molto importante in
risolvere un altro difficile problema in
rielaborazione e ho intenzione di tentare di
spiegare cosa significa ritrattamento con il
aiuto di un esempio, quindi presume che tu
aveva qualche applicazione che conta il
numero di visite a un sito Web di utenti e
aggiorna una specie di dashboard e
potrebbe andare bene fino a quando non ti rendi conto
che stai fissando la logica di
contando o stai sistemando un bug nel tuo
applicazione essenzialmente a te
conosci drop o geo code del tutto quindi se
l’hai fatto allora sai che lo sai
tutte le finestre d’ora in poi hanno totalmente
diversi conteggi dalle finestre che
la versione precedente dell’applicazione
manipolati e quindi ciò che si finisce con sono
risultati fondamentalmente errati per un grande
percentuale di quelle finestre e così via
vuoi fare è
vuoi tornare indietro e rielaborare il
risultati passati nel momento in cui sentirai
come se dovessi aggiornare il tuo
applicazione così come lo fai tu
sai che ogni aggiornamento o il
tutta la storia delle cose è disponibile in
Kafka all’interno di questo registro compatto così
il ritrattamento equivale semplicemente al ripristino
l’offset della tua applicazione a zero
e rivedere da quel punto in poi
quindi è così che funziona la tua applicazione
potrebbe aggiornare qualche tipo di stato e questo
è dove è in esecuzione che è è
completamente raggiunto ora vuoi girare
lo switch e aggiorna la tua applicazione
cosa si finisce a fare se si desidera utilizzare
questa funzione è iniziare una nuova istanza
della tua applicazione con la quale si trova in a
nuovo gruppo di consumatori e l’offset di
quel gruppo di consumatori è impostato a zero e
lo stato che aggiorna è inizialmente
vuoto mentre raggiunge sai il
lo stato si riempie fino a quando non raggiunge la fine
che è quando è completamente preso una volta
è completamente raggiunto, si accende l’ interruttore
e hai il dashboard in cui si legge spostare
questo nuovo stato negozio si chiude il
vecchia istanza del tuo negozio di stato e
efficacemente ora ha aggiornato il tuo
applicazione completamente in un modo che tutti
i conteggi sai sempre
riflesso su tutta la linea ora questo
le funzionalità sono davvero importanti
perché se i sistemi di elaborazione del flusso
non supportano l’idea di gratis
elaborazione devi ricorrere a un
pipeline di base Hadoop parallela che
essenzialmente lo rende piuttosto complicato
come vedrai più avanti per mantenere tutto okay
quindi ultimo ma non meno importante l’idea di
tempo abbiamo trascorso molto tempo su questo e
molto del nostro lavoro è ispirato da questo
sai che questa idea è condivisa dal
team di flusso di dati e Google e questo questo
l’intuizione è fondamentalmente che i dati del flusso sono
mai completo ma in effetti può sempre
arrivare fuori ordine e cosa significa
oggi per i sistemi di elaborazione dei flussi
quella
vuoi progettare le cose in un modo
ti aspetti sempre che arrivino i dati
in ritardo o arrivare fuori ordine e questo ha
un gruppo di applicatori che conosci istanze
su come gestisci alcuni di questi problemi
quindi la cosa fondamentale da notare sul tempo o
quando si parla di tempo ci sono
due concetti che meritano attenzione
uno è l’ora dell’evento che è quando un evento
viene creato e l’altro è in fase di elaborazione
tempo in cui si verifica l’evento
elaborato e a causa di vari ritardi o
colli di bottiglia nella tua pipeline questi due
le cose possono effettivamente convergere e divergere
col tempo e la fonte della perdita di
correttezza in un sacco di flusso
i sistemi di elaborazione è perché loro
confondere completamente queste due idee guida
a risultati errati quindi ecco un
esempio dalla finestra per trasmettere questo
l’idea ora ti consente di assumere lo stesso presupposto
applicazione abbiamo utente contabile
visite a un sito Web e siamo
mantenendo una sorta di cruscotto e
perché stiamo contando probabilmente
contando in Windows di dati e andiamo
supponiamo che la finestra sia di 10 minuti
finestra ora se io sono un utente mobile se io
visitare questo sito e subito prima che
visita l’ evento lo rende all’applicazione
server perdo copertura della rete vengo
torna dopo 12 ore ora quando questo evento
ritorna ai server delle applicazioni
essenzialmente hai due scelte per te
sai che vuoi contare questo evento
nella finestra corrente di 10 minuti o fare
vuoi venire questo evento nel 10
finestra minuto
12 ore fa, che è quando è davvero
successo e se notate se voi se voi
contate usando il precedente metodo che è
contando per tempo di elaborazione è
essenzialmente errato a causa di questi
ritardi a causa di diecimila motivi
perché questi ritardi potrebbero accadere se tu
conta usando il tempo dell’evento corretto
perché quello è ciò che riflette il vero
stato del mondo, quindi questo vale
in generale per voi conoscete molto downstream
elaborazione all’interno dell’elaborazione del flusso
topologia e questo è qualcosa che
Kafka flussi così come pure in fuga
come flusso di dati un sacco di questi di più
i sistemi incorporano l’ idea dell’evento
tempo con attenzione in tutto il sistema
okay, questo è quello che sai che abbiamo
arrotondato una sorta di tutti i problemi in
problemi tipici nell’elaborazione del flusso
come potresti ottenerlo nei flussi di kafka
e Kafka in persona la prossima volta che andrò
parlare di una nuova idea negli stream di Kafka
che ti aiuta a modellare alcuni di questi
problemi di elaborazione del flusso più difficile come
Windows e si unisce molto più efficacemente
e come questo ti permetta di costruirle
debolmente accoppiati fonti micro stateful
molto più facilmente ho intenzione di iniziare
dicendo che i flussi e le tabelle sono duali
e i flussi di Kafka integrano completamente questi
due idee, ora questo potrebbe fare molto
più senso con l’aiuto di un esempio
quindi ecco qui questo è essenzialmente un Kafka
lo streaming ha tre messaggi ciascuno
messaggio ha una cura di valore come qualsiasi
altro messaggio di Kafka se si nota il
il flusso è leggermente diverso dal terzo
messaggio aggiorna il valore per una chiave
hai osservato nel messaggio precedente ora
come terzo esercizio
proviamo a convertirlo in un tavolo dove
sai con ogni messaggio che aggiungiamo una riga
a questo tavolo così quando leggi il messaggio
uno si crea la prima fila quando si
leggi il messaggio per creare il secondo
fila questa è una nuova chiave e quando leggi
il terzo messaggio si aggiorna il primo
fila così questo lo sai essenzialmente cosa
abbiamo fatto è abbiamo convertito questo
fluire in un tavolo ora andiamo uno
fare un passo avanti e provare a vedere cosa
flusso di changelog per questa tabella potrebbe
sembra che tu sappia per quelli di voi no
i flussi di changelog consapevoli sono i nostri flussi
che hanno un messaggio per ogni aggiornamento
fatto a qualsiasi fila in un tavolo quindi se tu
vuoi vedere che cos’è un flusso di modifiche
per questo tavolo potrebbe sembrare questo
cosa ti ritrovi se ci provi
confrontalo con lo stream che abbiamo iniziato
con questo essenzialmente lo stesso flusso così
abbiamo preso un flusso che abbiamo convertito
a una tabella che viene convertita in
un flusso
essenzialmente stanno facendo flussi e tabelle
questo non è che il furgone di New York ti abbia idea
conoscere i sistemi di database sequenziali o database
i sistemi di flusso hanno introdotto questa idea
lo stiamo semplicemente portando in superficie
attraverso Kafka va bene così così che cosa questo
la dualità del tavolo stream è utile in
modellando in modo specifico alcuni problemi gravi
si unisce così torneremo e prenderemo un
esempio per rendere questo un po ‘ più facile
per capire così di nuovo al dettaglio
esempio in cui ho detto che ti conosci
avere un flusso di vendita hai una spedizione
flusso se volessimo unirci a questi due
flussi su cui potremmo ottenere l’ inventario
mano per questa azienda al dettaglio così hai
questo flusso di spedizione e flusso di vendita in
per semplicità supponiamo che il
formato di un messaggio in entrambi questi
i flussi sono esattamente gli stessi che ha a
chiave doppia che è l’ ID oggetto e il codice negozio
che identifica un oggetto all’interno di un negozio
e poi ha un conteggio ora questo conteggio
per un flusso di spedizione significa il
numero di articoli che sono immagazzinati in
quel negozio e questo conta in una vendita
flusso significa il numero di elementi che
sono venduti da quel negozio così che un comune
l’operazione sembra essere essenzialmente per
un messaggio in questa spedizione ti trasmette
incrementare il valore in questa tabella e
questa tabella è essenzialmente un concetto in
flussi di kafka e per un messaggio sul
flusso di vendita si decrementa il valore in
il tavolo e ora se guardi cosa
questo tavolo è essenzialmente a
visione in tempo reale dell’inventario a portata di mano
per questa particolare azienda ora questo in
kafka scorre non è solo un interno
concetto non ho avuto la possibilità di mostrare
conosci API ma questo è assolutamente un
concetto che è disponibile per te come
utente in modo da sapere qual è la semantica di
quella cosa particolare è che tu hai un K
tabella che è una tabella che è esattamente
l’output di questo tipo di join
operazione in cui ci sono messaggi che
aggiorna i valori dei messaggi precedenti e
allora ci sono flussi K dove ci sono
solo messaggi che
non aggiornare i valori del precedente
i messaggi nel flusso ora stanno andando a uno
fare un passo avanti sai che c’è un
proprietà emergenti di alcune delle cose
che ho condiviso che potrebbe non essere come
ovvio e cioè che il flusso
tabella D Valatie quando combinato con locale
stato interrogabile lo spiegherò
a breve ti permette di costruire stateful
applicazioni con facilità
torniamo a questo esempio se tu
guarda che conosci questa operazione congiunta
e ciò che la vista dell’applicazione delle cose
sembra che supponiamo che questo fosse un
codice semplice a cui hai scritto per partecipare
unisciti a questi due flussi all’interno del tuo
applicazione hai diverse istanze
di questa applicazione ogni istanza ha un
sottoinsieme di partizioni della spedizione e
il flusso di vendite è gestito da un Kafka
flussi sotto le coperte e quindi ogni
istanza dell’applicazione ha lo sai
sottoinsieme di frammenti di questo inventario su
tabella di mano supporre che questo tavolo che
è esposto a te come utente
questo era effettivamente interrogabile se questo fosse
interrogabile allora che cosa ti dà un
la possibilità di fare è esporre questo tipo di RESTO
API in cima alla vostra applicazione che
ti permette di interrogare il conteggio per questo
questo è l’articolo di inventario in ogni negozio
in realtà piuttosto potente perché abbiamo
non solo costruito sai questa applicazione
come una vista in tempo reale, ma quella vista è
effettivamente aggiornato sotto il
copre a causa di questa operazione di join su
la stessa applicazione proprio questo in realtà
potrebbe non avere senso in ogni dominio
spesso ciò che vuoi fare è pari
se si esegue questa operazione entra si vuole solo
incollalo in qualche tipo di esterno
database che conosci e di cui ti fidi ma, se ce ne sono
operazione che devi fare
richiede l’accesso a tonnellate di stato o a
una tonnellata di dati che hanno questo interrogabile
l’opzione di stato è davvero super utile
essenzialmente lo stato è completamente isolato
non lascia mai la vostra applicazione e
è completamente isolato e quindi resiliente
va bene, spostando un ulteriore passo avanti se
tu provi a metterne due in due insieme
Karim è in realtà utile per la costruzione
questi asincroni e liberamente accoppiati
tuttavia le applicazioni stateful stanno andando
fare un passo avanti sulla nostra applicazione che conosci
costruire fuori un po ‘più a
completa quella foto che ho mostrato prima
abbiamo questo inventario su stato
applicazione ha quella tabella e richiama
che ogni negozio statale è supportato da un
cambia argomento di blocco in Kafka che è
trasparente succede automaticamente e
questo è l’ aspetto del flusso di log delle modifiche
è come piangere ogni messaggio
corrisponde ad alcuni aggiornamenti grezzi che sono
fatto su quel tavolo e questo è come qualsiasi
altro argomento di Kafka disponibile per
tu se lo avessi, allora in realtà
poteri alle applicazioni a valle che
inizialmente abbiamo detto che in genere non lo sono
costruito in quel modo oggi e questo è il
riordinare l’applicazione di inventario, quindi cosa
ciò significa che si abbona a questo
cambia il flusso di log come qualsiasi altro Kafka
argomento con ogni messaggio su questo stream
controlla se quel conteggio di inventario ha
sceso al di sotto di una certa soglia se si
ha quindi attivato l’azione di riordino
questa applicazione è completamente diversa
da questa altra applicazione che è il
applicazione di adeguamento dei prezzi che cosa
lo fa in modo indipendente sottoscrive a
questo flusso di log delle modifiche e ci prova
proiettare la domanda per questo particolare
articolo e se la domanda è alta o
cambia quindi attiva le variazioni di prezzo
giusto e queste due applicazioni sono
indipendenti ci sono in tempo reale ma
sono anche totalmente accoppiati
fallimento dell’inventario di riordino
l’applicazione non ha nulla a che fare con
le domande di adeguamento del prezzo così
non solo tu sai che li hai progettati
servizi come processori di streaming sono
progettato come sapete servizi di stato
che sono liberamente accoppiati e cioè
cosa intendevo inizialmente quando l’ho detto
Io questa è l’idea che sai di usare
qualcosa come dopo gli spessori che consente
per eseguire l’ elaborazione del flusso push all’interno
la tua domanda e
aiuta a costruire questi accoppiati liberamente
micro-servizi, se si potrebbe chiamare così
una sorta di tema emergente attraverso Kafka
o flussi di Kafka, lo sai
la semplicità è valutata e la ragione
è che più cose hai dentro
sistemi distribuiti più cose voi
devono operare e operazioni in corso
sono assolutamente le cose più difficili che tu
sapere molto più difficile di costruire il
applicazione o addirittura risoluzione dei problemi
nella fase di sviluppo e quindi il
implicazione per questo per lo streaming
l’elaborazione è quella in genere se la tua
il sistema di elaborazione del flusso non ha
stato locale durevole quindi questo è quello che
finisci con Kafka che è
ancora tu conosci la pipeline dei dati ma
hai il framework di elaborazione del flusso
se non supporta lo stato sei
dipende da qualche tipo di database così
devi operare che questo è il tuo
codice di elaborazione stream che viene eseguito come
lavoro su questo quadro che davvero
aggiorna la tua vista finale ma poi se tu
se ci pensi se il tuo stream
il sistema di elaborazione non supporta il
capacità di ritrattamento o aggiornamento
il tuo codice allora ti rimane questo
pipeline parallela su cui si basa
Hadoop in modo da avere la stessa logica che
gira su Hadoop si aggiorna completamente
vista offline dello stesso database e
non se guardi la tua applicazione è
è piuttosto complesso che interroga questi due
guarda che si fonde è al volo e poi
ti dà alcuni di questi risultati in modo che
è quello che intendevo per te lo sai
anche gli sviluppatori di applicazioni
molte parti mobili potrebbero funzionare per a
sottoinsieme di un noto caso d’uso che tu
potrebbe dipendere da un cluster completamente gestito
per e potrebbe funzionare ma per
leggero sai l’elaborazione del flusso
all’interno di applicazioni che è anche troppo
molte parti mobili così questo è quello che abbiamo
prestato attenzione a flussi che è
sai che abbiamo preso questi aggregati
lo abbiamo fornito come locale durevole
stato quindi è disponibile fuori dalla scatola
non devi dipendere da un esterno
negozio di valore chiave di cui abbiamo preso l’idea
elaborazione gratuita ed è in realtà
disponibile come primitivo di prima classe
all’interno dei flussi di Kafka e Kafka così
non devi dipendere da un Hadoop
la pipeline basata essenzialmente si allontana
dall’architettura lambda è quello che
consente finalmente in questo semplificato
foto così potresti pensare di sapere
Flussi di Kafka è grande, ma è solo una
libreria in cima a Kafka che significa questo
funziona solo per i dati che sono all’interno
Kafka è fatto in questo modo per semplicità
per facilità di funzionamento, ma poi il
il problema a cui potresti pensare è bene
come fai a entrare e uscire dai tuoi dati?
Kafka nella versione online che è il
precedente versione di Kafka che avevamo
rilasciato Kafka Connect che è questo tu
conoscere un modo per costruire scalabile elastico
connettori ad altri sistemi che usano Kafka
l’idea è che questo strato risolva tutto
i problemi comuni di cui i connettori hanno bisogno
per risolvere quale scala e
partizionamento e bilanciamento del carico compensati
gestione poiché sai che questo è
esattamente il livello che ti permette di
esempio ETL i tuoi dati da una Cassandra
o database Oracle in Hadoop utilizzando
Connettori Kafka è stato brutalmente
circa quattro o cinque mesi da quando abbiamo
rilasciato Kafka Connect e la community
ha sviluppato fondamentalmente forse circa 30
connettori già in cima a questo a
vari sistemi come elasticsearch
MongoDB Cassandra qualcuno è andato anche io
avanti e ha scritto un ticker Bloomberg
fonte in modo da poter dare un’occhiata a
alcuni di questi connettori o addirittura sviluppare
il tuo adesso legandolo nel grande
immagine che è quello che volevo fare
ecco qual è questo che alcuni di noi
raggiunto mentre su LinkedIn e hanno
aiutato alcune aziende a trasferirsi a cui è
essenzialmente la possibilità di implementare a
Piattaforma di flusso di dati in base al Kafka
cuore del tuo data center questo è il
fondamento per costruire liberamente accoppiato
microservices un building block per
applicazioni o flusso stateful
processori o abilitando altri stream
sistemi di elaborazione per esistere a causa del
pipeline di dati e il feed di
dati che vanno nel tuo magazzino
ora se volevi provarlo
i flussi di tosse per la tosse sono stati rilasciati oggi
nell’ultima versione di apache kafka
che è la versione OU 10 che puoi ottenere
attraverso la tosse apache core the
piattaforma confluente sia connettere che
flussi sono è nuovo di zecca ci sono un sacco
di persone stavano saltando su queste idee se
hai bisogno di aiuto, noi facciamo una domanda bisettimanale
qualsiasi cosa chiami se lo volessi
partecipare o darci idee che puoi
ping su Twitter e questo è fondamentalmente
esso
So come funziona grazie a Katie
ok io tutti sono Neha RK day e il
co-fondatore CTO al confluente uno dei
creatori di Kafka e questo discorso è di circa
applicazioni o micro sorgenti anche se io
specificamente evitato di usare quella parola in
il mondo dell’elaborazione del flusso è questo
importante perché illimitato su ordinato
i set di dati su larga scala sono sempre di più
comune oggi se si tratta di utilizzo mobile
statistiche o reti di sensori o semplicemente
i dati del flusso di dati del blog web sono ovunque
e c’è una spinta enorme verso ottenere
risultati più rapidi, ma per molto tempo
ho osservato un processo di elaborazione sei tu
sapere come interpretato come qualcosa che
è solo un livello MapReduce più veloce
qualcosa che è molto più vicino al tuo
Hadoop di
e il tuo data warehouse è qualcosa
ciò richiede un intero cluster da eseguire e
sai in particolare per problemi di nicchia
come l’apprendimento automatico più veloce o più veloce
analisi ma nella mia esperienza di
lavorando in questo settore per gli ultimi cinque
a sei anni abbiamo imparato è
colpisce in realtà una grande area del
società essenzialmente della compagnia
logica aziendale e applicazioni in
fatto può sfruttare l’elaborazione del flusso e
questo è ciò di cui parla questo e
dove i flussi di Kafka e Kafka che è
Il più recente livello di elaborazione del flusso di Kafka
entra a posto così, senza ulteriori indugi
Iniziamo prima di tutto
iniziamo rispondendo a questa domanda
elaborazione del flusso è questa parola d’ordine oggi
ci sono molti modi per definirlo ma
oggi userò un modo molto specifico
modo che è semplicemente un
paradigma di programmazione per l’elaborazione
dataset illimitati ora se si guarda
i paradigmi di programmazione ci sono vari
modi di tagliare questa torta, ma qui sto
andando ad usare un modo specifico che è il
modo in cui un’applicazione riceve il suo input e
il modo in cui produce la sua uscita e se
si guarda a questo output di input IO
dimensione quindi ci sono tre paradigmi
per la programmazione si richiede una risposta
ci sono sistemi cattivi e poi lo faremo
venire all’elaborazione del flusso in modo da richiedere
la risposta è davvero semplice, siamo usati
a questi sistemi questi sono i nostri PC
applicazioni a cui si invia un input in
il vostro servizio e poi si attende per uno
uscita indietro e l’unico modo di ridimensionamento
i servizi distribuendo più istanze
di esso le proprietà di richiesta / risposta
i sistemi sono così strettamente
accoppiato è sensibile alla latenza e tu
vuoi ridimensionarlo distribuendo di più
istanze ora alla fine del
l’altra estremità dello spettro è cattiva
sistemi qui si invia tutti i tuoi input in
aspetti che i sistemi crunch tutto ciò
dati e quindi inviano tutto il loro output
indietro e la grande differenza dalla richiesta
i sistemi di risposta sono questo accoppiamento perdente
e aspettativa tipicamente intorno alla latenza
questi sistemi ottengono forse ore per essere eseguiti o
a volte giorni e anche se la cosa
nota su sistemi cattivi è che loro
supponiamo che i dati siano limitati in natura
sai quando sai che sai come
definire cosa significa tutto qui va bene allora
arrivando al flusso di sistemi di elaborazione qui
mandi qualche input e ne ottieni qualcuno
uscita indietro e la definizione di alcuni
è lasciato al programma potrebbe significare uno
input o potrebbe significare tutti i tuoi input
l’ output è disponibile in vari
due volte potresti ottenere un articolo in uscita
per ogni elemento di input o un elemento di output
per ogni n elementi di input è davvero un
generalizzazione dei due precedenti
estremi che abbiamo visto la cosa da notare
è l’elaborazione del flusso che assume
che i dati sono illimitati in natura lo è
senza fine e quindi è progettato intorno
che ora per molto tempo conosci il flusso
in lavorazione
è mal interpretato come qualcosa che potrebbe
essere transitori o smarriti o approssimativi
alcuni sistemi sono stati così, ma il mio
affermazione è che quelli sono essenzialmente
inconvenienti del modo in cui quelli specifici
i sistemi sono stati progettati ma non è un
proprietà intrinseca del flusso
il paradigma dell’elaborazione infatti nuota
i sistemi di elaborazione possono essere assolutamente
fatto per generare risultati perfetti solo
come quei sistemi fanno altrettanto bene
in modo efficiente quindi la ragione è questa
conosci la conflazione dei problemi con
l’elaborazione del flusso è perché quando tu
elaborare i set di dati illimitati che ci sono
vari complicati compromessi coinvolti e
quelli sono intorno al costo di latenza e
correttezza e spesso i tempi sono i sistemi
specificamente progettato per ottimizzare insieme
alcune di queste dimensioni rispetto al dare
l’utente la flessibilità di scegliere il
trade-off che sono corretti o adatti a
la loro applicazione e questo conta molto
perché una taglia non va bene qui
alcune applicazioni potrebbero interessare
correttezza come la fatturazione mentre alcuni possono
non come l’ elaborazione del lotto che potrebbe interessare a qualcuno
sulla latenza come avvisi mentre alcuni possono
non come ETL mentre alcune applicazioni
in realtà potrebbe non essere a posto con il pagamento del
costo per l’ottimizzazione completa lungo il
altre due dimensioni quindi questa flessibilità
è importante durante la progettazione di un buon flusso
sistemi di elaborazione questo discorso è di circa
conosci l’ elaborazione del flusso per
sviluppo di applicazioni cosa sono
interessato a esplorare è come il
la logica aziendale di tutta l’azienda può essere
progettato come elaborazione del flusso
applicazioni e cosa potrebbe essere richiesto
se dovessimo farlo così in tutto questo
parlare, ho intenzione di lavorare su questo
esempio questo esempio è da a
vendita al dettaglio di mattoni e malta sai compagnia
o l’industria qui sai per la vendita al dettaglio
le aziende ci sono due input che sono
rilevante o importante per lo meno
e queste sono vendite di cose e
spedizioni di cose
e per le aziende sane questi due
le cose non finiscono mai e spero
questi sono essenzialmente flussi di input
sono illimitati e non finiscono mai
se tu se vedi che li conosci
due input sono utili per un intero set di
applicazioni a valle che potresti inviare
per il tuo Hadoop o il tuo magazzino per
analytics potresti mandarlo in qualche modo
del sistema di rilevamento delle frodi o potresti
indicizzarlo in un sistema di ricerca che può
alimenta la funzione di ricerca attraverso il tuo
inventario e quindi ci sono due tipi
di elaborazione che dovrebbe accadere
continuamente ma per molti di questi
le aziende oggi potrebbero non essere progettate
in questo modo e quelli sono aggiustamenti dei prezzi
e aggiustamenti di inventario questo è
essenzialmente ciò che Amazon fa un ottimo lavoro
fuori di che hanno un totalmente
vista in tempo reale di ciò che viene venduto
ciò che è richiesto e loro hanno questo
capacità di fare entrambi i tipi di a
rettifiche e rettifiche di prezzo a
approfittare di questa domanda e così via
questo è essenzialmente ciò che è ciò che cade
tuttavia nel secchio di elaborazione del flusso
potrebbe non essere progettato in questo modo oggi
e quindi daremo un’occhiata a questo se tu
guarda un po ‘questa immagine
diversamente nella parte superiore sono cose che
cadi nel sai cosa è successo
categoria questi sono eventi che sono
interessante per questo business e
tutto il resto è essenzialmente a
risposta a quell’evento così come una risposta
potresti inviarlo al tuo magazzino o
cerca sai indicizzarlo in una ricerca
sistema o potrebbe elaborarlo utilizzando alcuni
una specie di processore ora sta facendo un passo
indietro se tutta questa cosa è stata progettata come
una grande applicazione monolitica quindi
quello che sto per dire è che non è così
conta davvero ma in realtà
le applicazioni non sono progettate in questo modo
in genere hai diversi servizi ciascuno
servizio ne hai conosciuti alcuni
responsabilità che fa e così
quando ne hai conosci diversi
le applicazioni che hanno bisogno di interagire con
l’un l’altro hai essenzialmente una coppia
di scelte giuste se non hai un modo
per tamponare questi flussi di input e poi cosa
sei rimasto con se sai la necessità di
coppia strettamente tutti
questi servizi a valle con il
servizi che generano questi diritti e
se lo fai, allora ha tutto il
aspetti negativi dell’accoppiamento stretto che è
guasti a cascata o sensibilità a
problemi di prestazioni se d’altra parte
se tu avessi un log o una stecca come Kafka a
il centro che potrebbe tamponare il tuo
flussi di input allora la permette
flessibilità di disaccoppiare tutto il
servizi a valle in modo che non lo siano
strettamente accoppiato si finisce con molto
architettura più resiliente e altro ancora
importante quello che stiamo andando a guardare
in è che ti permette di fare streaming
elaborando alcuni di questi alcuni di questi
azioni che dovrebbero effettivamente essere
azioni continue o elaborazione può
capita se hai Kafka per tamponare tutto
questo dato va bene, così ti sto elaborando
sapere legare questo a questo
conversazione questo è in realtà è solo
un sacco di funzioni o azioni in cima
di ciò che succede in ordine di dati dell’evento
e perché Kafka è emerso come a
sorta di un sistema di fatto per la memorizzazione
dati dell’evento si riduce sostanzialmente
nella scrittura di funzioni in cima a Kafka
argomenti o stream di Kafka così sai
Kafka è stato lì per un po ‘che ha
è stato usato per cinque anni
attraverso migliaia di aziende così finite
negli ultimi cinque anni un paio di stream
sono emersi approcci di elaborazione
tempo il primo è davvero quello che chiamo
elaborazione del flusso fai-da-te qui
quello che le persone fanno è usare la base
Librerie di Kafka e costruiscono stream
elaborare la logica e inserirsi nel codice
la loro applicazione e se lo fai
poi ci sono un paio di problemi
relativo al flusso di elaborazione che tu
dovrebbe sapere che avresti dovuto affrontare
quelli sei sai assicurarti che il tuo
i dati arrivano e vengono elaborati in ordine
assicurandoti di poterlo fare mentre tu
sapere ridimensionare orizzontalmente il tuo
applicazione fuori tolleranza d’ errore quindi
assicurandoti di avere tutto il
garanzie come macchine e processi
fallire la gestione dello stato alcune operazioni in
elaborazione del flusso come join e finestra
dag Rockets richiede manutenzione
stato così
cosa succede alla gestione dello stato
rielaborare così la capacità di sapere
aggiorna la tua applicazione o correggi bug in
la tua applicazione che essenzialmente
richiede di tornare indietro nel tempo e
rielaborare i risultati passati e infine durare
ma non meno importante l’idea del tempo del
correttezza nell’elaborazione del flusso
strettamente legato al trattamento corretto di
tempo e parlerò di ognuno di
questi problemi e come il flusso di kafka
risolve questi così l’altro approccio è
sai invece di farlo da solo
usi uno dei tanti stream
quadri di elaborazione che sono là fuori
SPARC ha un modulo di streaming che è
abbastanza forte c’è tempesta
samms che alcuni di noi hanno costruito su LinkedIn
c’è anche un sistema emergente chiamato
flink che funziona davvero bene
la cosa da notare su questi sistemi è
che sai che condividono un certo tipo
di MapReduce eredita l’idea di fare
un livello MapReduce più veloce e questo funziona
in realtà piuttosto bene per alcuni sottoinsiemi di
problemi ci sono un sacco di innovazione
accadendo in questo spazio ci sei tu
sapere a causa di questa eredità MapReduce
ci sono alcuni tratti che questi sistemi
condividere incluso quello che abbiamo costruito in
LinkedIn che si chiama Sansa e quelli
tratti sono che tu sai in genere lì
è un modo personalizzato di configurare il tuo
codice di elaborazione che è proprietà
di un lavoro eseguito su un cluster
sono i framework di elaborazione del flusso
opera quindi c’è un modo personalizzato per
pacchetto e distribuire il codice molto simile a
Lavoro MapReduce c’è l’intero tipo di
problema della mappatura della gestione delle risorse
processi alle macchine e ci sono tonnellate
di soluzioni per che oggi questo funziona
in realtà piuttosto bene per voi sapere le cose
come sai il codice che già scorre in
Hadoop che ha bisogno di correre più veloce
domande a lungo termine come sai
apprendimento automatico o lunga durata
tipi di analisi di query che funziona
abbastanza bene su questo tipo di sistemi
quello che volevamo fare è sapere prendere un
fai un passo indietro e guarda l’elaborazione del flusso
per lo sviluppo di applicazioni e se tu
guarda che poi ci sono
un sottoinsieme di problemi quando si tratta di
questi tratti il primo è quello per
solo gestione e configurazione della confezione
ci sono un sacco di strumenti giusto
c’è più oscuro e chef e burattino e
sale e quella è una lunga lista per
la gestione delle risorse come pure ci sono
un sacco di strumenti mezzos che è
di cosa parla l’ altro
ci sono i kubernetes e tutto il resto
l’ecosistema è eccitante ed è in movimento
e così se pensi a cosa
prenderà per gli sviluppatori di applicazioni a
utilizzare primitive di elaborazione del flusso
dovresti assicurarti che sia così
meno dipendenze esterne lo è
leggero in cui può essere incorporato
applicazioni e la seconda cosa è
che non permetterete agli sviluppatori di usare
gli strumenti di loro scelta per la configurazione
gestione per l’imballaggio di applicazioni per
spiegamento e così abbiamo pensato che tu
sai se torni e guarda questo
problema di progettazione come libreria
essenzialmente il modo giusto di andare se tu
voglio avvicinarmi allo sviluppo di applicazioni
e così questo è esattamente ciò che Kafka
flussi è una libreria Java che è
costruito sopra Kafka e il motivo
è costruito su Kafka perché
Kafka fornisce i primitivi di base
che sono necessari per la lavorazione dei gamberetti
e guardiamo guardiamo a cosa significa
quindi i flussi di rame sono essenzialmente due
interfacce uno è un callback del processore
api e l’altro è un DSL di alto livello
ed entrambi sono Java al momento, quindi
guardando l’API del processore solo per
fai un esempio , è piuttosto semplice
ottenere una chiave in un valore che è un senso
essenzialmente un messaggio in Kafka tu
elaborarlo che potrebbe essere il tuo codice e
durante l’elaborazione si potrebbe aggiornare
in qualche stato possiamo parlarne più tardi
e quindi potresti inviare quel messaggio
in un certo senso questo incapsula il
per intero conosci lo scopo del flusso
l’elaborazione di flussi di input si
avere un codice di elaborazione e poi tu
hanno flussi di output e questo è il codice
che scrivi per costruire uno dei tuoi
processori sai che te lo chiedi
configuralo per dirgli dove connetterti
a Kafka scrivi la tua classe di processore
e poi dici solo start e puoi
prendi questo codice ed eseguilo
su un’istanza o su un processo o su di te
può prenderlo ed eseguirlo su multipli
processi i flussi di Kafka gestiscono il carico
bilanciamento dei dati
ora la seconda API potrebbe essere difficile
leggere è il DSL di alto livello questo è un
semplice applicazione che conta le parole
sai che questo è essenzialmente il set
di API è che fornisce sono quelli
che potresti aspettarti di filtrare la finestra di join
aggregato e così via e così via ora
se si utilizza questo processore esplicito
API o si utilizza il DSL internamente cosa
operatori di elaborazione del flusso tipicamente
i moduli sono topologie e tu ti conosci
con i flussi di kafka non devi
preoccuparsi di come viene eseguita questa topologia
i processi di Kafka si occupano di
assegnando le partizioni che il tuo
la topologia ha bisogno di equamente tra tutti i
istanze della vostra applicazione cosa
succede è questa topologia è giusta
incorporato nella tua applicazione
è quasi un dettaglio che non lo fai
sapere come tornare al
problemi di elaborazione del flusso e come
Kafka fornisce i primitivi e come Kafka
i flussi fanno leva su quei primitivi che facciamo
dai un’occhiata a ciascuno di questi e guarda
cosa significa in realtà
prima di ordinare per quelli di voi che
potrebbe avere familiarità con questo Kafka
astrazione potrebbe apparire familiare questo è
l’astrazione chiave che fornisce Kafka
che è un log e non è davvero niente
ma una matrice ordinata o strutturata di
messaggi in modo che i dati siano completamente ordinati
è immutabile quindi una volta scritti i dati
non cambia mai e ogni record può essere
identificato utilizzando un indice univoco o a
numero di sequenza in Kafka questo è chiamato
un offset così essenzialmente questo lo sai
astrazione si assicura che i dati siano
entrambi scritti e letti in ordine
e questo è ciò che fornisce l’ ordine
astrazione in Kafka che è anche usato
di Kafka scorre così tornando da te
conosco il partizionamento e la scalabilità che
è la vista logica del log
fisicamente se si voleva ridimensionare questo
logout avresti frammento in
partizioni adatte e se avete fatto che
allora questo è esattamente il back-end di
Apache Kafka dove un log è un argomento è
una cosa logica e fisicamente l’argomento
vive in partizioni su cui sono schierate
i broker quando arrivano i messaggi sono
aggiunto a uno dei log delle partizioni
e c’è una sorta di politica per
mantenendo una finestra fissa del registro così
non sei a corto di spazio potrebbe essere
in base al tempo o potrebbe essere basato su
dimensione o una politica di compattazione speciale
chiamato compattazione legale che stiamo andando
per parlare più tardi, va bene
quindi conosci parte del problema
partizione come la scalabilità sei a conoscenza
parallelismo dei dati che è quello che abbiamo cercato
in che modo è possibile suddividere i dati
ma poi parte di esso è in fase di elaborazione
parallelismo che è come stai ora
processo attraverso un insieme distribuito di
macchine e processi per quella Kafka
ha un primitivo chiamato gestione di gruppo
che consente un gruppo di processi
essenzialmente la tua applicazione a
iscriversi a una risorsa partizione chiamata
l’ argomento mentre Kafka è trasparente
gestisce il bilanciamento del carico in modo che tu
può avere più processi e sa
come assegnare partizioni tra quelle
processi che consumano essenzialmente grandi
quantità di dati tra più istanze
della tua applicazione che incorpora il
Il consumatore di Kafka è piuttosto semplice allo stesso modo
il primitivo è disponibile negli stream di Kafka
ora se guardi a questo il consumatore è
sostituito dalla topologia dei flussi e it
sfrutta la funzionalità di gestione del gruppo
quindi ha essenzialmente lo stesso effetto
puoi avere la topologia dei flussi di Kafka
eseguire su più processi che
essenzialmente sono la tua applicazione e
gestisce il bilanciamento del carico e
assegnazione di partizioni in modo uniforme tra
quelle di Kafka trasmettono istanze in modo imperdonabile
tolleranza alla nostra prossima fermata, lo sappiamo noi
ha esaminato come possono essere elaborati e dati
ridimensionato orizzontalmente ma allora che dire
tolleranza d’errore e che dire se tu
riavviare parte della tua applicazione o esso
semplicemente si blocca ora la cosa è che il
stessa struttura di gestione del gruppo
gestisce la tolleranza agli errori quindi se uno di
la tua istanza
della tua domanda potrebbe morire o è
riavviato, lo sai
gestisce in modo trasparente il riequilibrio di
partizioni in modo che il nuovo set di
restano le istanze dal vivo che raccolgono
il carico delle istanze fallite e il
la stessa cosa è disponibile per Kafka Shrim
quindi se uno dei tuoi processi è in esecuzione
alcuni dei tuoi compiti di streaming di Kafka muoiono
I flussi di Kafka spostano automaticamente quelli
attività o quelle istanze di topologia al
istanze rimanenti vivi del tuo
domanda in modo da venire a dichiarare
gestione e perché questo è importante in
stream processing Se notate alcune delle
le operazioni comuni in streaming
elaborare alcune operazioni come il filtro
e mappa sono essenzialmente un record in
una volta che sai che il nostro disco viene da te
o filtralo o no viene un record
e lo si mappa e lo si invia attraverso di voi
non è necessario mantenere alcun contesto di
sai di un record mentre passa il tuo
stream processor ma poi ce ne sono alcuni
conosci gli operatori che richiedono
mantenendo uno stato quando si finestra
i dati che hai per te sanno ricordare a
un paio di messaggi che lo formulano
finestra e così è la gestione dello stato
importante nello stream che ti processa
quasi non riesco a liberarmene
quindi ci sono diverse opzioni quando
arriva alla gestione dello stato il primo
è forse l’ approccio più comune
qual è il tuo stato e te
basta inserirla in una sorta di valore chiave
negozio che conosci e di cui ti fidi
quello realmente funziona tuttavia ci è a
disadattamento delle prestazioni impedite per
esempio, Kafka può effettivamente elaborare
messaggi al ritmo di centinaia di
migliaia di messaggi al secondo porno
mentre un valore di chiave esterna memorizza quando
usato in questo modo che è per tutti
messaggio o ogni gruppo di messaggi
è necessario creare un RPC esterno per questa chiave
value store e ne ottieni o ne imposta alcuni
messaggio o dati che può gestire solo
forse migliaia di messaggi per
secondo quindi c’è intrinsecamente questo
disallineamento delle prestazioni la seconda opzione
stai spingendo il tuo stato all’interno di questo
processore quindi è disponibile localmente se
l’hai fatto allora è ovviamente così
più veloce perché tutti i dati che è
è richiesto per la tua elaborazione
disponibile all’interno del processore
la cosa bella è che fornisce
isolamenti migliori quindi un processore veloce
non può rimuovere il database che è
usato da altri processori e lo è
in realtà flessibile, quindi questo è questo stato
in realtà collegabile in modo che potrebbe essere un
mappa hash in memoria o potrebbe essere una roccia
città bestia o potrebbe essere i tuoi dati personali
struttura che potrebbe essere letta o scritta
ottimizzare in base alla propria applicazione
e quindi ciò che fa lo streaming di Kafka è questo
fornisce l’opzione di locale durevole
stato questo è collegabile al momento in
l’attuale versione dei flussi di Kafka
questo è o un negozio di rocce o un DB
mappa hash in memoria ma la cosa bella è
che è un fault tolerant e tu
potrebbe pensare come ciò che fa è quello
ogni aggiornamento che è scritto su qualsiasi
è il frammento del tuo negozio di stato
scritto in modo trasparente a un altamente
argomento Kafka disponibile e duraturo quindi
anche quando i processori vanno e vengono quando loro
riavviati sulla nuova macchina che possono
scansiona questo registro compatto in Kafka e
ricreare il negozio di stato ora questo è
solo un’opzione quindi se scegli di te
può ancora tornare indietro e attaccare il tuo stato
in un database esterno ce ne sono altri
implicazioni di ciò, ma questo è un
opzione fornita fuori dalla scatola
in macchine per la tosse, quindi potresti pensare
su di te sai se registri ogni aggiornamento
fatto in una sorta di negozio di stato come
funziona
senza esaurire lo spazio e questo è
in realtà dove la terza spazzatura
la politica di raccolta in Kafka è a portata di mano
che è log compaction l’idea è quella
sai immaginare ogni aggiornamento che è stato
fatto a un negozio di stato è scritto come un
messaggio in Kafka e ricorda che a
il messaggio in Kafka è una chiave e un valore così
questa è la chiave primaria e questo è il
valore che è essenzialmente il contenuto
della tua fila e se lo facessi allora
conosci ogni riga che esiste nel tuo
database esiste in questo argomento di Kafka
infatti come le righe vengono aggiornate potresti
trova più messaggi che appartengono a
la stessa chiave
se la ROI non viene mai aggiornata, potresti
trova solo un messaggio che non passa mai
via quindi l’implicazione è che tu lo sai
tutto ciò che hai nel tuo
l’ archivio di stato esterno è disponibile come
messaggio qui quindi se si voleva
ricreare il contenuto del contenuto corrente
del tuo negozio statale tutto ciò che devi fare
stai scannerizzando questo argomento di Kafka dal
molto all’inizio e quando raggiungi il
fine avete il vostro negozio lo stato
la politica di compattazione quello che fa è
periodicamente cancella valori più vecchi per
ogni chiave unica per mantenere solo il
ultimo valore e questo è quello che vedi
la riga con la chiave a è stata scritta o
aggiornato tre volte ma ciò che conta davvero
è l’ultimo valore e questo è ciò che
la versione compattata del registro è simile
e questo è esattamente ciò che
i database tradizionali fanno è avere
redo log e ogni aggiornamento a una riga
è loggato in quel log di redo e così via
è esattamente il nostro handle di database
crash recovery ok quindi questa compattazione della legge
la funzionalità è davvero molto importante in
risolvere un altro difficile problema in
rielaborazione e ho intenzione di tentare di
spiegare cosa significa ritrattamento con il
aiuto di un esempio, quindi presume che tu
aveva qualche applicazione che conta il
numero di visite a un sito Web di utenti e
aggiorna una specie di dashboard e
potrebbe andare bene fino a quando non ti rendi conto
che stai fissando la logica di
contando o stai sistemando un bug nel tuo
applicazione essenzialmente a te
conosci drop o geo code del tutto quindi se
l’hai fatto allora sai che lo sai
tutte le finestre d’ora in poi hanno totalmente
diversi conteggi dalle finestre che
la versione precedente dell’applicazione
manipolati e quindi ciò che si finisce con sono
risultati fondamentalmente errati per un grande
percentuale di quelle finestre e così via
vuoi fare è
vuoi tornare indietro e rielaborare il
risultati passati nel momento in cui sentirai
come se dovessi aggiornare il tuo
applicazione così come lo fai tu
sai che ogni aggiornamento o il
tutta la storia delle cose è disponibile in
Kafka all’interno di questo registro compatto così
il ritrattamento equivale semplicemente al ripristino
l’offset della tua applicazione a zero
e rivedere da quel punto in poi
quindi è così che funziona la tua applicazione
potrebbe aggiornare qualche tipo di stato e questo
è dove è in esecuzione che è è
completamente raggiunto ora vuoi girare
lo switch e aggiorna la tua applicazione
cosa si finisce a fare se si desidera utilizzare
questa funzione è iniziare una nuova istanza
della tua applicazione con la quale si trova in a
nuovo gruppo di consumatori e l’offset di
quel gruppo di consumatori è impostato a zero e
lo stato che aggiorna è inizialmente
vuoto mentre raggiunge sai il
lo stato si riempie fino a quando non raggiunge la fine
che è quando è completamente preso una volta
è completamente raggiunto, si accende l’ interruttore
e hai il dashboard in cui si legge spostare
questo nuovo stato negozio si chiude il
vecchia istanza del tuo negozio di stato e
efficacemente ora ha aggiornato il tuo
applicazione completamente in un modo che tutti
i conteggi sai sempre
riflesso su tutta la linea ora questo
le funzionalità sono davvero importanti
perché se i sistemi di elaborazione del flusso
non supportano l’idea di gratis
elaborazione devi ricorrere a un
pipeline di base Hadoop parallela che
essenzialmente lo rende piuttosto complicato
come vedrai più avanti per mantenere tutto okay
quindi ultimo ma non meno importante l’idea di
tempo abbiamo trascorso molto tempo su questo e
molto del nostro lavoro è ispirato da questo
sai che questa idea è condivisa dal
team di flusso di dati e Google e questo questo
l’intuizione è fondamentalmente che i dati del flusso sono
mai completo ma in effetti può sempre
arrivare fuori ordine e cosa significa
oggi per i sistemi di elaborazione dei flussi
quella
vuoi progettare le cose in un modo
ti aspetti sempre che arrivino i dati
in ritardo o arrivare fuori ordine e questo ha
un gruppo di applicatori che conosci istanze
su come gestisci alcuni di questi problemi
quindi la cosa fondamentale da notare sul tempo o
quando si parla di tempo ci sono
due concetti che meritano attenzione
uno è l’ora dell’evento che è quando un evento
viene creato e l’altro è in fase di elaborazione
tempo in cui si verifica l’evento
elaborato e a causa di vari ritardi o
colli di bottiglia nella tua pipeline questi due
le cose possono effettivamente convergere e divergere
col tempo e la fonte della perdita di
correttezza in un sacco di flusso
i sistemi di elaborazione è perché loro
confondere completamente queste due idee guida
a risultati errati quindi ecco un
esempio dalla finestra per trasmettere questo
l’idea ora ti consente di assumere lo stesso presupposto
applicazione abbiamo utente contabile
visite a un sito Web e siamo
mantenendo una sorta di cruscotto e
perché stiamo contando probabilmente
contando in Windows di dati e andiamo
supponiamo che la finestra sia di 10 minuti
finestra ora se io sono un utente mobile se io
visitare questo sito e subito prima che
visita l’ evento lo rende all’applicazione
server perdo copertura della rete vengo
torna dopo 12 ore ora quando questo evento
ritorna ai server delle applicazioni
essenzialmente hai due scelte per te
sai che vuoi contare questo evento
nella finestra corrente di 10 minuti o fare
vuoi venire questo evento nel 10
finestra minuto
12 ore fa, che è quando è davvero
successo e se notate se voi se voi
contate usando il precedente metodo che è
contando per tempo di elaborazione è
essenzialmente errato a causa di questi
ritardi a causa di diecimila motivi
perché questi ritardi potrebbero accadere se tu
conta usando il tempo dell’evento corretto
perché quello è ciò che riflette il vero
stato del mondo, quindi questo vale
in generale per voi conoscete molto downstream
elaborazione all’interno dell’elaborazione del flusso
topologia e questo è qualcosa che
Kafka flussi così come pure in fuga
come flusso di dati un sacco di questi di più
i sistemi incorporano l’ idea dell’evento
tempo con attenzione in tutto il sistema
okay, questo è quello che sai che abbiamo
arrotondato una sorta di tutti i problemi in
problemi tipici nell’elaborazione del flusso
come potresti ottenerlo nei flussi di kafka
e Kafka in persona la prossima volta che andrò
parlare di una nuova idea negli stream di Kafka
che ti aiuta a modellare alcuni di questi
problemi di elaborazione del flusso più difficile come
Windows e si unisce molto più efficacemente
e come questo ti permetta di costruirle
debolmente accoppiati fonti micro stateful
molto più facilmente ho intenzione di iniziare
dicendo che i flussi e le tabelle sono duali
e i flussi di Kafka integrano completamente questi
due idee, ora questo potrebbe fare molto
più senso con l’aiuto di un esempio
quindi ecco qui questo è essenzialmente un Kafka
lo streaming ha tre messaggi ciascuno
messaggio ha una cura di valore come qualsiasi
altro messaggio di Kafka se si nota il
il flusso è leggermente diverso dal terzo
messaggio aggiorna il valore per una chiave
hai osservato nel messaggio precedente ora
come terzo esercizio
proviamo a convertirlo in un tavolo dove
sai con ogni messaggio che aggiungiamo una riga
a questo tavolo così quando leggi il messaggio
uno si crea la prima fila quando si
leggi il messaggio per creare il secondo
fila questa è una nuova chiave e quando leggi
il terzo messaggio si aggiorna il primo
fila così questo lo sai essenzialmente cosa
abbiamo fatto è abbiamo convertito questo
fluire in un tavolo ora andiamo uno
fare un passo avanti e provare a vedere cosa
flusso di changelog per questa tabella potrebbe
sembra che tu sappia per quelli di voi no
i flussi di changelog consapevoli sono i nostri flussi
che hanno un messaggio per ogni aggiornamento
fatto a qualsiasi fila in un tavolo quindi se tu
vuoi vedere che cos’è un flusso di modifiche
per questo tavolo potrebbe sembrare questo
cosa ti ritrovi se ci provi
confrontalo con lo stream che abbiamo iniziato
con questo essenzialmente lo stesso flusso così
abbiamo preso un flusso che abbiamo convertito
a una tabella che viene convertita in
un flusso
essenzialmente stanno facendo flussi e tabelle
questo non è che il furgone di New York ti abbia idea
conoscere i sistemi di database sequenziali o database
i sistemi di flusso hanno introdotto questa idea
lo stiamo semplicemente portando in superficie
attraverso Kafka va bene così così che cosa questo
la dualità del tavolo stream è utile in
modellando in modo specifico alcuni problemi gravi
si unisce così torneremo e prenderemo un
esempio per rendere questo un po ‘ più facile
per capire così di nuovo al dettaglio
esempio in cui ho detto che ti conosci
avere un flusso di vendita hai una spedizione
flusso se volessimo unirci a questi due
flussi su cui potremmo ottenere l’ inventario
mano per questa azienda al dettaglio così hai
questo flusso di spedizione e flusso di vendita in
per semplicità supponiamo che il
formato di un messaggio in entrambi questi
i flussi sono esattamente gli stessi che ha a
chiave doppia che è l’ ID oggetto e il codice negozio
che identifica un oggetto all’interno di un negozio
e poi ha un conteggio ora questo conteggio
per un flusso di spedizione significa il
numero di articoli che sono immagazzinati in
quel negozio e questo conta in una vendita
flusso significa il numero di elementi che
sono venduti da quel negozio così che un comune
l’operazione sembra essere essenzialmente per
un messaggio in questa spedizione ti trasmette
incrementare il valore in questa tabella e
questa tabella è essenzialmente un concetto in
flussi di kafka e per un messaggio sul
flusso di vendita si decrementa il valore in
il tavolo e ora se guardi cosa
questo tavolo è essenzialmente a
visione in tempo reale dell’inventario a portata di mano
per questa particolare azienda ora questo in
kafka scorre non è solo un interno
concetto non ho avuto la possibilità di mostrare
conosci API ma questo è assolutamente un
concetto che è disponibile per te come
utente in modo da sapere qual è la semantica di
quella cosa particolare è che tu hai un K
tabella che è una tabella che è esattamente
l’output di questo tipo di join
operazione in cui ci sono messaggi che
aggiorna i valori dei messaggi precedenti e
allora ci sono flussi K dove ci sono
solo messaggi che
non aggiornare i valori del precedente
i messaggi nel flusso ora stanno andando a uno
fare un passo avanti sai che c’è un
proprietà emergenti di alcune delle cose
che ho condiviso che potrebbe non essere come
ovvio e cioè che il flusso
tabella D Valatie quando combinato con locale
stato interrogabile lo spiegherò
a breve ti permette di costruire stateful
applicazioni con facilità
torniamo a questo esempio se tu
guarda che conosci questa operazione congiunta
e ciò che la vista dell’applicazione delle cose
sembra che supponiamo che questo fosse un
codice semplice a cui hai scritto per partecipare
unisciti a questi due flussi all’interno del tuo
applicazione hai diverse istanze
di questa applicazione ogni istanza ha un
sottoinsieme di partizioni della spedizione e
il flusso di vendite è gestito da un Kafka
flussi sotto le coperte e quindi ogni
istanza dell’applicazione ha lo sai
sottoinsieme di frammenti di questo inventario su
tabella di mano supporre che questo tavolo che
è esposto a te come utente
questo era effettivamente interrogabile se questo fosse
interrogabile allora che cosa ti dà un
la possibilità di fare è esporre questo tipo di RESTO
API in cima alla vostra applicazione che
ti permette di interrogare il conteggio per questo
questo è l’articolo di inventario in ogni negozio
in realtà piuttosto potente perché abbiamo
non solo costruito sai questa applicazione
come una vista in tempo reale, ma quella vista è
effettivamente aggiornato sotto il
copre a causa di questa operazione di join su
la stessa applicazione proprio questo in realtà
potrebbe non avere senso in ogni dominio
spesso ciò che vuoi fare è pari
se si esegue questa operazione entra si vuole solo
incollalo in qualche tipo di esterno
database che conosci e di cui ti fidi ma, se ce ne sono
operazione che devi fare
richiede l’accesso a tonnellate di stato o a
una tonnellata di dati che hanno questo interrogabile
l’opzione di stato è davvero super utile
essenzialmente lo stato è completamente isolato
non lascia mai la vostra applicazione e
è completamente isolato e quindi resiliente
va bene, spostando un ulteriore passo avanti se
tu provi a metterne due in due insieme
Karim è in realtà utile per la costruzione
questi asincroni e liberamente accoppiati
tuttavia le applicazioni stateful stanno andando
fare un passo avanti sulla nostra applicazione che conosci
costruire fuori un po ‘più a
completa quella foto che ho mostrato prima
abbiamo questo inventario su stato
applicazione ha quella tabella e richiama
che ogni negozio statale è supportato da un
cambia argomento di blocco in Kafka che è
trasparente succede automaticamente e
questo è l’ aspetto del flusso di log delle modifiche
è come piangere ogni messaggio
corrisponde ad alcuni aggiornamenti grezzi che sono
fatto su quel tavolo e questo è come qualsiasi
altro argomento di Kafka disponibile per
tu se lo avessi, allora in realtà
poteri alle applicazioni a valle che
inizialmente abbiamo detto che in genere non lo sono
costruito in quel modo oggi e questo è il
riordinare l’applicazione di inventario, quindi cosa
ciò significa che si abbona a questo
cambia il flusso di log come qualsiasi altro Kafka
argomento con ogni messaggio su questo stream
controlla se quel conteggio di inventario ha
sceso al di sotto di una certa soglia se si
ha quindi attivato l’azione di riordino
questa applicazione è completamente diversa
da questa altra applicazione che è il
applicazione di adeguamento dei prezzi che cosa
lo fa in modo indipendente sottoscrive a
questo flusso di log delle modifiche e ci prova
proiettare la domanda per questo particolare
articolo e se la domanda è alta o
cambia quindi attiva le variazioni di prezzo
giusto e queste due applicazioni sono
indipendenti ci sono in tempo reale ma
sono anche totalmente accoppiati
fallimento dell’inventario di riordino
l’applicazione non ha nulla a che fare con
le domande di adeguamento del prezzo così
non solo tu sai che li hai progettati
servizi come processori di streaming sono
progettato come sapete servizi di stato
che sono liberamente accoppiati e cioè
cosa intendevo inizialmente quando l’ho detto
Io questa è l’idea che sai di usare
qualcosa come dopo gli spessori che consente
per eseguire l’ elaborazione del flusso push all’interno
la tua domanda e
aiuta a costruire questi accoppiati liberamente
micro-servizi, se si potrebbe chiamare così
una sorta di tema emergente attraverso Kafka
o flussi di Kafka, lo sai
la semplicità è valutata e la ragione
è che più cose hai dentro
sistemi distribuiti più cose voi
devono operare e operazioni in corso
sono assolutamente le cose più difficili che tu
sapere molto più difficile di costruire il
applicazione o addirittura risoluzione dei problemi
nella fase di sviluppo e quindi il
implicazione per questo per lo streaming
l’elaborazione è quella in genere se la tua
il sistema di elaborazione del flusso non ha
stato locale durevole quindi questo è quello che
finisci con Kafka che è
ancora tu conosci la pipeline dei dati ma
hai il framework di elaborazione del flusso
se non supporta lo stato sei
dipende da qualche tipo di database così
devi operare che questo è il tuo
codice di elaborazione stream che viene eseguito come
lavoro su questo quadro che davvero
aggiorna la tua vista finale ma poi se tu
se ci pensi se il tuo stream
il sistema di elaborazione non supporta il
capacità di ritrattamento o aggiornamento
il tuo codice allora ti rimane questo
pipeline parallela su cui si basa
Hadoop in modo da avere la stessa logica che
gira su Hadoop si aggiorna completamente
vista offline dello stesso database e
non se guardi la tua applicazione è
è piuttosto complesso che interroga questi due
guarda che si fonde è al volo e poi
ti dà alcuni di questi risultati in modo che
è quello che intendevo per te lo sai
anche gli sviluppatori di applicazioni
molte parti mobili potrebbero funzionare per a
sottoinsieme di un noto caso d’uso che tu
potrebbe dipendere da un cluster completamente gestito
per e potrebbe funzionare ma per
leggero sai l’elaborazione del flusso
all’interno di applicazioni che è anche troppo
molte parti mobili così questo è quello che abbiamo
prestato attenzione a flussi che è
sai che abbiamo preso questi aggregati
lo abbiamo fornito come locale durevole
stato quindi è disponibile fuori dalla scatola
non devi dipendere da un esterno
negozio di valore chiave di cui abbiamo preso l’idea
elaborazione gratuita ed è in realtà
disponibile come primitivo di prima classe
all’interno dei flussi di Kafka e Kafka così
non devi dipendere da un Hadoop
la pipeline basata essenzialmente si allontana
dall’architettura lambda è quello che
consente finalmente in questo semplificato
foto così potresti pensare di sapere
Flussi di Kafka è grande, ma è solo una
libreria in cima a Kafka che significa questo
funziona solo per i dati che sono all’interno
Kafka è fatto in questo modo per semplicità
per facilità di funzionamento, ma poi il
il problema a cui potresti pensare è bene
come fai a entrare e uscire dai tuoi dati?
Kafka nella versione online che è il
precedente versione di Kafka che avevamo
rilasciato Kafka Connect che è questo tu
conoscere un modo per costruire scalabile elastico
connettori ad altri sistemi che usano Kafka
l’idea è che questo strato risolva tutto
i problemi comuni di cui i connettori hanno bisogno
per risolvere quale scala e
partizionamento e bilanciamento del carico compensati
gestione poiché sai che questo è
esattamente il livello che ti permette di
esempio ETL i tuoi dati da una Cassandra
o database Oracle in Hadoop utilizzando
Connettori Kafka è stato brutalmente
circa quattro o cinque mesi da quando abbiamo
rilasciato Kafka Connect e la community
ha sviluppato fondamentalmente forse circa 30
connettori già in cima a questo a
vari sistemi come elasticsearch
MongoDB Cassandra qualcuno è andato anche io
avanti e ha scritto un ticker Bloomberg
fonte in modo da poter dare un’occhiata a
alcuni di questi connettori o addirittura sviluppare
il tuo adesso legandolo nel grande
immagine che è quello che volevo fare
ecco qual è questo che alcuni di noi
raggiunto mentre su LinkedIn e hanno
aiutato alcune aziende a trasferirsi a cui è
essenzialmente la possibilità di implementare a
Piattaforma di flusso di dati in base al Kafka
cuore del tuo data center questo è il
fondamento per costruire liberamente accoppiato
microservices un building block per
applicazioni o flusso stateful
processori o abilitando altri stream
sistemi di elaborazione per esistere a causa del
pipeline di dati e il feed di
dati che vanno nel tuo magazzino
ora se volevi provarlo
i flussi di tosse per la tosse sono stati rilasciati oggi
nell’ultima versione di apache kafka
che è la versione OU 10 che puoi ottenere
attraverso la tosse apache core the
piattaforma confluente sia connettere che
flussi sono è nuovo di zecca ci sono un sacco
di persone stavano saltando su queste idee se
hai bisogno di aiuto, noi facciamo una domanda bisettimanale
qualsiasi cosa chiami se lo volessi
partecipare o darci idee che puoi
ping su Twitter e questo è fondamentalmente
esso
Please follow and like us: