Lewati ke Konten Utama

Apa perbedaan antara Kafka dan Redis OSS?

Redis OSS adalah penyimpanan data nilai kunci dalam memori, sedangkan Apache Kafka adalah mesin pemrosesan aliran. Namun, kedua teknologi ini dapat dibandingkan karena sama-sama dapat digunakan untuk membuat sistem perpesanan publikasi-berlangganan (pub/sub). Dalam arsitektur cloud modern, aplikasi dipisahkan menjadi blok penyusun independen yang lebih kecil yang disebut layanan. Perpesanan pub/sub menyediakan notifikasi peristiwa instan untuk sistem terdistribusi ini. Kafka mendukung sistem berbasis pull di mana penerbit dan pelanggan menggunakan antrean pesan yang sama, tempat pelanggan menarik pesan sesuai kebutuhan. Redis OSS mendukung sistem berbasis push di mana penerbit mendistribusikan pesan ke semua pelanggan ketika suatu peristiwa terjadi.

Baca tentang Kafka »

Cara kerja: Pub/sub Kafka vs. Redis OSS

Apache Kafka adalah platform streaming peristiwa yang memungkinkan beberapa aplikasi untuk mengalirkan data secara independen satu sama lain. Aplikasi ini, yang disebut produsen dan konsumen, menerbitkan dan berlangganan informasi ke dan dari partisi data tertentu yang disebut topik.

Sementara itu, Redis OSS dirancang sebagai basis data dalam memori yang mendukung transfer data berlatensi rendah antaraplikasi. Redis OSS menyimpan semua pesan pada RAM, bukan hard disk, untuk mengurangi waktu baca dan tulis data. Seperti di Kafka, beberapa konsumen dapat berlangganan aliran Redis OSS untuk mengambil pesan.

Meskipun keduanya sama-sama dapat digunakan untuk perpesanan pub/sub, Kafka dan Redis OSS memiliki alur kerja yang berbeda.

Alur kerja Kafka

Apache Kafka menghubungkan produsen dan konsumen melalui klaster komputasi. Setiap klaster terdiri dari beberapa broker Kafka yang berada di server berbeda.

Kafka membuat topik dan partisi untuk tujuan ini:

  • Topik untuk mengelompokkan data yang serupa dalam satu subjek tertentu, seperti email, pembayaran, pengguna, dan pembelian
  • Partisi di berbagai broker untuk replikasi data dan toleransi kesalahan

Produsen menerbitkan pesan ke broker. Saat broker menerima pesan, ia mengategorikan data ke dalam suatu topik kemudian menyimpannya ke dalam suatu partisi. Konsumen terhubung ke topik yang relevan kemudian mengekstraksi data dari partisinya.

Alur kerja Redis OSS

Redis OSS dijalankan dengan arsitektur sever klien sebagai sistem basis data NoSQL. Produsen dan konsumen tidak terhubung secara langsung dan tidak harus saling mengenal saat mengirim pesan.

Redis OSS menggunakan kunci dan simpul primer-sekunder untuk tujuan berikut:

  • Kunci untuk mengelompokkan pesan serupa. Misalnya, “email” adalah kunci yang menunjuk ke penyimpanan data yang hanya menyimpan pesan email
  • Simpul primer-sekunder untuk replikasi pesan.

Saat produsen mengirim pesan ke simpul tertentu, Redis OSS mengirimkan pesan ke semua pelanggan yang terhubung dengan memeriksa kunci pesan. Konsumen harus selalu memulai dan mempertahankan koneksi aktif dengan server Redis OSS untuk menerima pesan. Alur ini dikenal sebagai semantik pengiriman terhubung.

Baca mengenai perpesanan pub/sub »

Penanganan pesan: Kafka vs. Redis OSS

Apache Kafka menghadirkan sistem perpesanan terdistribusi yang sangat dapat diskalakan bagi developer. Sementara itu, Redis OSS menawarkan struktur data beragam yang memungkinkan aplikasi untuk mendorong data ke beberapa simpul dengan cepat. Kedua sistem memiliki beberapa perbedaan dalam mekanisme antrean pesan mereka.

Ukuran pesan

Kafka dan Redis OSS bekerja paling efektif saat mengirimkan paket data berukuran kecil antara konsumen dan pelanggan.

