Exactly Once V2
ALO observado
input
→ output committed
→ crash antes do offset commit
→ replay
→ duplicate output
O marcador ALO produziu um output antes de o offset estar confirmado. No restart, o mesmo input foi reaplicado. O lab marca a duplicação ALO como comprovada com offsets distintos.
EOS V2 observado
transaction aberta
→ broker ACK
→ read_uncommitted vê
→ read_committed não vê
→ SIGKILL
→ restart
→ apenas novo resultado committed fica visível em read_committed
No ensaio real application.id=kafkapay-risk-eos-ack-proof-v1, o marcador foi eos-ack-proof-1789082600000. O interceptor de producer observou o ACK do broker para o output físico partition=5 offset=0 antes do commit da transação. Nesse instante read_uncommitted viu o record; read_committed não viu. A JVM foi terminada com kill -9.
Após o restart, read_uncommitted mostrou offsets 0,2,4 para o mesmo eventId. read_committed mostrou apenas offset 4. Os offsets 0 e 2 eram tentativas transacionais não commitadas; offset 4 pertenceu ao resultado commitado depois da recuperação.
physical record != committed visible record
EOS V2 controla a atomicidade e a visibilidade de outputs Kafka com offsets Streams. Não resolve side effects externos, não redefine a semântica de joins/KTables e não transforma duas chamadas independentes da aplicação numa única operação. Para efeitos de negócio continuam necessários eventId, deduplicação e fronteiras transacionais apropriadas.