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

Apache Kafka εναντίον Apache Pulsar: Πώς να επιλέξετε

Αυτές τις μέρες, τα μαζικά επεκτάσιμα παμπ / υπο-ανταλλαγή μηνυμάτων είναι ουσιαστικά συνώνυμα με το Apache Kafka. Το Apache Kafka εξακολουθεί να είναι η σταθερή, ανοιχτού κώδικα, επιλογή για κατανεμημένες εφαρμογές ροής, είτε προσθέτετε κάτι όπως το Apache Storm ή το Apache Spark για επεξεργασία ή χρησιμοποιώντας τα εργαλεία επεξεργασίας που παρέχονται από την ίδια την Apache Kafka. Αλλά η Κάφκα δεν είναι το μόνο παιχνίδι στην πόλη.

Αναπτύχθηκε από το Yahoo και τώρα ένα έργο Apache Software Foundation, το Apache Pulsar θέλει το στέμμα των μηνυμάτων που έχει φορέσει η Apache Kafka για πολλά χρόνια. Το Apache Pulsar προσφέρει τη δυνατότητα ταχύτερης απόδοσης και χαμηλότερου λανθάνοντος χρόνου από το Apache Kafka σε πολλές περιπτώσεις, μαζί με ένα συμβατό API που επιτρέπει στους προγραμματιστές να αλλάζουν από Kafka σε Pulsar με σχετική ευκολία.

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

Apache Kafka

Αναπτύχθηκε από το LinkedIn και κυκλοφόρησε ως ανοιχτός κώδικας το 2011, η Apache Kafka έχει εξαπλωθεί σε μεγάλο βαθμό, κάνοντας σχεδόν την προεπιλεγμένη επιλογή για πολλούς όταν σκέφτονται να προσθέσουν ένα λεωφορείο εξυπηρέτησης ή ένα μπαρ / υποσύστημα σε μια αρχιτεκτονική. Από το ντεμπούτο του Apache Kafka, το οικοσύστημα Kafka έχει αναπτυχθεί σημαντικά, προσθέτοντας το Registry Registry για την εφαρμογή σχημάτων στα μηνύματα Apache Kafka, το Kafka Connect για εύκολη ροή από άλλες πηγές δεδομένων, όπως βάσεις δεδομένων στην Kafka, Kafka Streams για επεξεργασία κατανεμημένης ροής και πιο πρόσφατα KSQL για την εκτέλεση ερωτημάτων τύπου SQL για θέματα Kafka. (Ένα θέμα στην Κάφκα είναι το όνομα ενός συγκεκριμένου καναλιού.)

Η τυπική περίπτωση χρήσης για πολλούς αγωγούς σε πραγματικό χρόνο που κατασκευάστηκαν τα τελευταία χρόνια ήταν η προώθηση δεδομένων στο Apache Kafka και, στη συνέχεια, η χρήση ενός επεξεργαστή ροής όπως το Apache Storm ή το Apache Spark για να τραβήξετε δεδομένα, να εκτελέσετε και να επεξεργαστείτε και, στη συνέχεια, έξοδος σε άλλο θέμα για κατάντη κατανάλωση. Με τα Kafka Streams και KSQL, μπορείτε να χειριστείτε όλες τις ανάγκες του αγωγού δεδομένων σας χωρίς να χρειαστεί να αποχωρήσετε από το έργο Apache Kafka ανά πάσα στιγμή, αν και φυσικά, μπορείτε ακόμα να χρησιμοποιήσετε μια εξωτερική υπηρεσία για την επεξεργασία των δεδομένων σας, εάν απαιτείται.

Παρόλο που η Apache Kafka ήταν πάντα πολύ φιλική από την πλευρά του προγραμματιστή, λειτουργούσε μια μικτή τσάντα. Η ενεργοποίηση και η λειτουργία ενός μικρού συμπλέγματος είναι σχετικά εύκολη, αλλά η διατήρηση ενός μεγάλου συμπλέγματος είναι συχνά γεμάτη με ζητήματα (π.χ. ανταλλαγή διαμερισμάτων αρχηγού μετά από αποτυχία του μεσίτη Kafka).

