Executando o Kafka no Kubernetes na AWS

3

Tenho o seguinte cenário:

3 instâncias de nós espalhadas por 3 zonas de disponibilidade

  • 6 Agentes em execução no StatefulSets com volume externo da AWS para dados do Kafka.
  • Tamanho da instância: m4.2xlarge
  • Volume do EBS: st1 - 500 GiB
  • Nenhuma solicitação de limite e memória configurada no nível de recurso do Kubernetes (não é bom para produção - os limites de recurso devem ser definidos) 1 tópico, 6 partições, sem replicação. Librdkafka usado com Kafka versão 0.11.0

O produtor envia uma mensagem com tamanho de 100 bytes

Aqui o comando:

kubectl exec -it kafka-kafka-librdkafka -- examples/rdkafka_performance -P -t test -s 100 -b kafka-kafka-headless:9092 -X request.timeout.ms=900000 -X batch.num.messages=10000 -X queue.buffering.max.ms=1000

O resultado:

% Sending messages of size 100 bytes
% 500000 messages produced (50000000 bytes), 0 delivered (offset 0, 0 failed) in 1000ms: 0 msgs/s and 0.00 MB/s, 41 produce failures, 500000 in queue, no compression
% 1000000 messages produced (100000000 bytes), 500000 delivered (offset 0, 0 failed) in 2000ms: 249957 msgs/s and 25.00 MB/s, 65 produce failures, 500000 in queue, no compression
% 1525491 messages produced (152549100 bytes), 1025491 delivered (offset 0, 0 failed) in 3000ms: 341774 msgs/s and 34.18 MB/s, 90 produce failures, 500000 in queue, no compression
% 1958991 messages produced (195899100 bytes), 1525500 delivered (offset 0, 0 failed) in 4000ms: 381328 msgs/s and 38.13 MB/s, 120 produce failures, 433491 in queue, no compression
% 2232174 messages produced (223217400 bytes), 2028173 delivered (offset 0, 0 failed) in 5000ms: 405594 msgs/s and 40.56 MB/s, 150 produce failures, 204001 in queue, no compression
% 2622943 messages produced (262294300 bytes), 2528180 delivered (offset 0, 0 failed) in 6000ms: 421328 msgs/s and 42.13 MB/s, 161 produce failures, 94763 in queue, no compression
% 3145529 messages produced (314552900 bytes), 3035578 delivered (offset 0, 0 failed) in 7000ms: 433623 msgs/s and 43.36 MB/s, 176 produce failures, 109951 in queue, no compression
% 3675274 messages produced (367527400 bytes), 3498817 delivered (offset 0, 0 failed) in 8039ms: 435186 msgs/s and 43.52 MB/s, 196 produce failures, 176458 in queue, no compression
% 4181717 messages produced (418171700 bytes), 3961228 delivered (offset 0, 0 failed) in 9042ms: 438068 msgs/s and 43.81 MB/s, 213 produce failures, 220489 in queue, no compression
% 4669614 messages produced (466961400 bytes), 4499671 delivered (offset 0, 0 failed) in 10085ms: 446156 msgs/s and 44.62 MB/s, 230 produce failures, 169946 in queue, no compression
% 5071907 messages produced (507190700 bytes), 4964422 delivered (offset 0, 0 failed) in 11132ms: 445930 msgs/s and 44.59 MB/s, 230 produce failures, 107490 in queue, no compression
% 5638247 messages produced (563824700 bytes), 5392203 delivered (offset 0, 0 failed) in 12141ms: 444125 msgs/s and 44.41 MB/s, 231 produce failures, 246046 in queue, no compression

Com o recurso que temos, acho que estamos limitados em algum lugar. Você tem alguma idéia de onde poderia ser o gargalo?

    
por Mazzy 03.10.2017 / 12:45

1 resposta

0

Eu gerencio 3 clusters de kubernetes e 4 clusters de kafka (3 nós de kafka cada) no meu trabalho.

Eu NUNCA colocaria o kafka dentro do kubernetes. Não faz sentido algum.

Use apenas máquinas ec2 dedicadas para clusters de kafka, e conecte K8s VPCs com VPCs kafka.

O Kafka é um banco de dados, que se beneficia enormemente do acesso direto ao sistema operacional, e você pode ajustá-lo muito mais livremente do que a implementação do k8s.

O K8s não é um martelo universal, use-o para serviços e cronjobs e mantenha bancos de dados fora.

    
por 29.10.2017 / 12:01