Προγραμματισμός

Τρόπος χρήσης των μηνυμάτων Apache Kafka στο .Net

Ο Apache Kafka είναι ένας μεσίτης ανοιχτού κώδικα, διανεμημένος, επεκτάσιμος, υψηλών επιδόσεων, δημοσίευσης-εγγραφής. Είναι μια εξαιρετική επιλογή για οικοδομικά συστήματα ικανά να επεξεργάζονται μεγάλους όγκους δεδομένων. Σε αυτό το άρθρο θα δούμε πώς μπορούμε να δημιουργήσουμε μια εφαρμογή παραγωγού και καταναλωτή για την Kafka στο C #.

Για να ξεκινήσετε να χρησιμοποιείτε το Kafka, πρέπει να κατεβάσετε το Kafka και το ZooKeeper και να τα εγκαταστήσετε στο σύστημά σας. Αυτό το άρθρο DZone περιέχει αναλυτικές οδηγίες για τη ρύθμιση του Kafka και του ZooKeeper στα Windows. Όταν ολοκληρώσετε τη ρύθμιση, ξεκινήστε το ZooKeeper και την Kafka και συναντήστε με ξανά εδώ.

Αρχιτεκτονική Apache Kafka

Σε αυτήν την ενότητα, θα εξετάσουμε τα αρχιτεκτονικά στοιχεία και τη σχετική ορολογία στην Κάφκα. Βασικά, το Kafka αποτελείται από τα ακόλουθα στοιχεία:

  • Kafka Cluster — μια συλλογή από έναν ή περισσότερους διακομιστές γνωστούς ως μεσίτες
  • Παραγωγός - το στοιχείο που χρησιμοποιείται για τη δημοσίευση μηνυμάτων
  • Καταναλωτής - το στοιχείο που χρησιμοποιείται για την ανάκτηση ή την κατανάλωση μηνυμάτων
  • ZooKeeper - μια κεντρική υπηρεσία συντονισμού που χρησιμοποιείται για τη διατήρηση πληροφοριών διαμόρφωσης σε κόμβους συμπλέγματος σε κατανεμημένο περιβάλλον

Η βασική ενότητα δεδομένων στην Κάφκα είναι ένα μήνυμα. Ένα μήνυμα στην Κάφκα αντιπροσωπεύεται ως ζεύγος κλειδιού-τιμής. Η Kafka μετατρέπει όλα τα μηνύματα σε πίνακες byte. Πρέπει να σημειωθεί ότι οι επικοινωνίες μεταξύ των παραγωγών, των καταναλωτών και των ομάδων στην Κάφκα χρησιμοποιούν το πρωτόκολλο TCP. Κάθε διακομιστής σε ένα σύμπλεγμα Kafka είναι γνωστός ως μεσίτης. Μπορείτε να κλιμακώσετε το Kafka οριζόντια απλά προσθέτοντας επιπλέον μεσίτες στο σύμπλεγμα.

Το παρακάτω διάγραμμα απεικονίζει τα αρχιτεκτονικά στοιχεία στην Κάφκα - μια προβολή υψηλού επιπέδου.

ΙΔΡΥΜΑ Apache

Ένα θέμα στην Κάφκα αντιπροσωπεύει μια λογική συλλογή μηνυμάτων. Μπορείτε να το θεωρήσετε ως ροή ή κατηγορία στην οποία ένας παραγωγός μπορεί να δημοσιεύσει μηνύματα. Παρεμπιπτόντως, ένας μεσίτης της Kafka περιέχει ένα ή περισσότερα θέματα που με τη σειρά τους χωρίζονται σε ένα ή περισσότερα διαμερίσματα. Ένα διαμέρισμα ορίζεται ως μια ταξινομημένη ακολουθία μηνυμάτων. Τα διαμερίσματα είναι το κλειδί για την ικανότητα του Kafka να κλιμακώνεται δυναμικά, καθώς τα διαμερίσματα κατανέμονται σε πολλαπλούς μεσίτες.

Μπορείτε να έχετε έναν ή περισσότερους παραγωγούς που ωθούν μηνύματα σε ένα σύμπλεγμα σε οποιαδήποτε δεδομένη χρονική στιγμή. Ένας παραγωγός στην Κάφκα δημοσιεύει μηνύματα σε ένα συγκεκριμένο θέμα και ένας καταναλωτής εγγράφεται σε ένα θέμα για να λαμβάνει τα μηνύματα.

Επιλογή μεταξύ Kafka και RabbitMQ

Τόσο το Kafka όσο και το RabbitMQ είναι δημοφιλείς μεσίτες ανοιχτού κώδικα που χρησιμοποιούν ευρέως εδώ και αρκετό καιρό. Πότε πρέπει να επιλέξετε το Kafka έναντι του RabbitMQ; Η επιλογή εξαρτάται από μερικούς παράγοντες.

Το RabbitMQ είναι ένας μεσίτης γρήγορου μηνύματος γραμμένος στο Erlang. Οι πλούσιες δυνατότητες δρομολόγησης και η δυνατότητα προσφοράς ανά αναγνώριση μηνυμάτων είναι ισχυροί λόγοι για τη χρήση του. Το RabbitMQ παρέχει επίσης μια φιλική προς το χρήστη διεπαφή ιστού που μπορείτε να χρησιμοποιήσετε για την παρακολούθηση του διακομιστή RabbitMQ. Ρίξτε μια ματιά στο άρθρο μου για να μάθετε πώς να δουλεύω με το RabbitMQ στο .Net.

