Apache Kafka vs. Apache Pulsar: Cara memilih

Hari-hari ini, pemesejan pub / sub berskala besar hampir sama dengan Apache Kafka. Apache Kafka terus menjadi pilihan kuat, sumber terbuka, pilihan untuk aplikasi streaming yang diedarkan, sama ada anda menambah sesuatu seperti Apache Storm atau Apache Spark untuk diproses atau menggunakan alat pemprosesan yang disediakan oleh Apache Kafka itu sendiri. Tetapi Kafka bukan satu-satunya permainan di bandar.

Dibangunkan oleh Yahoo dan kini merupakan projek Yayasan Perisian Apache, Apache Pulsar akan menjadi mahkota pesanan yang dipakai oleh Apache Kafka selama bertahun-tahun. Apache Pulsar menawarkan potensi throughput yang lebih cepat dan latensi yang lebih rendah daripada Apache Kafka dalam banyak keadaan, bersama dengan API yang serasi yang membolehkan pemaju beralih dari Kafka ke Pulsar dengan relatif mudah. 

Bagaimana seharusnya seseorang memilih antara Apache Kafka yang terhormat dan Apache Pulsar yang baru? Mari lihat tawaran sumber terbuka utama mereka dan apa yang dibawa oleh edisi syarikat penyelenggara teras.

Apache Kafka

Dibangunkan oleh LinkedIn dan dikeluarkan sebagai sumber terbuka pada tahun 2011, Apache Kafka telah tersebar luas, menjadi pilihan utama bagi banyak orang ketika memikirkan untuk menambah bas perkhidmatan atau sistem pub / sub ke dalam seni bina. Sejak debut Apache Kafka, ekosistem Kafka telah berkembang dengan pesat, menambah Registry Skema untuk menerapkan skema dalam pemesejan Apache Kafka, Kafka Connect untuk streaming mudah dari sumber data lain seperti pangkalan data ke Kafka, Aliran Kafka untuk pemprosesan aliran diedarkan, dan terbaru KSQL kerana melakukan pertanyaan seperti SQL mengenai topik Kafka. (Topik di Kafka adalah nama untuk saluran tertentu.)

Kes penggunaan standard untuk banyak saluran paip masa nyata yang dibina sejak beberapa tahun kebelakangan ini adalah memasukkan data ke dalam Apache Kafka dan kemudian menggunakan pemproses aliran seperti Apache Storm atau Apache Spark untuk menarik data, melakukan dan memproses, dan kemudian menerbitkan output ke topik lain untuk penggunaan hiliran. Dengan Aliran Kafka dan KSQL, semua keperluan saluran data anda dapat ditangani tanpa perlu meninggalkan projek Apache Kafka kapan saja, walaupun tentu saja, anda masih dapat menggunakan perkhidmatan luaran untuk memproses data anda jika diperlukan.

Walaupun Apache Kafka selalu bersikap ramah dari sudut pandang pemaju, ia adalah beg campuran secara operasi. Menyiapkan dan menjalankan kluster kecil agak mudah, tetapi mengekalkan kluster besar sering kali penuh dengan masalah (contohnya pertukaran partition pemimpin setelah kegagalan broker Kafka).

Lebih jauh lagi, pendekatan yang diambil untuk mendukung multi-tenancy, melalui utiliti yang disebut MirrorMaker, telah menjadi cara yang pasti untuk mendapatkan SRE untuk mencabut rambut mereka. Sesungguhnya, MirrorMaker dianggap sebagai masalah sehingga syarikat seperti Uber telah membuat sistem mereka sendiri untuk meniru di seluruh pusat data (uReplicator). Confluent termasuk Confluent Replicator sebagai sebahagian daripada tawaran perusahaannya Apache Kafka. Bercakap sebagai seseorang yang harus mempertahankan persediaan MirrorMaker, sangat memalukan bahawa Replicator bukan sebahagian daripada versi sumber terbuka.

