Kafka en Wargaming: Blitz

¿Por qué kafka? ¿Cuáles son sus impresiones generales? ¿Cuál es la composición de los grupos? Bajo el corte: una docena de preguntas cortas para Levon Avakyan, quien es responsable de la confiabilidad, la arquitectura de la aplicación, la infraestructura y la producción en Wargaming.



- ¿Cómo elegiste a Kafka? ¿Qué se usó antes? ¿Qué alternativas se consideraron?

No es una pregunta muy correcta en relación con el desarrollo del tanque. Apache Kafka ya se usaba en la compañía para las necesidades de nuestro Data Warehouse, e inicialmente había una tarea de integración, y solo entonces vimos que Kafka se puede usar para diferentes tareas.

- ¿Cuántos eventos genera tu grupo de juegos?

Un grupo de tanques es un grupo de grupos, el sistema se distribuye y genera eventos en diferentes Kafka. Todos los clústeres generan un promedio de 12 mil mensajes, en los picos unos 30 mil mensajes por segundo.

- ¿Y cuántos grupos tienes y cuál es su composición?

El grupo central más grande consta de cinco nodos de hierro. Los clústeres más pequeños que sirven solo a los periféricos de tanques son aproximadamente tres nodos cada uno más máquinas virtuales. Tenemos cuatro grupos locales para la región de la CEI.

- ¿Cuántos productores y consumidores eres? ¿Cuáles son las tasas de lectura / escritura?

Buena pregunta Para el periférico local Kafka, el productor es uno: un grupo de tanques y hay docenas de consumidores. Por tasas: se escriben hasta 75 mil mensajes por segundo en el clúster central, en promedio 12 mil, en los locales hasta siete mil y en promedio tres mil.

- ¿Qué tan grandes eventos escribes en Kafka? ¿Hay algún límite de tiempo de entrega?

Límite de 1 MB: nadie más preguntó. Hay restricciones en el tiempo de entrega para algunos consumidores, para otros no. Algunos leen una vez a la semana.

- ¿Encontró características o errores interesantes al fragmentar o replicar?

Pérdida de datos enfrentada durante la reelección debido a la configuración del tema. Se permitió la reelección sucia y se eligió el ISR incorrecto.

- ¿Y pasó a descansar contra un disco o red?

No descansaron en la red, tenemos interfaces de red de 10 Gb. Tampoco descansaron contra el disco. Descansado en los descriptores de archivo terminados. La estabilidad se produjo después de una actualización de java-1.7.0-openjdk-1.7.0.55-2.4.7.1.el6_5.x86_64 a jdk1.8.0_66-1.8.0_66-fcs.x86_64.

- ¿Qué gastos generales trae la JVM con Kafka? ¿Se requiere una configuración especial de gc? ¿Cuánta memoria consume una instancia en su caso?

Se asignan 12 GB de memoria, todo lo demás es estándar.

- ¿Tuviste que usar alguna característica especial de Kafka? Compactación de registro?
Utilicé Log Compaction para algunos temas, pero no para el proyecto World of Tanks. Incluido en temas específicos, pero el resultado no está claro, nadie dio su opinión. Offsets.retention.minutes también se aumentó hasta siete días, por lo que los conserjes que leen una vez por semana continúan leyendo desde donde lo dejaron.

- ¿Qué bibliotecas de Python se usaron para trabajar con Kafka? Que te gusto

Solo uno de mis informes sobre Moscow Python Conf ++ será sobre la experiencia de usar varias bibliotecas de Python para Kafka en WoT. Nuestro activo es Kafka-python, confluent-kafka-python, aiokafka. Cada una de estas bibliotecas tiene sus pros y sus contras.

- ¿Qué diría sobre las ventajas y desventajas del almacenamiento basado en archivos en comparación con la memoria interna? ¿Para qué tipo de tareas podría recomendar una u otra?

Aquí el principio es simple. En el sistema de archivos es más confiable, pero más lento. La memoria es más rápida, pero la confiabilidad es menor. Además, una limitación importante en el volumen: puede almacenar terabytes en el sistema de archivos, pero aún utilizamos gigabytes en la memoria. Desde aquí puedes fantasear mucho, a partir de una implementación específica.

Con base en lo anterior: si necesita hacerlo rápidamente, el volumen es pequeño y la seguridad no es importante, entonces en la memoria, de lo contrario, miramos a los archivos.

- ¿Impresiones generales de Kafka? Si tuviera que hacer la misma tarea ahora, ¿dejaría Kafka o buscaría otras soluciones?

Kafka es una herramienta buena y simple para proporcionar acceso desde el exterior a grandes cantidades de datos, que luego pueden ser procesados ​​lentamente para diferentes propósitos, por diferentes equipos en diferentes lugares. En WoT, tenemos muchas herramientas diferentes para resolver nuestros problemas, por lo que cuando es apropiado elegir Kafka, elegimos Kafka, donde no, buscamos otras herramientas.

Nuevamente, si está interesado en los detalles de nuestra experiencia con Kafka, venga a mi charla en Moscow Python Conf ++ . Espero que muchos lo encuentren interesante y útil.

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


All Articles