Apache Kafka vs. Apache Pulsar: Bagaimana memilih

Saat ini, perpesanan pub / sub yang skalabel secara masif hampir identik dengan Apache Kafka. Apache Kafka terus menjadi pilihan yang kokoh, sumber terbuka, dan masuk ke dalam untuk aplikasi streaming terdistribusi, baik Anda menambahkan sesuatu seperti Apache Storm atau Apache Spark untuk pemrosesan atau menggunakan alat pemrosesan yang disediakan oleh Apache Kafka itu sendiri. Tapi Kafka bukanlah satu-satunya permainan di kota.

Dikembangkan oleh Yahoo dan sekarang menjadi proyek Apache Software Foundation, Apache Pulsar sedang menuju mahkota perpesanan yang telah dipakai Apache Kafka selama bertahun-tahun. Apache Pulsar menawarkan potensi throughput yang lebih cepat dan latensi yang lebih rendah daripada Apache Kafka dalam banyak situasi, bersama dengan API yang kompatibel yang memungkinkan pengembang untuk beralih dari Kafka ke Pulsar dengan relatif mudah. 

Bagaimana cara memilih antara pendukung setia Apache Kafka dan Apache Pulsar pemula? Mari kita lihat penawaran sumber terbuka inti mereka dan apa yang dibawa oleh edisi perusahaan pengelola inti.

Apache Kafka

Dikembangkan oleh LinkedIn dan dirilis sebagai open source pada tahun 2011, Apache Kafka telah menyebar jauh dan luas, cukup banyak menjadi pilihan default bagi banyak orang ketika berpikir untuk menambahkan bus layanan atau sistem pub / sub ke arsitektur. Sejak debut Apache Kafka, ekosistem Kafka telah berkembang pesat, menambahkan Skema Registry untuk menerapkan skema dalam perpesanan Apache Kafka, Kafka Connect untuk streaming yang mudah dari sumber data lain seperti database ke Kafka, Kafka Streams untuk pemrosesan aliran terdistribusi, dan yang terbaru KSQL untuk melakukan kueri seperti SQL pada topik Kafka. (Topik di Kafka adalah nama untuk saluran tertentu.)

Kasus penggunaan standar untuk banyak pipeline real-time yang dibangun selama beberapa tahun terakhir adalah mendorong data ke Apache Kafka dan kemudian menggunakan prosesor streaming seperti Apache Storm atau Apache Spark untuk menarik data, menjalankan dan memproses, dan kemudian memublikasikan keluaran ke topik lain untuk konsumsi hilir. Dengan Kafka Streams dan KSQL, semua kebutuhan pipeline data Anda dapat ditangani tanpa harus meninggalkan project Apache Kafka kapan pun, meskipun tentunya Anda masih dapat menggunakan layanan eksternal untuk memproses data Anda jika diperlukan.

Sementara Apache Kafka selalu sangat ramah dari sudut pandang pengembang, itu adalah semacam tas campuran secara operasional. Memulai dan menjalankan cluster kecil relatif mudah, tetapi mempertahankan cluster besar sering kali penuh dengan masalah (misalnya pertukaran partisi leader setelah broker Kafka gagal).

Lebih lanjut, pendekatan yang diambil untuk mendukung multi-tenancy, melalui utilitas yang disebut MirrorMaker, telah menjadi cara yang pasti untuk membuat SRE menarik rambut mereka. Memang, MirrorMaker dianggap sebagai masalah sehingga perusahaan seperti Uber telah membuat sistem mereka sendiri untuk mereplikasi di seluruh pusat data (uReplicator). Confluent menyertakan Confluent Replicator sebagai bagian dari penawaran perusahaannya atas Apache Kafka. Berbicara sebagai seseorang yang harus mempertahankan pengaturan MirrorMaker, sayang sekali Replicator bukan bagian dari versi open source.