Secara khusus, Redis OSS tidak dirancang untuk menangani data berukuran besar tanpa mengorbankan throughput. Sistem ini juga tidak dapat menyimpan data dalam jumlah besar karena RAM memiliki kapasitas yang lebih kecil daripada penyimpanan disk

Sementara itu, Kafka dapat mendukung pesan yang cukup besar meski tidak dibuat secara khusus untuk melakukannya. Kafka dapat menangani pesan hingga 1 GB jika pesan dikompresi dan Anda mengonfigurasinya untuk penyimpanan bertingkat. Alih-alih menyimpan semua pesan di penyimpanan lokal, Kafka menggunakan penyimpanan jarak jauh untuk menyimpan file log yang sudah selesai. 

Pengiriman pesan

Konsumen Kafka menarik data dari antrean pesan. Setiap konsumen Kafka melacak pesan yang telah dibacanya menggunakan offset, yang diperbarui untuk mengambil pesan berikutnya. Konsumen dapat mendeteksi dan melacak pesan duplikat.

Di sisi lain, Redis OSS mendorong pesan secara otomatis ke pelanggan yang terhubung. Pelanggan Redis OSS secara pasif menunggu pesan masuk yang diarahkan kepada mereka dari server. Karena ini adalah pengaturan pengiriman sekali kirim, pelanggan Redis OSS tidak mampu mendeteksi pesan duplikat.

Retensi pesan

Kafka mempertahankan pesan setelah konsumen membacanya. Jadi, jika aplikasi klien kehilangan data yang telah diambil, aplikasi tersebut dapat meminta ulang data tersebut dari partisi yang menjadi langganannya. Dengan mengatur kebijakan retensi pesan, pengguna dapat menentukan berapa lama Kafka mempertahankan data. 

Sebaliknya, Redis OSS tidak menyimpan pesan setelah dikirim. Jika tidak ada pelanggan yang terhubung ke aliran, Redis OSS membuang pesan tersebut. Pesan yang sudah dibuang tidak dapat dipulihkan meskipun pelanggan terhubung ke Redis OSS di kemudian hari.  

Penanganan kesalahan 

Baik Kafka maupun Redis OSS memungkinkan aplikasi mengatasi pengiriman pesan yang tidak andal, tetapi dengan pendekatan yang berbeda.

Penanganan kesalahan di Redis OSS berfokus pada interaksi antara aplikasi klien dan layanan Redis OSS. Dengan Redis OSS, developer dapat mengatasi berbagai keadaan, seperti batas waktu klien, buffer memori terlampaui, dan batas maksimum klien. Karena arsitektur basis data pasangan nilai kuncinya, Redis OSS tidak dapat memberikan penanganan kesalahan pesan yang andal seperti yang dilakukan Kafka. 

Developer Kafka dapat menyimpan peristiwa yang salah dalam antrean surat mati, mencoba lagi, atau mengalihkan peristiwa tersebut untuk memastikan pengiriman pesan yang konsisten ke aplikasi klien. Developer juga dapat menggunakan Kafka Connect API untuk memulai ulang tugas konektor secara otomatis dalam kesalahan tertentu.

Baca mengenai antrean surat mati »

Perbedaan performa: Kafka vs. Redis OSS

Secara keseluruhan, Apache Kafka lebih unggul daripada Redis OSS dalam hal perpesanan pub/sub karena Kafka dirancang khusus untuk streaming data. Redis OSS memiliki beberapa kasus penggunaan yang berbeda yang tidak dapat digantikan oleh Kafka. 

Paralelisme

Paralelisme adalah kemampuan beberapa konsumen untuk menerima pesan yang sama secara bersamaan.

Redis OSS tidak mendukung paralelisme.

Di sisi lain, Kafka memungkinkan pesan yang sama untuk didistribusikan ke beberapa konsumen secara bersamaan. Biasanya, konsumen dalam grup konsumen Kafka bergiliran mengambil pesan baru dari partisi. Jika hanya ada satu konsumen di beberapa grup konsumen, pengguna tersebut akan mengambil semua pesan. Dengan memanfaatkan pengaturan dan replikasi partisi ini, Anda dapat memasukkan satu konsumen ke dalam setiap grup konsumen di setiap replika partisi. Hal ini memungkinkan semua konsumen untuk mengambil urutan pesan yang sama. 

Throughput 

