Ich benutze Kafka und wir haben einen Anwendungsfall, um ein fehlertolerantes System zu erstellen, wo nicht einmal eine einzige Nachricht verpasst werden sollte. So, hier ist das Problem: Wenn Publishing zu Kafka aus irgendeinem Grund fehlschlägt (ZooKeeper down, Kafka Broker usw.) wie können wir diese Nachrichten robust handhaben und sie wieder abspielen, sobald die Dinge wieder zurück sind. Wie gesagt, wir können uns nicht einmal einen einzigen Nachrichtenausfall leisten. Ein weiterer Anwendungsfall ist, dass wir zu jedem beliebigen Zeitpunkt wissen müssen, wie viele Nachrichten aus irgendeinem Grund an Kafka nicht veröffentlicht wurden, d. H. Etwas wie Zählerfunktionalität, und diese Nachrichten müssen nun erneut veröffentlicht werden.Wie Kafka Publishing-Fehler in robuster Weise behandelt werden
Eine der Lösungen ist, diese Nachrichten in eine Datenbank zu pushen (wie Cassandra, wo Schreibvorgänge sehr schnell sind, aber wir brauchen auch Zählerfunktionalität und ich denke, dass die Cassandra-Zählerfunktion nicht so gut ist und wir diese nicht verwenden wollen.), die mit dieser Art von Ladung umgehen können und uns auch eine sehr genaue Zählereinrichtung zur Verfügung stellen.
Diese Frage ist mehr aus der Architektur Perspektive und dann welche Technologie zu verwenden, um das zu ermöglichen.
PS: Wir behandeln einige wie 3000TPS. Wenn also der Systemstart fehlschlägt, können diese fehlgeschlagenen Nachrichten in sehr kurzer Zeit sehr schnell wachsen. Wir verwenden Java-basierte Frameworks.
Danke für Ihre Hilfe!
Danke Chris! Ich verstehe, dass Kafka so konzipiert wurde, um mit einer solchen Situation fertig zu werden. Aber dies als ein Argument zu sagen, dass die Dinge immer so funktionieren, wie es soll, ist eine kühne Aussage und für mich ist es früher oder später zum Scheitern verurteilt.Nur um Ihnen ein Beispiel zu geben, obwohl Sie genug Broker und genug Zookeper-Instanzen haben, können die Dinge immer noch außer Kontrolle geraten. Zum Beispiel: Wenn ein Thema 3 Replikate hat und min.insync.replicas auf 2 gesetzt ist, wird das Schreiben auf den Broker nur dann erfolgreich sein, wenn 2 von 3 Repliken synchron sind. Wenn in diesem Fall das Replikat nicht synchronisiert ist, wird keine neue Anfrage akzeptiert. – Coder
@Coder Dies könnte ein hilfreiches Blog sein, um sicherzustellen, dass Ihr Cluster richtig konfiguriert ist, um Ihre nacheilenden Replikate als Mitglieder der ISR zu behalten: http://www.confluent.io/blog/handsfree-kafka-replication-a -lesson-in-operational-simplicity/ –
Danke @Chris das ist nützlich! – Coder