Namun, tidak semua berita buruk di bidang operasional. Banyak pekerjaan telah dilakukan di seri Apache Kafka 1.x saat ini untuk mengurangi beberapa sakit kepala saat menjalankan cluster. Baru-baru ini ada beberapa perubahan yang memungkinkan sistem untuk menjalankan cluster besar lebih dari 200.000 partisi dengan cara yang lebih efisien, dan peningkatan seperti menambahkan antrian "huruf mati" ke Kafka Connect membuat identifikasi dan pemulihan dari masalah di sumber data dan tenggelam begitu banyak lebih mudah. Kami juga mungkin melihat dukungan tingkat produksi untuk menjalankan Apache Kafka di Kubernetes pada tahun 2019 (melalui diagram Helm dan operator Kubernetes).

Kembali pada tahun 2014, tiga pengembang asli Kafka (Jun Rao, Jay Kreps, dan Neha Narkhede) membentuk Confluent, yang menyediakan fitur perusahaan tambahan dalam Platform Confluent-nya seperti Replicator yang disebutkan di atas, Pusat Kontrol, plug-in keamanan tambahan, dan dukungan biasa dan penawaran layanan profesional. Confluent juga memiliki penawaran cloud, Confluent Cloud, yang merupakan layanan Confluent Platform terkelola sepenuhnya yang berjalan di Amazon Web Services atau Google Cloud Platform, jika Anda memilih untuk tidak menangani sendiri beberapa overhead operasional dari menjalankan cluster.

Jika Anda terkunci di AWS dan menggunakan layanan Amazon, perhatikan bahwa Amazon telah memperkenalkan pratinjau publik Amazon Managed Streaming for Kafka (MSK), yang merupakan layanan Kafka yang dikelola sepenuhnya dalam ekosistem AWS. (Perhatikan juga bahwa Amazon MSK tidak disediakan dalam kemitraan dengan Confluent, jadi menjalankan MSK tidak akan memberi Anda semua fitur Confluent Platform, tetapi hanya yang disediakan dalam Apache Kafka open source.)

Apache Pulsar

Mengingat kecenderungan Apache Software Foundation untuk mengambil proyek yang tampaknya menggandakan fungsionalitas (apakah Anda ingin Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark, atau Apache Storm untuk kebutuhan pemrosesan data grafik asiklik yang diarahkan?), Anda akan dimaafkan karena tidak melihat pengumuman tentang Apache Pulsar menjadi proyek Apache tingkat atas sebelum memilih Apache Kafka sebagai opsi tepercaya untuk kebutuhan perpesanan Anda. Tapi Apache Pulsar layak untuk dilihat.

Apache Pulsar lahir di Yahoo, di mana ia dibuat untuk memenuhi kebutuhan organisasi yang tidak dapat disediakan oleh penawaran sumber terbuka lainnya pada saat itu. Hasilnya, Pulsar dibangun dari awal untuk menangani jutaan topik dan partisi dengan dukungan penuh untuk geo-replikasi dan multi-tenancy.

Di bawah sampul, Apache Pulsar menggunakan Apache BookKeeper untuk menjaga kebutuhan penyimpanannya, tetapi ada perbedaan: Apache Pulsar memiliki fitur yang disebut Penyimpanan Bertingkat yang cukup berarti. Salah satu masalah sistem log terdistribusi adalah, meskipun Anda ingin data tetap berada di platform log selama mungkin, ukuran disk drive tidak terbatas. Pada titik tertentu, Anda membuat keputusan untuk menghapus pesan tersebut atau menyimpannya di tempat lain, di mana pesan tersebut berpotensi diputar ulang melalui pipeline data jika diperlukan di masa mendatang. Yang mana berhasil, tetapi dapat menjadi rumit secara operasional. Apache Pulsar, melalui Penyimpanan Bertingkat, dapat secara otomatis memindahkan data lama ke Amazon S3, Google Cloud Storage, atau Azure Blog Storage, dan tetap menampilkan tampilan transparan kembali ke klien;klien dapat membaca dari awal waktu seolah-olah semua pesan ada di log.

