Kafka ist ein leistungsstarkes, verteiltes Messaging-System, das von LinkedIn entwickelt wurde und häufig in Szenarien wie Logsammlung, Streaming-Datenverarbeitung, Online- und Offline-Nachrichtenverteilung und mehr eingesetzt wird. Obwohl Kafaka nicht als traditionelles MQ konzipiert ist, kann es in den meisten Fällen traditionelle Messaging-Systeme wie ActiveMQ ersetzen.
Kafka organisiert den Nachrichtenfluss nach Themen, und der Server, der die Nachrichten speichert, heißt Broker; Konsumenten können ein oder mehrere Themen abonnieren. Um die Last auszugleichen, können die Nachrichten eines Themas in mehrere Partitionen unterteilt werden, und je mehr Partitionen, desto höher ist die Parallelität und der Durchsatz von Kafka.
Kafka-Cluster benötigen Zookeeper-Unterstützung, um Cluster zu implementieren, und Zookeeper ist bereits in der neuesten Kafka-Distribution enthalten, die gleichzeitig einen Zookeeper-Server und einen Kafka-Server starten oder andere bestehende Zookeeper-Cluster nutzen kann.
Im Gegensatz zur traditionellen MQ müssen Verbraucher einen Offset für sich behalten und bei Nachrichten von Kafka erst nach dem aktuellen Offset abrufen. Kafkas Scala/Java-Client implementiert diesen Teil der Logik bereits, indem er den Offset im Zookeeper speichert. Jeder Verbraucher kann eine ID wählen, und Nutzer mit derselben ID erhalten dieselbe Nachricht nur einmal.Wenn alle Konsumenten eines Themas dieselbe ID verwenden, handelt es sich um eine traditionelle Warteschlange. Wenn jeder Verbraucher eine andere ID verwendet, handelt es sich um ein traditionelles Pub-Sub.
Rezension:
Kafka-Konsum
1. Konsumenten derselben group_id, nur ein Konsument kann Nachrichten konsumieren (Warteschlangen-Warteschlangen-Modus)
2. Verbraucher verschiedener group_id erhalten dieselben Nachrichten
Vorteile der Kafka
Verteilt und hochgradig skalierbar. Kafka-Cluster können transparent skaliert werden, um neue Server zum Cluster hinzuzufügen.
Hohe Leistung. Kafkas Leistung übertrifft bei weitem die traditioneller MQ-Implementierungen wie ActiveMQ und RabbitMQ, insbesondere Kafka, das ebenfalls Batch-Operationen unterstützt. Das folgende Bild zeigt die Ergebnisse des Stresstests der Verbraucherleistung von LinkedIn:
Fehlertoleranz. Daten von jeder Partition in Kafka werden auf mehrere Server repliziert. Wenn ein Makler scheitert, informiert der ZooKeeper-Dienst den Produzenten und den Verbraucher, die dann zu einem anderen Makler wechseln.
Nachteile der Kafka:
Wiederholen Sie die Nachrichten. Kafka garantiert nur, dass jede Nachricht mindestens einmal zugestellt wird, und obwohl die Chancen gering sind, besteht die Wahrscheinlichkeit, dass eine Nachricht mehrfach übergeben wird. Die Nachrichten sind außer Ordnung. Obwohl Nachrichten innerhalb einer Partition garantiert geordnet sind, ist bei mehreren Partitionen die Nachrichtenzustellung zwischen den Partitionen nicht garantiert. Komplexität. Kafka benötigt die Unterstützung von Zookeeper-Clustern, und Themen erfordern meist manuelle Arbeit zur Erstellung, Bereitstellung und Wartung teurer als allgemeine Nachrichtenwarteschlangen
.NET/C#-Nachrichtenwarteschlange Kafka-Operationen
Zuerst verwenden Sie .NET Core 3.1, um zwei neue Konsolenprojekte zu erstellen, nämlich Kafka-Consumer und Kafka-Producer
Verwenden Sie nuget, um das Confluent.Kafka-Paket so zu referenzieren, mit folgendem Befehl:
GitHub-Adresse:Der Hyperlink-Login ist sichtbar.
Wir starten zuerst das Producer-Programm, und wenn wir zuerst den Consumer starten, erhalten wir folgenden Fehler:
Fehler aufgetreten: Broker: Unbekanntes Thema oder Partition Dieser Artikel wird die Einstellungen umfassenEnableAutoOffsetStore ist falsch, das heißt, manuell den Versatzspeicher einzustellen (ähnlich einer manuellen Bestätigungsmeldung)
Verbraucher setzen OffsetStore nach dem Verbrauch nicht mehr
Versuche, den Producer zu verwenden, um zwei Nachrichten zu erzeugen, aktiviere den Verbraucherverbrauch, MaxPollIntervalMs = 10000 // 10 Sekunden ohne manuelle Einstellung, lass andere Clients konsumieren, natürlich wird es nicht innerhalb von 10 Sekunden von anderen Clients verbraucht.
MaxPollIntervalMs erklärt
Für fortgeschrittene Verbraucher ist die maximal erlaubte Zeit für Nachrichten zwischen Anrufen (zum Beispiel rd_kafka_consumer_poll()). Wenn dieses Intervall überschritten wird, gilt der Konsument als gescheitert und die Gruppe wird neu ausbalanciert, sodass die Partition einem anderen Mitglied der Konsumentengruppe zugewiesen wird. Warnung: Offset-Commits sind derzeit möglicherweise nicht möglich. Hinweis: Es wird empfohlen, für Anwendungen, die lange verarbeiten, "enable.auto.offset.store=false" zu setzen und dann den Offset explizit (mit offsets_store()) nach der Bearbeitung der Nachricht* zu speichern, um sicherzustellen, dass der Offset nicht automatisch vor Abschluss der Verarbeitung festgelegt wird. Überprüfen Sie einmal pro Sekunde im Abstand von zwei Sekunden. Weitere Informationen finden Sie unter KIP-62. Die Darstellungen sind wie folgt:
OffsetStore wird festgelegt, nachdem der Verbraucher seine Ausgaben abgeschlossen hat
Code
Nachdem die Einrichtung abgeschlossen ist, warte 10 Sekunden, dann funktioniert es immer nochLetzte Nachricht erhalten(Wenn der Verbraucher sich mit dem Broker verbindet,Beginne den Verbrauch aus der Offset-PositionWenn c.Commit(cr) gesetzt ist; Die letzte Nachricht wird nicht wiederholt empfangen.
Quellcode anzeigen
Commit den Offset + 1 Commit und ruft schließlich Librdkafka.topic_partition_list_destroy(cOffsets) auf;
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Setze eine andere GroupId
Versuche, eine andere GroupId über den Kommandozeilenparameter zu setzen und dann eine Nachricht über den Producer zu senden, wie im folgenden Bild gezeigt:
Sowohl clinet1 als auch client2Empfangen Sie historische Botschaften, und nachdem der Produzent eine Nachricht verschickt hat, werden beide fastNachrichten gleichzeitig empfangen。
Neue Verbraucher erhalten nur neue Nachrichten
Wie sorgt man dafür, dass ein neuer Client nur neue Nachrichten erhält und historische Daten ignoriert?
Die Einstellungen sind wie folgt:
Wie unten gezeigt:
Produzentencode
Folgendermaßen:
Verbrauchercode
Folgendermaßen:
Quellcode-Download
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
|