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.