Apa perbedaan antara Kafka dan Redis?

Redis 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 olah pesan publikasi-berlangganan (pub/sub). Dalam arsitektur cloud modern, aplikasi dipisahkan menjadi blok penyusun independen yang lebih kecil yang disebut layanan. Olah pesan 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 mendukung sistem berbasis push di mana penerbit mendistribusikan pesan ke semua pelanggan ketika suatu peristiwa terjadi.

Baca tentang Kafka »

Baca tentang Redis »

Cara kerjanya: Pub/Sub Kafka vs. Redis

Apache Kafka adalah platform pengaliran 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 dirancang sebagai basis data dalam memori yang mendukung transfer data latensi rendah antaraplikasi. Redis menyimpan semua pesan pada RAM, bukan hard disk, untuk mengurangi waktu baca dan tulis data. Seperti di Kafka, beberapa konsumen dapat berlangganan aliran Redis untuk mengambil pesan.

Meski keduanya sama-sama dapat digunakan untuk pesan pub/sub, Kafka dan Redis 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 memublikasikan pesan ke broker. Ketika broker menerima pesan, ia mengategorikan data ke dalam suatu topik kemudian menyimpannya ke dalam suatu partisi. Konsumen terhubung ke topik yang relevan kemudian mengekstrak data dari partisinya.

Alur kerja Redis

Redis berjalan dengan arsitektur klien-server sebagai sistem basis data NoSQL. Produsen dan konsumen dipasangkan secara longgar (loose coupling) dan tidak harus saling mengenal saat mengirim pesan.

Redis 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.

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

Baca tentang olah pesan pub/sub »

Penanganan pesan: Pub/Sub Kafka vs. Redis

Apache Kafka memberi developer sistem olah pesan terdistribusi yang dapat diskalakan dengan leluasa. Sementara itu, Redis 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 bekerja paling efektif saat mengirimkan paket data berukuran kecil antara konsumen dan pelanggan.

Redis, khususnya, 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 memampatkan pesan dan Anda mengonfigurasinya untuk penyimpanan bertingkat. Alih-alih menyimpan semua pesan di penyimpanan lokal, ia 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 dengan offset, yang diperbarui untuk mengambil pesan berikutnya. Konsumen dapat mendeteksi dan melacak pesan duplikat.

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

Retensi pesan

Kafka mempertahankan pesan setelah konsumen membacanya. Jadi, jika aplikasi klien kehilangan data yang sudah diambil, aplikasi dapat meminta data itu lagi dari partisi yang berlangganan. Dengan menyetel kebijakan penyimpanan pesan, pengguna dapat menentukan berapa lama Kafka mempertahankan data. 

Sebaliknya, Redis tidak menyimpan pesan setelah dikirim. Jika tidak ada pelanggan yang terhubung ke aliran, Redis membuang pesan tersebut. Pesan yang sudah dibuang tidak dapat dipulihkan meski pelanggan terhubung ke Redis nanti.  

Penanganan kesalahan 

Baik Kafka maupun Redis memungkinkan aplikasi untuk memitigasi pengiriman pesan yang tidak dapat diandalkan, tetapi tiap sistem melakukannya dengan cara yang berbeda.

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

Developer Kafka dapat menyimpan peristiwa yang salah dalam antrean dead-letter, mencoba lagi, atau mengarahkan mereka agar konsistensi pengiriman pesan ke aplikasi klien terjaga. Developer juga dapat menggunakan Kafka Connect API untuk memulai ulang tugas konektor secara otomatis dalam kesalahan tertentu.

Baca tentang antrean dead letter »

Perbedaan kinerja: Pub/Sub Kafka vs. Redis

Secara keseluruhan, Apache Kafka lebih unggul daripada Redis dalam hal olah pesan pub/sub karena Kafka dirancang khusus untuk pengaliran data. Dalam beberapa kasus, penggunaan Redis tidak dapat digantikan oleh Kafka. 

Paralelisme

Paralelisme adalah kemampuan lebih dari satu konsumen untuk menerima pesan yang sama secara bersamaan.

Redis tidak mendukung paralelisme.

