DEV Community

Fabio José for Kafka BR

Posted on • Edited on

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

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!

Top comments (3)

Collapse
 
alvarobacelar profile image
Álvaro Bacelar Kafka BR

Excelente!

Collapse
 
fabiojose profile image
Fabio José Kafka BR

Obrigado Álvaro!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.