loading...
Kafka BR

Kafka: quantas partições por tópico?

fabiojose profile image Fabio José Updated on ・2 min read

Umas das grandes dúvidas ao utilizar o Kafka é saber quantas partições são necessárias ao criar novos tópicos. Bem, não existe uma fórmula geral, o que temos é uma aproximação detalhada neste excelente artigo How to choose the number of topics/partitions in a Kafka cluster?, escrito por Jun Rao. Outro artigo muito relevante é o Benchmarking Apache Kafka: 2 Million Writes Per Second, escrito por Jay Kreps. Nele são revelados resultados importantes sobre a taxa de transferência para producers e consumers.

Então, com base no artigo de Jun Rao, temos a fórmula aproximada para determinar o número de partições:

  MAX(t/p, t/c)

Onde:

  • t: taxa de transferência desejada
  • p: taxa de transferência do producer
  • c: taxa de transferência do consumer

Como o artigo sugere, o valor para a taxa de transferência do consumer depende de como ele processa os registros e por esse motivo devemos realizar nossas próprias medições ao invés de utilizar o valor-base descrito no artigo de Jay Kreps. Já para o valor referente ao producer, podemos tomar como base àquele revelado pelo artigo.

Uma dica é você realizar todas as medições, assim você também entenderá como é a sua infra kafka.

Aplicando a fórmula

Primeiro temos de definir qual é a unidade da nossa taxa de transferência, que poderia ser MB/s ou Mensagens/s. Mas as mensagens tem tamanhos variados e utilizá-las nas medições talvez não conduza a resultados realistas, então, MB/s é uma boa unidade de medida para aplicação da fórmula.

  • Unidade: MB/s (megabytes por segundo)

A medição é realizada empregando um producer e um tópico com apenas uma partição. Então, digamos que o resultado para nosso p, foi:

89 MB/s

A medição para taxa de transferência do consumer é similar, ou seja, apenas um tópico com uma única partição. Então, digamos que o valor de c é:

75 MB/s

Imagine que nosso alvo com relação a taxa de transferência seja 450 MB/s. Aplicando a fórmula de aproximação temos:

p = 89
c = 75
t = 450

  MAX(450/89, 450/75)

  MAX(5.1, 6) = 6

Portanto, o número de partições é 6.

Notadamente, não trata-se de uma fórmula para qualquer caso de uso, porém, agora temos um ponto de partida e não somente números mágicos.

Realize testes e coloque nos comentários quais foram os resultados, suas observações são valiósas.

Até o próximo artigo!

Posted on by:

fabiojose profile

Fabio José

@fabiojose

Someone who loves to code, to share knowledge and to be a father.

Kafka BR

Uma org com artigos técnicos sobre Kafka, todos escritos em pt_BR. Junto com nosso grupo no Telegram e no Meetup.com, buscamos compartilhar conhecimento. Meetup.com: https://www.meetup.com/pt-BR/Kafka-BR

Discussion

markdown guide
 
 

Fábio José de Moraes , excelente iniciativa e dimensionamento para particionamento inicial ! Dentro do que estamos trabalhando e casos reais, esta e a ordem de grandeza e cálculos e estudo reais e compartiho aqui.

Uso de 30 partições por tópico melhores praticas.
Usuários Esse é um bom número porque

(a) é alto o suficiente para atender a alguns requisitos realmente de alto rendimento,

(b) é baixo o suficiente para que você não atinja o limite tão cedo quanto quantas suportar,mesmo se você cria muitos tópicos em seu cluster Kafka

(c) é um número altamente composto, pois é igualmente divisível por 1, 2, 3, 5, 6, 10, 15 e 30.

Isso beneficia a camada de processamento porque resulta em em uma distribuição de carga de trabalho mais uniforme entre instâncias de aplicativos ao expandir horizontalmente (adicionar instâncias de aplicativos) e expandir (remover instâncias).

Uma partição "quente" pode carregar 10 vezes o peso de outra partição no mesmo tópico.