Επιπλέον, η προσέγγιση που υιοθετήθηκε για την υποστήριξη της πολυ-μίσθωσης, μέσω ενός βοηθητικού προγράμματος που ονομάζεται MirrorMaker, ήταν ένας σίγουρος τρόπος να κάνει τα SRE να τραβήξουν τα μαλλιά τους. Πράγματι, το MirrorMaker θεωρείται τέτοιο πρόβλημα που εταιρείες όπως η Uber δημιούργησαν το δικό τους σύστημα για αναπαραγωγή σε κέντρα δεδομένων (uReplicator). Η Confluent περιλαμβάνει το Confluent Replicator ως μέρος της επιχειρηματικής προσφοράς της Apache Kafka. Μιλώντας ως κάποιος που έπρεπε να διατηρήσει τη ρύθμιση MirrorMaker, είναι κρίμα που το Replicator δεν αποτελεί μέρος της έκδοσης ανοιχτού κώδικα.

Ωστόσο, σίγουρα δεν είναι όλα άσχημα νέα στο λειτουργικό μέτωπο. Έχουν γίνει πολλές εργασίες στην τρέχουσα σειρά Apache Kafka 1.x για τη μείωση ορισμένων πονοκεφάλων από τη λειτουργία ενός συμπλέγματος. Πρόσφατα υπήρξαν κάποιες αλλαγές που επιτρέπουν στο σύστημα να εκτελεί μεγάλες συστάδες με περισσότερα από 200.000 διαμερίσματα με πιο απλοποιημένο τρόπο, και βελτιώσεις όπως η προσθήκη ουρών "dead letter" στο Kafka Connect κάνουν τον εντοπισμό και την ανάκτηση από ζητήματα σε πηγές δεδομένων και βυθίζονται τόσο πολύ ευκολότερη. Είναι επίσης πιθανό να δούμε υποστήριξη σε επίπεδο παραγωγής για τη λειτουργία του Apache Kafka στο Kubernetes το 2019 (μέσω γραφημάτων Helm και ενός χειριστή Kubernetes).

Το 2014, τρεις από τους αρχικούς προγραμματιστές της Kafka (Jun Rao, Jay Kreps και Neha Narkhede) δημιούργησαν το Confluent, το οποίο παρέχει πρόσθετες επιχειρηματικές δυνατότητες στην Confluent Platform, όπως το προαναφερθέν Replicator, το Κέντρο Ελέγχου, πρόσθετα πρόσθετα ασφαλείας και τις συνήθεις προσφορές και επαγγελματικές υπηρεσίες. Η Confluent διαθέτει επίσης μια προσφορά cloud, το Confluent Cloud, η οποία είναι μια πλήρως διαχειριζόμενη υπηρεσία Confluent Platform που εκτελείται στις Amazon Web Services ή στο Google Cloud Platform, εάν προτιμάτε να μην ασχολείστε μόνοι σας με κάποια από τα λειτουργικά γενικά έξοδα των συμπλεγμάτων.

Εάν είστε κλειδωμένοι στο AWS και χρησιμοποιείτε τις υπηρεσίες Amazon, λάβετε υπόψη ότι η Amazon έχει εισαγάγει μια δημόσια προεπισκόπηση της Amazon Managed Streaming for Kafka (MSK), η οποία είναι μια πλήρως διαχειριζόμενη υπηρεσία Kafka εντός του οικοσυστήματος AWS. (Σημειώστε επίσης ότι το Amazon MSK δεν είναι παρέχεται σε συνεργασία με το Confluent, οπότε η εκτέλεση του MSK δεν θα σας προσφέρει όλες τις δυνατότητες του Confluent Platform, αλλά μόνο ό, τι παρέχεται στον ανοιχτό κώδικα Apache Kafka.)

Apache Pulsar

Λαμβάνοντας υπόψη την προτίμηση του Ιδρύματος Λογισμικού Apache για την ανάληψη έργων που φαίνεται να αντιγράφουν τη λειτουργικότητα (θα θέλατε Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark ή Apache Storm για τις ανάγκες επεξεργασίας δεδομένων που απευθύνονται σε ακυκλικό γράφημα;), συγχωρήστε που κοιτάξατε αμέσως μετά τις ανακοινώσεις σχετικά με το Apache Pulsar να γίνει ένα έργο Apache ανώτερου επιπέδου προτού επιλέξετε το Apache Kafka ως μια αξιόπιστη επιλογή για τις ανάγκες σας για ανταλλαγή μηνυμάτων. Αλλά ο Apache Pulsar αξίζει μια ματιά.

