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:
read_committede o last stable offset (LSO) - por que um consumidor transacional lê até o LSO em vez de até o high watermark, e como uma transação aberta segura esse teto no lugar.- begin / commit / abort - o ciclo de vida transacional do produtor como uma máquina de estados que você conduz, incluindo o que um marcador de abort faz com os registros que cobre.
- O laço consume-process-produce -
sendOffsetsToTransaction, e por que fazer commit dos offsets dentro da transação é o que torna real o exactly-once de ponta a ponta. - Fencing - como um produtor zumbi é excluído pela epoch, e por que essa é a rede de segurança sob todo o modelo.
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 dewest.orders,easté dona deeast.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ê.