Throughput mengukur jumlah pesan yang dapat diproses pada setiap sistem per detik.

Kafka secara umum memiliki throughput yang lebih tinggi daripada pub/sub Redis OSS. Kafka menangani volume data yang jauh lebih besar karena tidak perlu menunggu setiap pelanggan menerima pesan sebelum dapat berpindah ke yang lain. Sebagai gantinya, Kafka menyimpan pesan saat ini di cache memori dan penyimpanan sehingga kecepatan baca menjadi optimal. 

Namun, performa Kafka dapat menurun jika konsumen tidak mengambil pesan dengan cukup cepat. Sebab, pesan yang belum dibaca di cache akhirnya dihapus. Jika hal itu terjadi, konsumen harus membaca dari disk, yang penyajian datanya menjadi lebih lambat.

Sementara itu, Redis OSS harus menunggu konfirmasi untuk setiap konsumen, yang membuat throughput berkurang drastis akibat banyaknya simpul yang terhubung. Untuk mengatasinya, kita dapat mengirim beberapa permintaan menggunakan proses yang disebut pipelining, tetapi proses ini mengurangi latensi pesannya. 

Latensi

Baik Kafka maupun Redis OSS cocok untuk pemrosesan data berlatensi rendah. Redis OSS menawarkan waktu pengiriman pesan yang lebih singkat, berkisar dalam milidetik, sementara Kafka rata-rata berkisar puluhan milidetik.

Mengingat Redis OSS membaca dan menulis data terutama di RAM, Redis secara alami lebih cepat daripada Kafka. Namun, Redis OSS mungkin tidak dapat mempertahankan operasi data dengan latensi sangat rendah saat menangani pesan yang lebih besar. Sementara itu, Kafka membutuhkan lebih banyak waktu untuk mereplikasi partisi di beberapa drive fisik untuk persistensi data. Proses ini menambahkan biaya tambahan ke waktu pengiriman pesan.

Mengoptimalkan latensi untuk Redis OSS dan Kafka memang mungkin dilakukan, tetapi Anda harus melakukannya dengan hati-hati. Misalnya, Anda dapat mengompresi pesan Kafka untuk mengurangi latensi, tetapi produsen dan konsumen membutuhkan lebih banyak waktu untuk mendekompresinya.

Latensi di Redis OSS dapat disebabkan oleh beberapa faktor, termasuk lingkungan pengoperasian, operasi jaringan, perintah lambat, atau forking. Untuk mengurangi penundaan akibat forking, Redis OSS merekomendasikan untuk menjalankan sistem pengiriman pub/sub pada instans EC2 modern yang berbasis Mesin Virtual Perangkat Keras (HVM).

Toleransi kesalahan

Kafka menulis semua data ke disk penyimpanan broker utama dan mereplikasinya ke beberapa server yang berbeda. Saat ada server yang mengalami kegagalan, beberapa pelanggan mengambil data dari partisi cadangan. 

Tidak seperti Kafka, Redis OSS tidak mencadangkan data secara default, dan pengguna harus mengaktifkan fitur tersebut secara manual. Redis OSS menggunakan penyimpanan data dalam memori sehingga semua data akan hilang saat mesin dinonaktifkan. Untuk mencegahnya, developer mengaktifkan persistensi Basis Data Redis OSS (RDB) untuk menangkap snapshot secara berkala dari data RAM dan menyimpannya pada disk

Waktu penggunaan: Kafka vs. Redis OSS

Apache Kafka lebih cocok untuk membangun aplikasi yang mengalirkan set data besar dan membutuhkan kemampuan pemulihan yang tinggi. Kafka awalnya dikembangkan sebagai jalur data terdistribusi tunggal yang mampu menangani triliunan pesan yang lewat. Kafka mereplikasi partisi di berbagai server berbeda untuk mencegah kehilangan data saat simpul mengalami kegagalan. Banyak organisasi yang menggunakan Kafka untuk mendukung komunikasi waktu nyata antara aplikasi, perangkat Internet untuk Segala (IoT) seluler, dan layanan mikro. Kafka juga merupakan pilihan yang lebih pas untuk agregasi log, pemrosesan aliran, dan tugas integrasi data berbasis cloud lainnya.

