Dois pacotes saem juntos: v1.5 - Armazenamento e ciclo de vida e v1.6 - Operação, controlador e cotas. Juntos, eles trazem ao Kafka Simulator 19 novos cenários, o currículo chega a 74 de 122, e o modo livre termina a escada de formas de cluster começada na v1.3.

Desta vez começamos pelo modo livre, porque esses dois desbloqueios são os mais pedidos.

Modo livre: a escada de topologias está completa

Desde a v1.3 o sandbox ganhava uma forma de cluster por pacote: primeiro ativo/passivo, depois ativo/ativo. Ambos são dois clusters ligados por um mirror assíncrono. As duas formas que chegam agora são de outro tipo: um só cluster esticado entre datacenters, onde a replicação é síncrona e o próprio ISR atravessa a WAN.

A diferença aparece assim que algo falha:

  • Em um par espelhado, perder uma região é um failover: você promove o outro lado e aceita o que o mirror ainda não tinha copiado.
  • Em um cluster esticado, perder um DC é um evento de replicação: o ISR encolhe, e se você ainda pode escrever depende apenas de min.insync.replicas.

3-DC esticado (novo na v1.5)

Três datacenters, um cluster. O sandbox padrão traz um broker e um controlador em cada um de dc-a, dc-b e dc-c, com os brokers intercalados para que o posicionamento round-robin espalhe as réplicas de cada partição pelos três locais. Três partições, por isso cada DC abre com um líder natural, por isso a disposição mostra liderança equilibrada entre DCs em vez de uma partição solitária.

Há um quórum KRaft distribuído pelos três locais, não um por região. Mate um DC e você perde um votante em três; os dois restantes continuam formando maioria e o cluster continua decidindo.

2,5-DC esticado (novo na v1.6)

O último degrau: dois datacenters de dados mais um terceiro local testemunha que detém um voto de controlador e nenhum dado.

É a forma MRC da Confluent. Cada DC de dados recebe 2 réplicas síncronas e 1 observador - RF 4 no conjunto síncrono, com min.insync.replicas igual a 3. Duas coisas sobre os observadores:

  • Não contam para o ISR, por isso não seguram uma escrita acks=all. Uma réplica do outro lado da WAN que condicionasse cada commit seria um desastre de latência; um observador é como você mantém uma cópia remota sem pagar por ela no caminho de escrita.
  • Quando o ISR cai abaixo de min.insync.replicas, um observador pode ser promovido automaticamente para restaurar a durabilidade. Por padrão o sandbox promove na queda do ISR e rebaixa de novo quando o DC se recupera; ele também pode ficar promovido, ou você desliga a automação e faz à mão.

A testemunha se encaixa diretamente nos cenários de controlador desta entrega. Um quórum quer um número ímpar de votantes, e comprar um terceiro datacenter completo para obtê-lo é caro - por isso você compra meio. O cenário 06.0.2 (“quórum KRaft”) termina exatamente na falha que a testemunha existe para evitar; agora você pode montar as duas configurações no sandbox e compará-las.

Com isto, as cinco formas de cluster estão disponíveis: DC único, ativo/passivo, ativo/ativo, 3-DC esticado e 2,5-DC esticado. Cada desbloqueio restante do modo livre - o laboratório de falhas na v1.7, o terminal CLI do Kafka na v1.8, a governança na v2.0 - é uma capacidade nova, não uma forma nova.

A mesma ressalva da v1.3: o currículo de DR que narra estas topologias continua previsto para a v1.8. As formas chegam primeiro de propósito, para que haja onde experimentar as ideias antes que os cenários as expliquem.

Enquanto isso, se você quiser ler mais sobre arquiteturas multirregião, o guia da SoftwareMill sobre recuperação de desastres e arquiteturas multirregião no Apache Kafka é um tratamento aprofundado dos compromissos que estas formas codificam. Vale a pena deixá-lo aberto em outra aba enquanto você brinca com o sandbox.

Os cenários

v1.5 - Armazenamento e ciclo de vida (9 cenários)

Um log do Kafka não é uma fita infinita. Este módulo cobre em três grupos o que acontece com os registros depois de escritos.

Retenção - retention.ms e retention.bytes avançando o log start offset, e o que recebe um consumidor que pede um offset já apagado pela retenção (OFFSET_OUT_OF_RANGE, e o reset que vem em seguida).

Compactação - cleanup.policy=compact guardando o último valor por chave, preservando offsets e deixando buracos; tombstones apagando uma chave, com delete.retention.ms como janela de carência para um consumidor observar a exclusão antes de ela ser purgada; e compact,delete rodando as duas políticas juntas.

Armazenamento em camadas - descarregar um prefixo envelhecido do log para a camada remota, lê-lo de volta, e a diferença entre retenção local e total. É o grupo que mais muda o dimensionamento de um cluster: a retenção local deixa de ser o que limita até onde atrás um consumidor pode ler.

v1.6 - o plano de controle (kraft, 4 cenários)

O que o controlador faz, e o que para quando ele não está:

  • O trabalho do controlador e o quórum KRaft - o controlador mantém consistentes os metadados, não os dados. Perca a maioria do quórum e não há controlador: os líderes ficam onde estão e nada de novo é decidido até que um votante volte.
  • Failover do controlador e recuperação de metadados - um novo controlador ativo precisa alcançar o offset de metadados confirmado antes de poder servir, e é por isso que as eleições congelam por um momento após um failover.
  • ZooKeeper versus KRaft - o mesmo cluster sob dois planos de controle, lado a lado.

v1.6 - operação (operations, 6 cenários)

O que um operador muda em um cluster em produção, e o que cada mudança custa:

  • Escalar para fora e o rebalanceamento que vem em seguida; escalar para dentro, drenando um broker antes de removê-lo.
  • Reatribuição manual de partições, e a mesma reatribuição limitada sob carga - onde você vê uma réplica nova entrar tarde no ISR porque colocou um teto no seu ritmo de recuperação para proteger o tráfego ao vivo.
  • Alterações de configuração a quente e cotas de cliente que limitam um produtor atrasando as respostas em vez de descartar dados.

O que vem a seguir

74 de 122 cenários, sete pacotes entregues e um sandbox de modo livre que já consegue modelar todas as formas de cluster a que o resto do currículo vai se referir. A seguir vem a v1.7 e o laboratório de falhas: injetar mortes de brokers e partições de rede em qualquer uma dessas cinco formas, sob demanda.

Abra o simulador, inicie um sandbox de 2,5-DC e mate um DC de dados, e depois veja um observador ser promovido para manter você acima de min.insync.replicas.