Kafka bei Wargaming: Blitz

Warum Kafka? Was sind Ihre Gesamteindrücke? Wie setzen sich die Cluster zusammen? Unter dem Strich - ein Dutzend kurze Fragen an Levon Avakyan, der bei Wargaming für Zuverlässigkeit, Anwendungsarchitektur, Infrastruktur und Produktion verantwortlich ist.



- Wie hast du dich für Kafka entschieden? Was wurde vorher verwendet? Welche Alternativen wurden in Betracht gezogen?

Keine sehr richtige Frage in Bezug auf die Tankentwicklung. Apache Kafka wurde bereits im Unternehmen für die Anforderungen unseres Data Warehouse verwendet, und anfangs gab es eine Integrationsaufgabe, und erst dann haben wir gesehen, dass Kafka für verschiedene Aufgaben verwendet werden kann.

- Wie viele Ereignisse werden von Ihrem Spielcluster generiert?

Ein Tankcluster ist ein Cluster von Clustern, das System ist verteilt und generiert Ereignisse in verschiedenen Kafka. Alle Cluster generieren durchschnittlich 12.000 Nachrichten, bei Spitzenwerten etwa 30.000 Nachrichten pro Sekunde.

- Und wie viele Cluster haben Sie und wie setzen sie sich zusammen?

Der größte zentrale Cluster besteht aus fünf Eisenknoten. Kleinere Cluster, die nur Tankperipheriegeräte bedienen, bestehen aus jeweils drei Knoten plus virtuellen Maschinen. Wir haben vier lokale Cluster für die GUS-Region.

- Wie viele Produzenten und Konsumenten sind Sie? Was sind die Lese- / Schreibraten?

Gute Frage. Für die lokale Peripherie Kafka ist der Produzent einer - ein Tankcluster, und es gibt Dutzende von Verbrauchern. Nach Raten: Bis zu 75.000 Nachrichten pro Sekunde werden im zentralen Cluster geschrieben, durchschnittlich 12.000, in lokalen Nachrichten bis zu siebentausend und im Durchschnitt dreitausend.

- Wie große Ereignisse schreiben Sie in Kafka? Gibt es Lieferfristen?

Limit 1 MB - niemand anderes hat gefragt. Für einige Verbraucher gibt es Einschränkungen hinsichtlich der Lieferzeit, für andere nicht. Einige lesen einmal pro Woche.

- Sind beim Sharding oder Replizieren interessante Funktionen und Fehler aufgetreten?

Datenverlust bei der Wiederwahl aufgrund von Themeneinstellungen. Eine schmutzige Wiederwahl war erlaubt und der falsche ISR wurde gewählt.

- Und ist es zufällig auf einer Festplatte oder einem Netzwerk gelandet?

Sie ruhten nicht im Netzwerk, wir haben 10-GB-Netzwerkschnittstellen. Sie ruhten auch nicht auf der Festplatte. Ruhte auf den fertigen Dateideskriptoren. Die Stabilität wurde nach einem Upgrade von java-1.7.0-openjdk-1.7.0.55-2.4.7.1.el6_5.x86_64 auf jdk1.8.0_66-1.8.0_66-fcs.x86_64 erreicht.

- Welchen Overhead bringt die JVM mit Kafka? Ist ein spezielles gc-Setup erforderlich? Wie viel Speicher verbraucht eine Instanz in Ihrem Fall?

12 GB Speicher sind zugewiesen, alles andere ist Standard.

- Mussten Sie spezielle Funktionen von Kafka verwenden? Protokollverdichtung?
Verwendete Protokollkomprimierung für einige Themen, jedoch nicht für das World of Tanks-Projekt. Eingeschlossen zu bestimmten Themen, aber das Ergebnis ist nicht klar, niemand gab Feedback. Offsets.retention.minutes wurde ebenfalls auf sieben Tage erhöht, sodass Concierges, die einmal pro Woche lesen, weiterhin dort lesen, wo sie aufgehört haben.

- Welche Python-Bibliotheken wurden für die Arbeit mit Kafka verwendet? Was hat dir gefallen

Nur einer meiner Berichte über Moscow Python Conf ++ befasst sich mit der Erfahrung mit der Verwendung verschiedener Python-Bibliotheken für Kafka in WoT. Unser Kapital ist Kafka-Python, Confluent-Kafka-Python, Aiokafka. Jede dieser Bibliotheken hat ihre Vor- und Nachteile.

- Was würden Sie über die Vor- und Nachteile des dateibasierten Speichers im Vergleich zum In-Memory sagen? Für welche Arten von Aufgaben können Sie die eine oder andere empfehlen?

Hier ist das Prinzip einfach. Auf dem Dateisystem ist es zuverlässiger, aber langsamer. Der Speicher ist schneller, aber die Zuverlässigkeit ist geringer. Außerdem eine wichtige Einschränkung des Volumens: Sie können Terabyte im Dateisystem speichern, aber wir verwenden immer noch Gigabyte im Speicher. Von hier aus können Sie ausgehend von einer bestimmten Implementierung viel phantasieren.

Basierend auf dem oben Gesagten: Wenn Sie schnell brauchen, ist das Volumen klein und die Sicherheit ist nicht wichtig, dann im Speicher, ansonsten betrachten wir dateibasiert.

- Allgemeine Eindrücke von Kafka? Wenn Sie jetzt die gleiche Aufgabe erledigen würden, würden Sie Kafka verlassen oder in Richtung anderer Lösungen schauen?

Kafka ist ein gutes und einfaches Tool, um von außen auf große Datenmengen zuzugreifen, die dann von verschiedenen Teams an verschiedenen Orten langsam für verschiedene Zwecke verarbeitet werden können. In WoT haben wir viele verschiedene Tools zur Lösung unserer Probleme. Wenn es also angebracht ist, Kafka zu wählen, wählen wir Kafka, wo nicht, schauen wir uns andere Tools an.

Wenn Sie sich für die Details unserer Erfahrungen mit Kafka interessieren, kommen Sie zu meinem Vortrag bei Moscow Python Conf ++ . Ich hoffe, viele finden es interessant und nützlich.

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


All Articles