Ωστόσο, όταν πρόκειται για την υποστήριξη μεγάλων εφαρμογών, το Kafka κλιμακώνεται πολύ καλύτερα από το RabbitMQ - το μόνο που χρειάζεται να κάνετε είναι να προσθέσετε περισσότερα διαμερίσματα. Θα πρέπει επίσης να σημειωθεί ότι τα συμπλέγματα RabbitMQ δεν ανέχονται κατατμήσεις δικτύου. Εάν σκοπεύετε να ομαδοποιήσετε διακομιστές RabbitMQ, θα πρέπει αντ 'αυτού να χρησιμοποιήσετε ομοσπονδίες. Μπορείτε να διαβάσετε περισσότερα για τα συμπλέγματα RabbitMQ και τα διαμερίσματα δικτύου εδώ.

Η Kafka ξεπερνά επίσης καθαρά το RabbitMQ στην απόδοση. Ένα μόνο στιγμιότυπο Kafka μπορεί να χειριστεί 100K μηνύματα ανά δευτερόλεπτο, έναντι 20K μηνυμάτων ανά δευτερόλεπτο για το RabbitMQ. Το Kafka είναι επίσης μια καλή επιλογή όταν θέλετε να μεταδώσετε μηνύματα με χαμηλό λανθάνοντα χρόνο για να υποστηρίξετε τους μαζικούς καταναλωτές, υποθέτοντας ότι οι καταναλωτές θα μπορούσαν να είναι είτε online είτε εκτός σύνδεσης.

Δημιουργία του παραγωγού της Kafka και του καταναλωτή της Kafka

Σε αυτήν την ενότητα θα εξετάσουμε πώς μπορούμε να χτίσουμε έναν παραγωγό και καταναλωτή για χρήση με την Kafka. Για να γίνει αυτό, θα δημιουργήσουμε δύο εφαρμογές κονσόλας στο Visual Studio - μία από αυτές θα αντιπροσωπεύει τον παραγωγό και την άλλη τον καταναλωτή. Και θα χρειαστεί να εγκαταστήσουμε έναν πάροχο Kafka για το .Net τόσο στην εφαρμογή παραγωγού όσο και στον καταναλωτή.

Παρεμπιπτόντως, υπάρχουν πολλοί πάροχοι, αλλά σε αυτήν την ανάρτηση θα χρησιμοποιήσουμε το kafka-net, έναν εγγενή πελάτη C # για το Apache Kafka. Μπορείτε να εγκαταστήσετε το kafka-net μέσω του διαχειριστή πακέτων NuGet μέσα από το Visual Studio. Μπορείτε να ακολουθήσετε αυτόν τον σύνδεσμο προς το αποθετήριο kafka-net GitHub.

Εδώ είναι η κύρια μέθοδος για τον παραγωγό μας Kafka:

static void Main (συμβολοσειρά [] args)

        {

ωφέλιμο φορτίο

θέμα σειράς

Μήνυμα msg = νέο μήνυμα (ωφέλιμο φορτίο);

Uri uri = νέο Uri ("// localhost: 9092");

var options = νέο KafkaOptions (uri);

var router = νέο BrokerRouter (επιλογές);

var client = νέος παραγωγός (δρομολογητής);

client.SendMessageAsync (θέμα, νέα λίστα {msg}). Περιμένετε ();

Console.ReadLine ();

        }

Και εδώ είναι ο κωδικός για τον καταναλωτή της Kafka:

static void Main (συμβολοσειρά [] args)

        {

θέμα σειράς

Uri uri = νέο Uri ("// localhost: 9092");

var options = νέο KafkaOptions (uri);

var router = νέο BrokerRouter (επιλογές);

var καταναλωτής = νέος καταναλωτής (νέο ConsumerOptions (θέμα, δρομολογητής));

foreach (var μήνυμα στον καταναλωτή. Κατανάλωση ())

            {

Console.WriteLine (Encoding.UTF8.GetString (message.Value));

            }

Console.ReadLine ();

        }

Λάβετε υπόψη ότι πρέπει να συμπεριλάβετε τους χώρους ονομάτων Kafka τόσο στις εφαρμογές παραγωγών όσο και στους καταναλωτές, όπως φαίνεται παρακάτω.

χρησιμοποιώντας το KafkaNet;

χρησιμοποιώντας το KafkaNet.Model;

χρησιμοποιώντας το KafkaNet.Protocol;

Τέλος, απλώς εκτελέστε τον παραγωγό (πρώτα παραγωγός) και μετά τον καταναλωτή. Και αυτό είναι! Θα πρέπει να δείτε το μήνυμα "Καλώς ήλθατε στην Κάφκα!" εμφανίζεται στο παράθυρο της κονσόλας καταναλωτή.

Ενώ διαθέτουμε πολλά συστήματα ανταλλαγής μηνυμάτων για να διαλέξετε - RabbitMQ, MSMQ, IBM MQ Series, κ.λπ. - Η Kafka βρίσκεται μπροστά από το πακέτο για την αντιμετώπιση μεγάλων ροών δεδομένων που μπορούν να προέρχονται από πολλούς εκδότες. Το Kafka χρησιμοποιείται συχνά για εφαρμογές IoT και συγκεντρωτικά αρχεία καταγραφής και άλλες περιπτώσεις χρήσης που απαιτούν χαμηλή καθυστέρηση και ισχυρές εγγυήσεις παράδοσης μηνυμάτων.

Εάν η εφαρμογή σας χρειάζεται έναν γρήγορο και επεκτάσιμο μεσίτη μηνυμάτων, η Kafka είναι μια εξαιρετική επιλογή. Μείνετε συντονισμένοι για περισσότερες δημοσιεύσεις στο Kafka σε αυτό το ιστολόγιο.