Η Apache Pulsar γεννήθηκε στο Yahoo, όπου δημιουργήθηκε για να καλύψει τις ανάγκες του οργανισμού που άλλες προσφορές ανοιχτού κώδικα δεν μπορούσαν να προσφέρουν εκείνη τη στιγμή. Ως αποτέλεσμα, το Pulsar δημιουργήθηκε από το μηδέν για να χειριστεί εκατομμύρια θέματα και διαμερίσματα με πλήρη υποστήριξη για τη γεωγραφική αναπαραγωγή και την πολυκατοικία.

Κάτω από τα εξώφυλλα, το Apache Pulsar χρησιμοποιεί το Apache BookKeeper για τη διατήρηση των αναγκών αποθήκευσης, αλλά υπάρχει μια στροφή: Το Apache Pulsar διαθέτει ένα χαρακτηριστικό που ονομάζεται Tiered Storage που είναι κάτι αρκετά. Ένα από τα προβλήματα των κατανεμημένων συστημάτων καταγραφής είναι ότι, ενώ θέλετε τα δεδομένα να παραμένουν στην πλατφόρμα καταγραφής για όσο το δυνατόν περισσότερο, οι μονάδες δίσκου δεν έχουν απεριόριστο μέγεθος. Σε κάποιο σημείο, λαμβάνετε την απόφαση είτε να διαγράψετε αυτά τα μηνύματα είτε να τα αποθηκεύσετε αλλού, όπου μπορούν ενδεχομένως να αναπαραχθούν μέσω του αγωγού δεδομένων, εάν χρειαστεί στο μέλλον. Που λειτουργεί, αλλά μπορεί να είναι λειτουργικά περίπλοκο. Το Apache Pulsar, μέσω του Tiered Storage, μπορεί αυτόματα να μεταφέρει παλαιότερα δεδομένα στο Amazon S3, στο Google Cloud Storage ή στο Azure Blog Storage, και εξακολουθεί να παρουσιάζει μια διαφανή προβολή στον πελάτη. ο πελάτης μπορεί να διαβάσει από την αρχή του χρόνου σαν να υπήρχαν όλα τα μηνύματα στο ημερολόγιο.

Όπως και το Apache Kafka, το Apache Pulsar έχει αναπτύξει ένα οικοσύστημα για την επεξεργασία δεδομένων (αν και παρέχει επίσης προσαρμογείς για Apache Spark και Apache Storm). Το Pulsar IO είναι το ισοδύναμο του Kafka Connect για σύνδεση σε άλλα συστήματα δεδομένων είτε ως πηγές είτε ως νεροχύτες και το Pulsar Functions παρέχει λειτουργικότητα επεξεργασίας δεδομένων. Το ερώτημα SQL παρέχεται χρησιμοποιώντας έναν προσαρμογέα για τη μηχανή Presto ανοιχτού κώδικα του Facebook.

Μια ενδιαφέρουσα ρυτίδα είναι ότι οι λειτουργίες Pulsar και Pulsar IO λειτουργούν μέσα σε ένα τυπικό σύμπλεγμα Pulsar αντί να είναι ξεχωριστές διαδικασίες που θα μπορούσαν ενδεχομένως να εκτελούνται οπουδήποτε. Παρόλο που πρόκειται για μείωση της ευελιξίας, κάνει τα πράγματα πολύ πιο απλά από επιχειρησιακή άποψη. (Υπάρχει μια τοπική λειτουργία εκτέλεσης που θα μπορούσε να γίνει κατάχρηση για την εκτέλεση λειτουργιών εκτός του συμπλέγματος, αλλά η τεκμηρίωση ξεφεύγει από το δρόμο για να πει "Μην το κάνετε αυτό!")

