A v1.4 acrescenta o módulo de transações ao Kafka Simulator - 10 novos cenários sobre o assunto que os engenheiros mais aprovam com um aceno de cabeça e mais raramente veem de fato acontecer: a semântica exactly-once. O currículo chega a 55 de 122.

O que há na v1.4

As transações transformam um fluxo de escritas em uma unidade atômica, e mudam aquilo que um consumidor tem permissão para ver:

Exactly-once é difícil de ensinar porque muito dele é invisível: os marcadores, o LSO, as epochs e um consumidor que pula silenciosamente os registros abortados. O simulador coloca tudo isso na linha do tempo - dá para ver o LSO ficar parado sob uma transação aberta e pular para a frente no instante em que ela faz commit.

Novo tipo de cluster no modo livre: ativo/ativo

A escada de topologias que começou na v1.3 com o ativo/passivo continua subindo: o seletor de cluster do modo livre ganha uma terceira forma - Ativo / ativo: duas regiões, ambas aceitando escritas, cada uma replicando para a outra.

Não é, deliberadamente, “o ativo/passivo com a seta duplicada”. A configuração padrão é simétrica:

  • Cada região é dona do seu próprio tópico. west é dona de west.orders, east é dona de east.orders, e cada um é replicado como somente leitura para a outra região - assim os dois lados guardam o fluxo inteiro sem ambiguidade sobre quem pode escrever com o mesmo nome.
  • Cada região escreve local e lê global. Um produtor só escreve no tópico da sua própria região; o grupo de consumidores de cada região lê tanto o tópico local quanto a cópia replicada, por isso cada registro é visto uma vez por lado.
  • Cada região é um cluster próprio. Ambas rodam um quórum KRaft independente, por isso você pode matar os controladores de uma região - ou a região inteira - e observar o que o lado sobrevivente consegue e deixa de conseguir fazer.

É esse último ponto que dá o contraste nítido com as garantias transacionais que este pacote ensina: exactly-once é uma promessa por cluster, e um par ativo/ativo são dois clusters. Tudo o que o módulo de transações oferece vale dentro de uma região e para no mirror.

O currículo de DR que explica estas formas continua previsto para a v1.8 - os sandboxes chegam primeiro de propósito, para que você tenha onde experimentar as ideias antes que os cenários as narrem.

Construído sobre a replicação

Este pacote se apoia diretamente na v1.3. Uma transação é uma garantia de durabilidade com atomicidade acrescentada por cima, por isso o ISR e o high watermark que você aprendeu a ler ali continuam sendo o chão aqui - o LSO é apenas um teto mais estrito acima deles.

Abra o simulador, comece uma transação, produza dentro dela e aborte-a - e depois veja o que um consumidor read_committed vê e não vê.