- Diskusi tentang Kafka yang dioptimalkan untuk cloud menjadi semakin aktif melalui KIP-1150 (Kafka tanpa disk) dan proyek fork Kafka dari AutoMQ
- Jika Kafka dibangun ulang, diusulkan untuk menghapus struktur partisi yang ada dan memakai pendekatan berpusat pada key
- Ada kebutuhan akan fitur kontrol konkurensi dan dukungan skema di sisi broker
- Juga ditekankan perlunya mengintegrasikan karakteristik sistem modern seperti skalabilitas, snapshot, dan multi-tenancy
- Sebuah bayangan tentang sistem event log cloud-native yang sesungguhnya yang melampaui keterbatasan Kafka saat ini, dengan Kafka sebagai titik awal
Jika Kafka dibangun ulang?
- Baru-baru ini KIP-1150 (Kafka tanpa disk) dan fork Kafka dari AutoMQ diumumkan, dengan tujuan mengintegrasikan Kafka dengan object storage seperti S3 untuk meningkatkan elastisitas dan menurunkan biaya di lingkungan cloud
- Artikel ini membayangkan sistem event log cloud-native yang melampaui keterbatasan Kafka saat ini dan mengusulkan berbagai perbaikan
Usulan arsitektur tanpa partisi
- Karena object storage cloud dapat berfungsi seperti storage tak terbatas, kebutuhan akan partisi topik menjadi berkurang
- Dalam banyak kasus, yang penting hanyalah urutan pesan global atau urutan pesan dengan key yang sama
- Konsep partisi bisa disembunyikan dari pengguna untuk memberikan pengalaman pakai yang lebih sederhana
Pendekatan berpusat pada key
- Diusulkan desain yang memungkinkan akses cepat dan replay terhadap semua pesan untuk key tertentu, bukan pemindaian partisi
- Dapat mendukung stream setingkat entitas dalam jumlah jutaan sehingga jumlah konsumen bisa diskalakan secara dinamis sesuai permintaan
- Karena kegagalan terisolasi pada level key, efisiensi pemrosesan seluruh sistem dapat meningkat
- Ini adalah struktur yang ideal untuk event sourcing atau sistem actor model
Dukungan hierarki topik
- Seperti sistem seperti Solace, sebagian payload pesan perlu dipromosikan menjadi identifier topik berbentuk jalur terstruktur agar memungkinkan subscription berbasis pola
- Broker dapat mendukung filtering subscription secara efisien tanpa harus mem-parsing seluruh pesan
Fitur kontrol konkurensi
- Kafka saat ini tidak memiliki cara untuk mencegah konflik konkurensi saat penulisan
- Jika mendukung optimistic locking per key, sistem bisa memverifikasi apakah pesan ditulis setelah melihat state terbaru
- Ini dapat mencegah masalah lost update
Dukungan skema di sisi broker
- Kafka saat ini memperlakukan pesan hanya sebagai array byte sederhana sehingga bergantung pada schema registry eksternal
- Diusulkan perlunya dukungan bawaan pada level broker untuk informasi skema seperti metadata AsyncAPI guna memastikan konsistensi skema
- Dengan begitu, integrasi dengan open table format seperti Apache Iceberg juga menjadi lebih mudah
Skalabilitas dan struktur plugin
- Diusulkan arsitektur dengan skalabilitas dan kemampuan plugin seperti Postgres dan Kubernetes
- Filter atau transformasi di level broker harus mudah diimplementasikan tanpa proxy yang memahami protokol seperti Kroxylicious
- Fitur seperti rate limiting, enkripsi topik, dan dukungan backend berbasis tabel Iceberg harus bisa diimplementasikan sebagai plugin
Callback commit sinkron
- Kafka saat ini hanya menjamin eventual consistency
- Diusulkan perlunya struktur yang memungkinkan produser segera memverifikasi apakah data turunan terkait sudah diperbarui setelah pesan dikirim
- Dengan dukungan read-your-own-writes guarantee, Kafka bisa digunakan sebagai log database yang sesungguhnya
Fitur snapshot
- Compaction Kafka saat ini hanya menyisakan pesan terakhir, yang hanya efektif bila pesan tersebut memuat seluruh state
- Jika yang dicatat hanya perubahan, semua event per key tetap harus di-replay sehingga waktu pemrosesan bertambah
- Diperlukan fitur kompaksi logis yang merangkum event per key menjadi snapshot
Dukungan bawaan multi-tenancy
- Semua sistem data modern harus mempertimbangkan multi-tenancy sebagai kemampuan bawaan
- Lingkungan tenant baru harus bisa dibuat dengan murah dan seketika, sambil memisahkan resource, keamanan, dan kontrol akses secara ketat
Catatan lain
- Beberapa fitur sudah didukung oleh sistem seperti S2 (stream dengan kardinalitas tinggi), Waltz (optimistic locking), dan Apache Pulsar (multi-tenancy)
- Namun, belum ada sistem open source yang mendukung semua fitur yang diusulkan sekaligus
- Artikel ini adalah pandangan pribadi penulis yang bekerja di Confluent dan bukan posisi resmi perusahaan
- Disebutkan bahwa secara teoretis arsitektur berbasis LSM tree kemungkinan akan menjadi pilihan yang kuat
2 komentar
Kami sudah menyebutnya Redis.
Komentar Hacker News
Setuju. Untuk kasus penggunaan tertentu, ini layak untuk menyelesaikan masalah head-of-line
NATS.io lebih mudah digunakan daripada Kafka, dan sudah menyelesaikan beberapa hal seperti penghapusan partisi, dukungan stream berbasis kunci, dan hierarki topik yang fleksibel
Perjalanan saya dengan Kafka sebagian besar serupa
Untuk kasus penggunaan tertentu, akan berguna jika kita bisa menjamin bahwa saat permintaan create di-acknowledge, derived data view juga sudah diperbarui
Saya mengajukan pertanyaan ini 6 tahun lalu
Object storage untuk Kafka? Itu akan meningkatkan latensi dan biaya 10x
Soal "penghapusan partisi" dan "stream tingkat kunci"
Northguard perlu diperhatikan
Saya penasaran, seberapa banyak masalah Apache Kafka yang bisa diselesaikan dengan beralih ke Apache Pulsar
Ini eksperimen pemikiran yang berguna