Το Apache Pulsar προσφέρει επίσης διαφορετικές μεθόδους εκτέλεσης λειτουργιών εντός του συμπλέγματος: Μπορούν να εκτελεστούν ως ξεχωριστές διαδικασίες, ως κοντέινερ Docker ή ως νήματα που εκτελούνται στη διαδικασία JVM ενός μεσίτη. Αυτό συνδέεται με το μοντέλο ανάπτυξης για το Apache Pulsar, το οποίο υποστηρίζει ήδη το Kubernetes ή το Mesosphere DC / OS στην παραγωγή. Ένα πράγμα που πρέπει να γνωρίζετε είναι ότι οι λειτουργίες Pulsar, Pulsar IO και SQL είναι σχετικά νέες προσθήκες στο Apache Pulsar, οπότε περιμένετε μερικές αιχμηρές άκρες εάν τις χρησιμοποιήσετε.

Υπάρχει επίσης ένα περιορισμένο, μόνο Java, συμβατό με Kafka API wrapper, ώστε να μπορείτε ενδεχομένως να ενσωματώσετε τις υπάρχουσες εφαρμογές Apache Kafka σε μια υποδομή Apache Pulsar. Αυτό πιθανότατα ταιριάζει καλύτερα σε διερευνητικές δοκιμές και ένα προσωρινό σχέδιο μετανάστευσης από μια λύση παραγωγής, αλλά είναι ωραίο να το έχετε!

Με παρόμοιο τρόπο με το Confluent, οι προγραμματιστές του Apache Pulsar στο Yahoo (Matteo Merli και Sijie Guo) έχουν δημιουργήσει μια εταιρεία spinoff, Streamlio, όπου είναι συνιδρυτές μαζί με τους δημιουργούς του Apache Heron (Karthik Ramasamy και Sanjeev Kulkarni) . Η επιχειρηματική προσφορά της Streamlio περιλαμβάνει τη συνήθη εμπορική υποστήριξη και λύσεις επαγγελματικών υπηρεσιών, μαζί με μια κονσόλα διαχείρισης κλειστού κώδικα, αλλά πράγματα όπως η αποτελεσματική και ανθεκτική υποστήριξη πολλαπλών μισθώσεων αποτελούν μέρος του βασικού προϊόντος ανοιχτού κώδικα.

Apache Kafka ή Apache Pulsar;

Το Apache Kafka είναι ένα ώριμο, ανθεκτικό και δοκιμασμένο στη μάχη προϊόν. Έχει πελάτες γραμμένους σε σχεδόν κάθε δημοφιλή γλώσσα, καθώς και πλήθος υποστηριζόμενων συνδέσμων για διαφορετικές πηγές δεδομένων στο Kafka Connect. Με τις διαχειριζόμενες υπηρεσίες που προσφέρονται από την Amazon και τη Confluent, είναι εύκολο να δημιουργήσετε ένα μεγάλο σύμπλεγμα Kafka, να λειτουργεί και να συντηρείται - πολύ πιο εύκολο από ό, τι τα προηγούμενα χρόνια. Συνεχίζω να χρησιμοποιώ το Apache Kafka σε νέα έργα, και μάλλον θα το κάνω για πολλά ακόμη χρόνια.

Ωστόσο, εάν πρόκειται να δημιουργήσετε ένα σύστημα ανταλλαγής μηνυμάτων που πρέπει να είναι πολυ-ενοικιασμένο ή γεωγραφικό αντίγραφο από την αρχή, ή που έχει μεγάλες ανάγκες αποθήκευσης δεδομένων, καθώς και την ανάγκη εύκολης αναζήτησης και επεξεργασίας όλων αυτών των δεδομένων, ανεξάρτητα από το πώς πριν από πολύ καιρό στο παρελθόν, τότε προτείνω να κλωτσάτε τα ελαστικά του Apache Pulsar. Ταιριάζει σίγουρα σε ορισμένες περιπτώσεις χρήσης με τις οποίες μπορεί να αντιμετωπίσει η Apache Kafka, ενώ ταυτόχρονα λειτουργεί καλά ως προς τα βασικά χαρακτηριστικά που χρειάζεστε από μια κατανεμημένη πλατφόρμα καταγραφής. Και αν δεν σας πειράζει να είστε στην αιχμή όσον αφορά την τεκμηρίωση και οι ερωτήσεις Stack Overflow απαντήθηκαν, τόσο το καλύτερο!