Kafka/AutoMQ
Die KafkaEventStore bietet ein verteiltes, Streaming-Event-Store für socketio4j unter Verwendung von Apache Kafka. Es ermöglicht horizontale Skalierung indem es Events über alle Serverinstanzen hinweg broadcastet, sodass Ereignisnachrichten, Raumbeitritte, -verlassen und andere interne Ereignisse zwischen den Knoten synchronisiert werden.
Wesentliche Merkmale
Verteilt & fehlertolerant — Ereignisse werden in Kafka persistiert und an jeden aktiven Knoten geliefert
Asynchrones & nicht-blockierendes Veröffentlichen — vermeidet das Blockieren von Netty-Event-Loops
Grenzen für Event-Wiederholung — beginnt das Konsumieren ab neueste Nachrichten nur (keine Historienwiedergabe)
Streaming-Broadcast-Semantik — jeder Knoten erhält alle Ereignisse, keine lastverteilten Nachrichten
Duplikatvermeidung — überspringt Ereignisse, die vom selben Knoten stammen (
nodeIdFilterung)
Wie es funktioniert
Jede Veröffentlichung speichert das Ereignis in einem Kafka-Topic (einzelnes oder pro Typ, abhängig vom Modus)
Jeder abonnierte Ereignistyp wird von einem dedizierten Daemon-Thread abgefragt
Nachrichten werden nur an lokale Listener geliefert, wenn sie von einem anderen Knoten stammen
Beschädigte („Poison-Pill“) Datensätze werden übersprungen, damit der Konsum weiterläuft
Modi
MULTI_CHANNEL
Jeder Ereignistyp erhält sein eigenes Kafka-Topic
Standard; Parallelität & Trennung
SINGLE_CHANNEL
Alle Ereignisse werden an ALL_SINGLE_CHANNEL
Wenn eine globale Reihenfolge über alle Ereignistypen erforderlich ist
Vorteile
👍 Funktioniert in Multi-Node-Umgebungen
👍 Synchronisiert socketio4j-Ereignisse über Server hinweg
👍 Sicheres Herunterfahren & Bereinigung von Listenern
👍 Keine Rückdruckbelastung auf Netty-Threads
Einschränkungen
ℹ️ Keine Punkt-zu-Punkt-Warteschlange — immer im Broadcast-Stil
ℹ️ Keine historische Wiedergabe — konsumiert nur ab den neuesten Offsets
ℹ️ Erfordert Verfügbarkeit des Kafka-Clusters
Zustellgarantie: Mindestens-einmal-Semantik — doppelte Zustellungen möglich; Listener sollten idempotent sein.
Zuletzt aktualisiert
War das hilfreich?