Walau bagaimanapun, jelas bukan semua berita buruk di bahagian operasi. Banyak kerja yang telah dilakukan dalam siri Apache Kafka 1.x semasa untuk mengurangkan beberapa sakit kepala menjalankan kluster. Baru-baru ini terdapat beberapa perubahan yang membolehkan sistem menjalankan kelompok besar lebih daripada 200,000 partisi dengan cara yang lebih lancar, dan peningkatan seperti menambahkan barisan "surat mati" ke Kafka Connect menjadikan pengenalpastian dan pemulihan dari masalah dalam sumber data dan tenggelam begitu banyak. lebih mudah. Kami juga mungkin akan melihat sokongan tahap produksi untuk menjalankan Apache Kafka di Kubernetes pada tahun 2019 (melalui carta Helm dan pengendali Kubernetes).

Kembali pada tahun 2014, tiga pemaju asal Kafka (Jun Rao, Jay Kreps, dan Neha Narkhede) membentuk Confluent, yang menyediakan ciri perusahaan tambahan dalam Confluent Platformnya seperti Replicator, Control Center yang disebutkan di atas, plug-in keselamatan tambahan, dan tawaran sokongan dan perkhidmatan profesional yang biasa. Confluent juga mempunyai tawaran cloud, Confluent Cloud, yang merupakan perkhidmatan Confluent Platform yang dikendalikan sepenuhnya yang berjalan di Amazon Web Services atau Google Cloud Platform, jika anda lebih suka tidak menangani beberapa overhead operasi kluster yang dijalankan sendiri.

Sekiranya anda terkunci dalam AWS dan menggunakan perkhidmatan Amazon, perhatikan bahawa Amazon telah memperkenalkan pratonton awam untuk Amazon Managed Streaming for Kafka (MSK), yang merupakan perkhidmatan Kafka yang dikendalikan sepenuhnya dalam ekosistem AWS. (Perhatikan juga bahawa Amazon MSK tidak disediakan bekerjasama dengan Confluent, jadi menjalankan MSK tidak akan memberikan anda semua ciri Confluent Platform, tetapi hanya yang disediakan di sumber terbuka Apache Kafka.)

Apache Pulsar

Memandangkan kecenderungan Yayasan Perisian Apache untuk mengambil projek yang sepertinya menduplikasi fungsi (adakah anda mahu Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark, atau Apache Storm untuk keperluan pemprosesan data grafik asiklik yang diarahkan anda?), Anda akan dimaafkan kerana telah melihat pengumuman mengenai Apache Pulsar menjadi projek Apache tingkat tinggi sebelum memilih Apache Kafka sebagai pilihan yang dipercayai untuk keperluan pesanan anda. Tetapi Apache Pulsar wajar dilihat.

Apache Pulsar dilahirkan di Yahoo, di mana ia diciptakan untuk memenuhi keperluan organisasi yang tidak dapat disediakan oleh penawaran sumber terbuka lain pada masa itu. Hasilnya, Pulsar dibangun dari bawah untuk menangani berjuta-juta topik dan partisi dengan sokongan penuh untuk replikasi geo dan multi-tenancy.

Di bawah sampulnya, Apache Pulsar menggunakan Apache BookKeeper untuk mengekalkan keperluan penyimpanannya, tetapi ada kelainan: Apache Pulsar mempunyai ciri yang disebut Tiered Storage yang cukup sesuatu. Salah satu masalah sistem log yang diedarkan adalah bahawa, walaupun anda mahu data tetap berada di platform log selama mungkin, pemacu cakera tidak berukuran tidak terbatas. Pada satu ketika, anda membuat keputusan untuk menghapus mesej tersebut atau menyimpannya di tempat lain, di mana mereka berpotensi dapat dimainkan kembali melalui saluran data jika diperlukan di masa depan. Yang berfungsi, tetapi boleh menjadi rumit secara operasi. Apache Pulsar, melalui Penyimpanan Bertingkat, secara automatik dapat memindahkan data lama ke Amazon S3, Penyimpanan Awan Google, atau Penyimpanan Blog Azure, dan masih memberikan pandangan yang telus kembali kepada pelanggan;pelanggan boleh membaca dari awal waktu seolah-olah semua mesej terdapat dalam log.