Sementara itu, Redis OSS menyediakan distribusi peristiwa dengan latensi sangat rendah untuk aplikasi yang memerlukan transfer data instan, tetapi menoleransi kehilangan data dalam jumlah kecil. Redis OSS biasanya digunakan sebagai cache sesi untuk menyimpan data yang sering diakses atau mengirimkan pesan mendesak. Redis juga cocok untuk menyimpan data game, e-commerce, atau media sosial untuk memungkinkan pengalaman pengguna yang lebih lancar.

Ringkasan perbedaan: Pub/sub Kafka vs. Redis OSS

 

Apache Kafka

Redis OSS

Ukuran pesan

Mendukung ukuran pesan hingga 1 GB dengan kompresi dan penyimpanan bertingkat.

Mendukung ukuran pesan yang lebih kecil.

Pengiriman pesan

Pelanggan menarik pesan dari antrean.

Server Redis OSS mendorong pesan ke pelanggan yang terhubung.

Retensi pesan

Mempertahankan pesan setelah diambil. 

Tidak mempertahankan pesan.

Penanganan kesalahan

Penanganan kesalahan yang andal di tingkat perpesanan. Antrean surat mati, percobaan ulang peristiwa, dan pengalihan.

Anda harus menangani pengecualian Redis OSS di tingkat aplikasi terkait batas waktu, batas klien, dan kapasitas buffer memori. 

Paralelisme

Kafka mendukung paralelisme. Beberapa konsumen dapat mengambil pesan yang sama secara bersamaan. 

Tidak mendukung paralelisme.

Throughput

Memiliki throughput yang lebih tinggi karena proses baca/tulis yang asinkron. 

Throughput lebih rendah karena server Redis OSS perlu menunggu balasan sebelum mengirim pesan ke pelanggan lain. 

Latensi

Latensi rendah. Sedikit lebih lambat daripada Redis OSS karena data direplikasi secara default

Latensi sangat rendah saat mendistribusikan pesan berukuran lebih kecil.

Toleransi kesalahan

Secara otomatis mencadangkan partisi ke broker yang berbeda. 

Pencadangan tidak dilakukan secara default. Pengguna dapat mengaktifkan persistensi Redis OSS secara manual. Risiko kehilangan data kecil. 

Bagaimana cara AWS membantu memenuhi kebutuhan Kafka dan Redis OSS Anda?

Amazon Web Services (AWS) menyediakan infrastruktur yang dapat diskalakan dan dikelola untuk mendukung kebutuhan perpesanan (pub/sub) Anda. 

Gunakan Amazon Managed Streaming for Apache Kafka (Amazon MSK) untuk dengan mudah menyerap dan memproses data dengan volume yang besar secara waktu nyata. Anda dapat membangun bus data yang diakses secara privat untuk menyediakan simpul streaming dengan ketersediaan tinggi dalam skala besar. Anda juga dapat terhubung secara lancar dengan layanan AWS lainnya, seperti AWS IoT Core, Amazon Virtual Private Cloud (Amazon VPC), dan Layanan Terkelola Amazon untuk Apache Flink.

Gunakan Amazon MemoryDB untuk menyediakan penyimpanan dalam memori dengan ketersediaan tinggi untuk beban kerja Redis OSS Anda. Anda dapat menjalankan umpan data streaming dengan konkurensi tinggi untuk menyerap aktivitas pengguna. Anda juga dapat menampung jutaan permintaan per hari untuk aplikasi media dan hiburan.

Alih-alih Redis OSS atau Kafka, Anda juga dapat menggunakan Amazon Simple Notification Service (Amazon SNS) untuk membangun sistem perpesanan pub/sub. Anda dapat mengirim pesan secara langsung dari aplikasi Anda ke pelanggan atau aplikasi lain dengan cara yang dapat diskalakan dan hemat biaya. Amazon SNS menawarkan beberapa fitur, seperti:

  • Perpesanan dengan throughput tinggi, berbasis push, banyak-ke-banyak antara sistem terdistribusi, layanan mikro, dan aplikasi nirserver yang didorong peristiwa.
  • Enkripsi pesan dan privasi lalu lintas.
  • Kemampuan penyebaran di seluruh kategori AWS. Kemampuan ini mencakup analitik, komputasi, kontainer, basis data, Internet untuk Segala (IoT), machine learning (ML), keamanan, dan penyimpanan.

Mulai pub/sub, Redis OSS, dan Kafka di AWS dengan membuat akun sekarang juga.