Sama seperti Apache Kafka, Apache Pulsar telah mengembangkan ekosistem untuk pemrosesan data (meskipun juga menyediakan adaptor untuk Apache Spark dan Apache Storm). Pulsar IO setara dengan Kafka Connect untuk menghubungkan ke sistem data lain sebagai sumber atau sink, dan Pulsar Functions menyediakan fungsionalitas pemrosesan data. Kueri SQL disediakan dengan menggunakan adaptor untuk mesin Presto bersumber terbuka Facebook.

Kerutan yang menarik adalah Pulsar Functions dan Pulsar IO berjalan dalam cluster Pulsar standar daripada menjadi proses terpisah yang berpotensi berjalan di mana saja. Meskipun ini adalah pengurangan fleksibilitas, hal ini membuat segalanya lebih sederhana dari sudut pandang operasional. (Ada mode run lokal yang dapat disalahgunakan untuk menjalankan fungsi di luar cluster, tetapi dokumentasinya mengatakan "Jangan lakukan ini!")

Apache Pulsar juga menawarkan metode berbeda untuk menjalankan fungsi di dalam klaster: Mereka dapat dijalankan sebagai proses terpisah, sebagai kontainer Docker, atau sebagai utas yang berjalan dalam proses JVM broker. Ini terkait dengan model penerapan untuk Apache Pulsar, yang sudah mendukung Kubernetes atau Mesosphere DC / OS dalam produksi. Satu hal yang harus diperhatikan adalah Pulsar Functions, Pulsar IO, dan SQL adalah tambahan yang relatif baru untuk Apache Pulsar, jadi perkirakan beberapa sisi tajam jika Anda menggunakannya.

Ada juga pembungkus API terbatas, khusus Java, dan kompatibel dengan Kafka, sehingga Anda berpotensi dapat mengintegrasikan aplikasi Apache Kafka yang ada ke dalam infrastruktur Apache Pulsar. Ini mungkin lebih cocok untuk pengujian eksplorasi dan rencana migrasi sementara daripada solusi produksi, tetapi senang memilikinya!

Mirip dengan Confluent, pengembang Apache Pulsar di Yahoo (Matteo Merli dan Sijie Guo) telah membentuk perusahaan spin-off, Streamlio, di mana mereka adalah salah satu pendiri bersama dengan pembuat Apache Heron (Karthik Ramasamy dan Sanjeev Kulkarni) . Penawaran perusahaan Streamlio mencakup dukungan komersial biasa dan solusi layanan profesional, bersama dengan konsol manajemen sumber tertutup, tetapi hal-hal seperti dukungan multi-tenancy yang efisien dan tahan lama adalah bagian dari produk inti sumber terbuka.

Apache Kafka atau Apache Pulsar?

Apache Kafka adalah produk yang matang, tangguh, dan teruji dalam pertempuran. Ini memiliki klien yang ditulis dalam hampir semua bahasa populer, serta sejumlah konektor yang didukung untuk berbagai sumber data di Kafka Connect. Dengan layanan terkelola yang ditawarkan oleh Amazon dan Confluent, sangat mudah untuk menyiapkan, menjalankan, dan memelihara klaster Kafka yang besar — ​​jauh lebih mudah daripada tahun-tahun sebelumnya. Saya terus menggunakan Apache Kafka dalam proyek baru, dan kemungkinan besar saya akan melakukannya selama bertahun-tahun yang akan datang.

Namun, jika Anda akan membangun sistem perpesanan yang harus multi-tenant atau geo-replikasi dari awal, atau yang memiliki kebutuhan penyimpanan data yang besar, ditambah kebutuhan untuk dengan mudah melakukan kueri dan memproses semua data itu tidak peduli bagaimana caranya dahulu kala, maka saya sarankan menendang ban Apache Pulsar. Ini pasti cocok dengan beberapa kasus penggunaan yang dapat dihadapi Apache Kafka, sementara juga bekerja dengan baik dalam hal fitur inti yang Anda butuhkan dari platform log terdistribusi. Dan jika Anda tidak keberatan menjadi yang terdepan dalam hal dokumentasi dan pertanyaan Stack Overflow terjawab, itu jauh lebih baik!