- KIP-1150 (diskless Kafka) और AutoMQ के Kafka fork प्रोजेक्ट के जरिए cloud-optimized Kafka पर चर्चा तेज़ हुई है
- अगर Kafka को फिर से बनाया जाए, तो मौजूदा partition structure को हटाकर key-centric approach अपनाने का प्रस्ताव है
- concurrency control और broker-side schema support जैसी क्षमताओं की ज़रूरत बताई गई है
- scalability, snapshots, multi-tenancy जैसे आधुनिक सिस्टम गुणों को एकीकृत करने की आवश्यकता पर भी ज़ोर दिया गया है
- Kafka के आधार पर, मौजूदा Kafka की सीमाओं से आगे बढ़ने वाले वास्तविक cloud-native event log system की कल्पना की गई है
अगर Kafka को फिर से बनाया जाए?
- हाल ही में KIP-1150 (diskless Kafka) और AutoMQ के Kafka fork की घोषणा हुई, जिनका लक्ष्य S3 जैसे object storage के साथ Kafka को एकीकृत करके cloud environment में elasticity बढ़ाना और लागत कम करना है
- मौजूदा Kafka की सीमाओं से आगे बढ़ने वाले cloud-native event log system की कल्पना करते हुए कई सुधार प्रस्तावित किए गए हैं
partition-रहित संरचना का प्रस्ताव
- क्योंकि cloud object storage लगभग असीमित storage की तरह काम करता है, इसलिए topic partitions की आवश्यकता कम हो जाती है
- कई मामलों में या तो global message ordering महत्वपूर्ण होती है, या केवल एक ही key वाले messages का क्रम
- users से partition की अवधारणा छिपाकर अधिक सरल उपयोगिता दी जा सकती है
key-centric approach
- partition scan के बजाय किसी specific key के सभी messages तक तेज़ी से पहुँचने और उन्हें replay करने के लिए डिज़ाइन का प्रस्ताव है
- यह लाखों entity-level streams को support कर सकता है, जिससे demand के अनुसार consumers की संख्या को लचीले ढंग से बदला जा सकता है
- failures key स्तर पर isolate हो जाते हैं, इसलिए पूरे सिस्टम की processing efficiency बढ़ती है
- यह event sourcing या actor model systems के लिए आदर्श संरचना है
topic hierarchy support
- Solace जैसे systems की तरह, message payload के एक हिस्से को structured path-form topic identifier में promote करके pattern-based subscriptions को संभव बनाना चाहिए
- इससे broker पूरे message को parse किए बिना भी efficient subscription filtering कर सकता है
concurrency control feature
- मौजूदा Kafka में write के समय concurrency conflicts को रोकने का कोई तरीका नहीं है
- अगर per-key optimistic locking support हो, तो यह verify किया जा सकता है कि message latest state देखने के बाद लिखा गया था या नहीं
- इससे lost update problem को रोका जा सकता है
broker-side schema support
- Kafka अभी messages को सिर्फ byte array की तरह मानता है, इसलिए उसे external schema registry पर निर्भर रहना पड़ता है
- schema consistency सुनिश्चित करने के लिए broker स्तर पर AsyncAPI metadata जैसे schema information का built-in support होना चाहिए
- इससे Apache Iceberg जैसे open table formats के साथ integration भी आसान हो सकता है
scalability और plugin structure
- Postgres और Kubernetes की तरह extensibility और pluginability वाली संरचना का प्रस्ताव है
- protocol-aware proxy (जैसे Kroxylicious) के बिना broker-level filters या transformations को आसानी से implement किया जा सकना चाहिए
- rate limiting, topic encryption, और Iceberg table-based backend support जैसी चीज़ें plugins के रूप में implement की जा सकनी चाहिए
synchronous commit callbacks
- मौजूदा Kafka केवल eventual consistency की गारंटी देता है
- यह सुझाव दिया गया है कि producer message भेजने के बाद तुरंत यह verify कर सके कि उससे निकला derived data update हुआ या नहीं
- read-your-own-writes guarantee को support करके Kafka को एक वास्तविक database log की तरह इस्तेमाल किया जा सकता है
snapshot feature
- Kafka का मौजूदा compaction केवल आख़िरी message को रखता है, जो तभी उपयोगी है जब उसमें पूरा state शामिल हो
- अगर केवल changes रिकॉर्ड किए जाते हैं, तो हर key के लिए सभी events को replay करना पड़ता है, जिससे समय बढ़ता है
- key स्तर पर events को snapshot के रूप में संक्षेपित करने वाली logical compaction क्षमता की ज़रूरत है
built-in multi-tenancy support
- हर आधुनिक data system को multi-tenancy को बुनियादी रूप से ध्यान में रखना चाहिए
- नए tenant environments को कम लागत में और तुरंत बनाया जा सके, और resources, security, तथा access control का कड़ा पृथक्करण होना चाहिए
अन्य संदर्भ
- कुछ features पहले से S2 (high-cardinality streams), Waltz (optimistic locking), और Apache Pulsar (multi-tenancy) जैसे systems में उपलब्ध हैं
- लेकिन प्रस्तावित सभी features को एक साथ support करने वाला open source system अभी मौजूद नहीं है
- यह लेख Confluent से जुड़े लेखक की व्यक्तिगत राय है, आधिकारिक रुख नहीं
- सैद्धांतिक रूप से LSM tree-based architecture को सबसे संभावित विकल्प बताया गया है
2 टिप्पणियां
हम इसे पहले से ही Redis कहते हैं।
Hacker News राय
सहमत हूँ। कुछ खास use cases के लिए head-of-line समस्या को हल करना काफ़ी मूल्यवान है
NATS.io, Kafka की तुलना में उपयोग में आसान है, और partition हटाने, key-based stream support, और flexible topic hierarchy जैसी कई चीज़ें पहले ही हल कर चुका है
Kafka के साथ मेरा सफ़र भी ज़्यादातर ऐसा ही रहा
कुछ खास use cases में, अगर create request के acknowledge होने तक यह गारंटी मिल जाए कि derived data view update हो चुका है, तो यह उपयोगी होगा
मैंने 6 साल पहले यही सवाल पूछा था
Kafka का object storage? इससे latency और cost 10 गुना बढ़ जाएगी
"partition हटाने" और "key-level stream" के बारे में
Northguard पर नज़र रखनी चाहिए
सोचता हूँ कि Apache Kafka की कितनी समस्याएँ Apache Pulsar पर स्विच करने से हल हो जाती हैं
यह एक उपयोगी thought experiment है