Sama seperti Apache Kafka, Apache Pulsar telah mengembangkan ekosistem untuk pemprosesan data (walaupun ia juga menyediakan penyesuai untuk Apache Spark dan Apache Storm). Pulsar IO adalah setara dengan Kafka Connect untuk menyambung ke sistem data lain sebagai sumber atau sink, dan Fungsi Pulsar menyediakan fungsi pemprosesan data. Pertanyaan SQL disediakan dengan menggunakan penyesuai untuk mesin Presto sumber terbuka Facebook.

Kedutan yang menarik ialah Pulsar Functions dan Pulsar IO berjalan dalam kelompok Pulsar standard daripada proses terpisah yang berpotensi berjalan di mana sahaja. Walaupun ini adalah pengurangan fleksibiliti, ia menjadikan keadaan lebih mudah dari sudut operasi. (Terdapat mod jalanan tempatan yang dapat disalahgunakan untuk menjalankan fungsi di luar kluster, tetapi dokumentasi tidak masuk akal untuk mengatakan "Jangan lakukan ini!")

Apache Pulsar juga menawarkan kaedah yang berbeza untuk menjalankan fungsi di dalam kluster: Mereka dapat dijalankan sebagai proses yang terpisah, sebagai wadah Docker, atau sebagai utas yang berjalan dalam proses JVM broker. Ini berkaitan dengan model penyebaran untuk Apache Pulsar, yang sudah mendukung produksi Kubernetes atau Mesosphere DC / OS. Satu perkara yang perlu diperhatikan ialah bahawa Fungsi Pulsar, Pulsar IO, dan SQL adalah tambahan yang agak baru untuk Apache Pulsar, jadi harapkan beberapa kelebihan tajam jika anda menggunakannya.

Terdapat juga pembungkus API yang kompatibel hanya dengan Java, Kafka, jadi anda berpotensi dapat mengintegrasikan aplikasi Apache Kafka yang ada ke dalam infrastruktur Apache Pulsar. Ini mungkin lebih sesuai untuk ujian eksplorasi dan rancangan penghijrahan sementara daripada penyelesaian pengeluaran, tetapi senang ada!

Dengan cara yang serupa dengan Confluent, pemaju Apache Pulsar di Yahoo (Matteo Merli dan Sijie Guo) telah membentuk sebuah syarikat spinoff, Streamlio, di mana mereka adalah pengasas bersama dengan pencipta Apache Heron (Karthik Ramasamy dan Sanjeev Kulkarni) . Penawaran syarikat Streamlio merangkumi sokongan komersial dan penyelesaian perkhidmatan profesional yang biasa, bersama dengan konsol pengurusan sumber tertutup, tetapi perkara seperti sokongan multi-penyewaan yang cekap dan tahan lama adalah sebahagian daripada produk sumber terbuka utama.

Apache Kafka atau Apache Pulsar?

Apache Kafka adalah produk yang matang, berdaya tahan, dan diuji dalam pertempuran. Ini mempunyai pelanggan yang ditulis dalam hampir semua bahasa yang popular, serta sejumlah penyambung yang disokong untuk sumber data yang berlainan di Kafka Connect. Dengan perkhidmatan terurus yang ditawarkan oleh Amazon dan Confluent, mudah untuk mendapatkan kluster Kafka yang besar, berjalan, dan disenggara - jauh lebih mudah daripada tahun-tahun sebelumnya. Saya terus menggunakan Apache Kafka dalam projek baru, dan saya mungkin akan melakukannya selama bertahun-tahun akan datang.

Walau bagaimanapun, jika anda akan membina sistem pesanan yang semestinya multi-penyewa atau ditiru secara geografis sejak awal, atau yang mempunyai keperluan penyimpanan data yang besar, ditambah dengan keperluan untuk membuat pertanyaan dan memproses semua data dengan mudah tidak kira lama dahulu, maka saya sarankan untuk menendang ban Apache Pulsar. Ia sangat sesuai dengan beberapa kes penggunaan yang dapat dilawan oleh Apache Kafka, dan juga berfungsi dengan baik dari segi ciri teras yang anda perlukan dari platform log yang diedarkan. Dan jika anda tidak keberatan berada di tahap terdepan dari segi dokumentasi dan soalan Stack Overflow dijawab, jadi lebih baik!