Banco di prova dell'ingestione. Generato il 11 agosto 2026 alle 11:12 UTC.
Che cosa state guardando, per davvero.
Il codice qui sotto è quello di produzione: lo stesso consumer, lo stesso archivio, lo stesso traduttore. Quello che non è reale è la sorgente — i messaggi vengono da un finto server che parla il protocollo del concessionario, alimentato dai campioni pseudonimizzati.
Il flusso vero non è ancora raggiungibile: il token
è valido, ma il servizio risponde 403 ip_denied finché Vincitu non
autorizza l'IP di questa macchina.
Non c'è Kafka da questa parte, ed è voluto. Kafka sta dalla loro parte: a noi lo espongono come flusso SSE su HTTP. Mettere un broker qui in mezzo aggiungerebbe un pezzo da gestire senza aggiungere niente che l'archivio grezzo non faccia già.
Il consumer si collega senza posizione: prende il flusso dal vivo, archivia ogni messaggio come arriva e segna dove è rimasto.
| parte da | arriva a | durata | tradotti | poi |
|---|---|---|---|---|
dal vivo |
1786446762868-23 |
3.0 s | 24 | riprova |
Il server chiude a metà senza preavviso. Il consumer non perde quello che aveva già scritto e conserva l'ultima posizione utile.
| parte da | arriva a | durata | tradotti | poi |
|---|---|---|---|---|
dal vivo |
1786446764954-10 |
1.3 s | 11 | riprova |
Alla riconnessione dichiara Last-Event-ID e riparte esattamente da lì. La posizione di partenza è quella con cui era caduto.
| parte da | arriva a | durata | tradotti | poi |
|---|---|---|---|---|
1786446764954-10 |
1786446766789-11 |
1.5 s | 21 | riprova |
La posizione richiesta non è più in buffer: il server risponde lag. Il buco viene messo agli atti invece di essere ignorato.
| parte da | arriva a | durata | tradotti | poi |
|---|---|---|---|---|
1786446768246-5 |
1786446769956-9 |
1.3 s | 15 | riprova |
Il server chiude con revoked. Il consumer smette di ritentare: insistere su credenziali revocate è un modo per farsi bloccare l'IP.
| parte da | arriva a | durata | tradotti | poi |
|---|---|---|---|---|
dal vivo |
1786446771418-7 |
1.0 s | 7 | si ferma |
L'archivio tiene i messaggi come arrivano, prima di tradurli. È la sola assicurazione contro un errore di mappatura scoperto tardi: la traduzione si può rifare, i dati passati no — il flusso ha una finestra di ripresa di circa quaranta minuti.
| messaggi archiviati | peso compresso | per messaggio | stima a 8 msg/s |
|---|---|---|---|
| 78 | 12.4 KB | 162.5 byte | ~107 MB al giorno |
Far scorrere i campioni tutti insieme ha rivelato un difetto che le prove
per singolo messaggio non potevano vedere: TransactionID non
identifica un movimento. Lo stesso valore 1785484692763 sta sulla
giocata GeV e sulla sua perdita, e sull'erogazione di un bonus il campo è
vuoto. La chiave è diventata TransactionTicket, distinto su tutti
i campioni e sempre valorizzato.
Una collisione di chiavi, a differenza di uno scarto, non lascia traccia nei contatori: due movimenti diventano uno e nessuno se ne accorge.
Le pastiglie tipo non previsto qui sopra sono
l'altra cosa che la demo ha reso visibile: sono i messaggi PromoDim
e PromoFact, che il traduttore non copre ancora. Servono
all'attribuzione delle campagne e vanno affrontati con il sotto-progetto che se
ne occupa.