Documentation / Kafka Streams

11

Exactly Once V2

Comparação observada entre replay ALO e visibilidade transacional EOS V2.

LAB-VERIFIEDLABKAFKA 4.3.1

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.