Di sisi lain, Kafka memungkinkan pesan yang sama untuk didistribusikan ke beberapa konsumen secara bersamaan. Biasanya, konsumen dalam kelompok 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 tiap grup konsumen di tiap replika partisi. Dengan begini, semua konsumen dapat mengambil rangkaian pesan yang serupa. 

Throughput 

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

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

Namun, kinerja 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 lebih lambat.

Sementara itu, Redis 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 cocok untuk pemrosesan data latensi rendah. Redis menawarkan waktu pengiriman pesan yang lebih singkat dalam kisaran milidetik, sedangkan rata-rata waktu pengiriman pesan Kafka adalah puluhan milidetik.

Mempertimbangkan bahwa Redis lebih banyak membaca dan menulis data pada RAM, secara alami Kafka kalah dalam hal kecepatan. Namun, Redis mungkin tidak dapat mempertahankan operasi data latensi sangat rendah saat menangani pesan dengan volume yang lebih besar. Di sisi lain, Kafka membutuhkan lebih banyak waktu untuk mereplikasi partisi di beberapa drive fisik untuk persistensi data. Proses ini menambah overhead ke waktu pengiriman pesan.

Anda dapat mengoptimalkan latensi untuk Redis dan Kafka, tetapi harus dilakukan dengan hati-hati. Misalnya, Anda dapat mengompres pesan Kafka untuk mengurangi latensi, tetapi produsen dan konsumen nantinya membutuhkan lebih banyak waktu untuk mendekompresnya.

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

Toleransi kesalahan

Kafka menulis semua data di disk broker utama kemudian mereplikasinya di berbagai server. Ketika ada server yang mengalami kegagalan, beberapa pelanggan mengambil data dari partisi cadangan. 

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

Kasus Penggunaan: Pub/Sub Kafka vs. Redis

Apache Kafka lebih cocok untuk membangun aplikasi yang mengalirkan set data besar dan membutuhkan kemampuan pemulihan yang tinggi. Kafka awalnya dikembangkan sebagai pipa 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 memberikan distribusi peristiwa dengan latensi sangat rendah untuk aplikasi yang memerlukan transfer data instan, tetapi menoleransi kehilangan data dalam jumlah kecil. Redis biasanya digunakan sebagai cache sesi untuk menyimpan data yang sering diakses atau menyampaikan 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

 

Apache Kafka

Redis

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 mendorong pesan ke pelanggan yang terhubung.

Retensi pesan

Mempertahankan pesan setelah diambil. 

Tidak mempertahankan pesan.

Penanganan kesalahan

Penanganan kesalahan yang andal di tingkat olah pesan. Antrean dead letter, percobaan ulang peristiwa, dan pengalihan.

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

Paralelisme

Kafka mendukung paralelisme. Lebih dari satu 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 perlu menunggu balasan sebelum bisa mengirim pesan ke pelanggan lain. 

Latensi

Latensi rendah. Sedikit lebih lambat daripada Redis karena ada replikasi data secara default. 

Latensi sangat rendah saat mendistribusikan pesan berukuran lebih kecil.

Toleransi kesalahan

Secara otomatis mencadangkan partisi ke broker yang berbeda. 

Tidak mencadangkan secara default. Pengguna dapat mengaktifkan persistensi Redis secara manual. Risiko kehilangan data kecil. 

Bagaimana cara AWS membantu memenuhi kebutuhan Kafka dan Redis Anda?

Amazon Web Services (AWS) menyediakan infrastruktur yang dapat diskalakan dan dikelola untuk mendukung kebutuhan olah pesan publikasi-berlangganan (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 sesuai skala. 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 Anda. Anda dapat menjalankan umpan streaming data dengan konkurensi tinggi untuk menyerap aktivitas pengguna. Anda juga dapat menampung jutaan permintaan per hari untuk aplikasi media dan hiburan.

Alih-alih Redis atau Kafka, Anda juga dapat menggunakan Amazon Simple Notification Service (Amazon SNS) untuk menyusun sistem olah pesan 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:

  • Olah pesan 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 menggunakan pub/sub, Redis, dan Kafka di AWS dengan membuat akun sekarang juga.