Kafka na Wargaming: Blitz

Por que Kafka? Quais são as suas impressões gerais? Qual é a composição dos clusters? Sob o corte - uma dúzia de perguntas curtas para Levon Avakyan, responsável pela confiabilidade, arquitetura de aplicativos, infraestrutura e produção na Wargaming.



- Como você escolheu Kafka? O que foi usado antes? Quais alternativas foram consideradas?

Não é uma pergunta muito correta em relação ao desenvolvimento do tanque. O Apache Kafka já era usado na empresa para as necessidades do nosso Data Warehouse e, inicialmente, havia uma tarefa de integração, e só então vimos que o Kafka pode ser usado para diferentes tarefas.

- Quantos eventos são gerados pelo seu cluster de jogos?

Um cluster de tanques é um cluster de clusters, o sistema é distribuído e gera eventos em diferentes Kafka. Todos os clusters geram uma média de 12 mil mensagens, com picos de aproximadamente 30 mil mensagens por segundo.

- E quantos clusters você possui e qual é a composição deles?

O maior cluster central consiste em cinco nós de ferro. Clusters menores que atendem apenas a periféricos de tanques têm cerca de três nós cada, mais máquinas virtuais. Temos quatro grupos locais para a região da CEI.

- Quantos produtores e consumidores você é? Quais são as taxas de leitura / gravação?

Boa pergunta Para Kafka periférico local, o produtor é um - um cluster de tanques e há dezenas de consumidores. Por taxas: até 75 mil mensagens por segundo são gravadas no cluster central, em média 12 mil, nas locais até sete mil e em média três mil.

- Como grandes eventos você escreve em Kafka? Existem prazos de entrega?

Limite de 1 MB - ninguém mais perguntou. Existem restrições quanto ao prazo de entrega para alguns consumidores, para outros não. Alguns leem uma vez por semana.

- Você encontrou algum recurso interessante e erro ao fragmentar ou replicar?

Perda de dados enfrentada durante a reeleição devido a configurações de tópico. Reeleição suja foi permitida e o ISR errado foi escolhido.

- E aconteceu contra um disco ou rede?

Eles não descansavam na rede, temos interfaces de rede de 10 Gb. Eles também não descansaram no disco. Descansou nos descritores de arquivo finalizados. A estabilidade veio após uma atualização do java-1.7.0-openjdk-1.7.0.55-2.4.7.1.el6_5.x86_64 para o jdk1.8.0_66-1.8.0_66-fcs.x86_64.

- Que sobrecarga a JVM traz com Kafka? É necessária a configuração especial do gc? Quanta memória uma instância consome no seu caso?

12 GB de memória são alocados, tudo o resto é padrão.

- Você teve que usar algum recurso especial do Kafka? Compactação de log?
Utilizou a compactação de log para alguns tópicos, mas não para o projeto World of Tanks. Incluído em tópicos específicos, mas o resultado não é claro, ninguém deu feedback. Offsets.retention.minutes também foi aumentado para sete dias, para que os concierges que liam uma vez por semana continuassem a ler de onde pararam.

- Quais bibliotecas Python foram usadas para trabalhar com Kafka? Do que você gostou?

Apenas um dos meus relatórios sobre o Moscow Python Conf ++ será sobre a experiência de usar várias bibliotecas Python para Kafka no WoT. Nosso ativo é Kafka-python, confluent-kafka-python, aiokafka. Cada uma dessas bibliotecas tem seus prós e contras.

- O que você diria sobre as vantagens e desvantagens do armazenamento baseado em arquivo em comparação com a memória? Para que tipos de tarefas você recomendaria uma ou outra?

Aqui o princípio é simples. No sistema de arquivos, é mais confiável, mas mais lento. A memória é mais rápida, mas a confiabilidade é menor. Além disso, uma limitação importante no volume: você pode armazenar terabytes no sistema de arquivos, mas ainda usamos gigabytes na memória. A partir daqui, você pode fantasiar muito, a partir de uma implementação específica.

Com base no acima exposto: se você precisar rapidamente, o volume é pequeno e a segurança não é importante; depois, na memória, caso contrário, analisamos os arquivos.

- Impressões gerais de Kafka? Se você fizesse a mesma tarefa agora, deixaria Kafka ou procuraria outras soluções?

O Kafka é uma ferramenta boa e simples para fornecer acesso externo a grandes quantidades de dados, que podem ser processados ​​lentamente para diferentes fins, por equipes diferentes em locais diferentes. No WoT, temos muitas ferramentas diferentes para resolver nossos problemas; portanto, onde é apropriado escolher Kafka, escolhemos Kafka; caso contrário, examinamos outras ferramentas.

Novamente, se você estiver interessado nos detalhes de nossa experiência com Kafka, venha para minha palestra no Moscow Python Conf ++ . Espero que muitos achem interessante e útil.

Source: https://habr.com/ru/post/pt425703/


All Articles