Der Reihe nach, genau einmal, schnell
(engineering.ab180.co)- Airbridge ordnet Ereignisse wie Anzeigenklicks, Installationen und Käufe in Echtzeit zu. Daher ist es nicht nur wichtig, Ereignisse schnell zu verarbeiten, sondern sie auch in der erforderlichen Reihenfolge zu verarbeiten und Verluste sowie Duplikate zu verhindern.
- Bisher wurden Kafka-Nachrichten in Micro-Batches abgerufen und je nach Ereignistyp sequenziell verarbeitet.
- Die Reihenfolge war leicht zu steuern, aber während auf die Verarbeitung vorangehender Ereignisse gewartet wurde, blieben andere Worker im Leerlauf.
- Wenn unterschiedliche Verarbeitungsgeschwindigkeiten der Worker mit einer Hot Partition zusammenkamen, stagnierte die Verarbeitungsgeschwindigkeit selbst bei einer Erweiterung der Serverkapazität.
- Um dieses Problem zu lösen, wurde Project Differential entworfen.
- Micro-Batches wurden abgeschafft, und je Ereignistyp liest ein
Consumerdasselbe Kafka Topic unabhängig. - Die Reihenfolge wird nicht für das gesamte Topic garantiert, sondern auf Partition-Ebene. Dabei ist die Konfiguration so ausgelegt, dass Ereignisse desselben Nutzerflusses, bei denen die Reihenfolge wichtig ist, möglichst in derselben Partition landen.
- Ein nachgelagerter Consumer darf die Verarbeitungsposition des vorgelagerten Consumers nicht überholen; dafür wird ein Sicherheitsabstand auf Basis von Offset oder Event Time eingehalten.
- Nachrichten, die der vorgelagerte Consumer nicht verarbeitet, werden an den nächsten Consumer weitergereicht und wiederverwendet. Ist der Buffer voll, wird in den Polling Mode gewechselt, in dem Kafka direkt gelesen wird.
- Micro-Batches wurden abgeschafft, und je Ereignistyp liest ein
- Intern gibt es pro Partition eine
ConsumerSuite/PartitionedConsumerChain, und einLimitedEventProcessorsteuert, dass der Checkpoint des vorgelagerten Consumers nicht überschritten wird.- Der
CommitManagersorgt dafür, dass auch während Buffering und asynchroner Verarbeitung nur tatsächlich abgeschlossene zusammenhängende Offsets an Kafka committet werden.
- Der
- Im Testbetrieb wurde bestätigt, dass der Ansatz ohne Ereignisverluste oder Duplikate funktioniert, und die Verarbeitungsgeschwindigkeit verbesserte sich gegenüber der bisherigen Micro-Batch-Methode um mehr als das 10-Fache.
- Es handelt sich um ein Beispiel dafür, statt eine vollständige globale Ordnung herzustellen, die für das tatsächliche Geschäft notwendige Reihenfolge best effort einzuhalten und zugleich Durchsatz zu sichern.
- Künftig werden eine Vereinfachung der Struktur, adaptive Flow Control für Situationen mit Spot-Instance-Terminierungen sowie Architekturverbesserungen geprüft, die sequenzielle Verarbeitung selbst reduzieren.
Noch keine Kommentare.