Menjelajahi Manfaat Menggunakan API Gateway untuk Kafka
Yuan Bao
March 31, 2023
Pengenalan Singkat tentang Kafka
Kafka awalnya dibuat oleh LinkedIn sebagai sistem pesan terdistribusi yang mengandalkan koordinasi Zookeeper dan mencakup beberapa partisi dan replika. Kemudian, Kafka disumbangkan ke Apache Software Foundation. Berkat throughput yang luar biasa, persistensi, dan kemampuan penskalaan horizontal, Kafka telah menjadi platform pemrosesan aliran terdistribusi yang banyak diadopsi di industri.
Kafka memiliki tiga kasus penggunaan utama:
- Sistem pesan: Ini adalah kasus penggunaan yang paling umum, di mana Kafka digunakan untuk komunikasi pesan antara mikroservis backend. Kafka memungkinkan pemisahan sistem, pembentukan lalu lintas, dan komunikasi asinkron.
- Sistem penyimpanan: Kafka menyimpan pesan di disk dan memiliki fitur multi-replika, menjadikannya pilihan yang cocok untuk digunakan sebagai sistem persistensi data. Ini sangat mengurangi risiko kehilangan data.
- Platform pemrosesan aliran: Kafka menyediakan pustaka lengkap untuk pemrosesan aliran, termasuk operasi seperti windowing, joining, dan transformasi.
Arsitektur Teknis Kafka
Sebuah kluster Kafka standar terdiri dari beberapa Produsen, Konsumen, Broker, dan kluster Zookeeper. Zookeeper adalah komponen kontrol inti dari kluster Kafka, bertanggung jawab untuk mengelola metadata kluster dan pemilihan kontroler. Produsen mengirim pesan ke Broker, yang menyimpan pesan di disk, sementara Konsumen berlangganan dan mengonsumsi pesan dari Broker.
Konsep Inti
Topik dan Partisi Kafka
Di Kafka, pesan dikategorikan berdasarkan topik. Produsen biasanya menentukan topik saat mengirim pesan, sementara Konsumen biasanya berlangganan topik untuk mengonsumsi pesan.
Sebuah topik biasanya terdiri dari beberapa partisi, dengan setiap partisi berisi pesan yang berbeda. Ketika pesan dikirim ke Kafka, pesan tersebut disimpan di partisi yang sesuai berdasarkan aturan partisi. Dengan menetapkan aturan partisi yang sesuai, pesan dapat didistribusikan secara merata di berbagai partisi.
Produsen dan Konsumen
Produsen merujuk pada pihak yang mengirim pesan, bertanggung jawab untuk membuat pesan dan mengirimkannya ke broker Kafka.
Konsumen merujuk pada pihak yang menerima pesan, bertanggung jawab untuk terhubung ke broker kluster Kafka, berlangganan topik tertentu, dan mengonsumsi pesan.
Broker Kafka
Sebuah Broker dapat dianggap sebagai node atau instance independen dari Kafka. Sebuah kluster Kafka terdiri dari satu atau lebih Broker.

Mengapa Kafka Membutuhkan API Gateway
Dalam kebanyakan kasus, ketika menggunakan Kafka sebagai sistem pesan antara mikroservis backend, pengembang perlu memilih SDK Kafka yang berbeda untuk mengembangkan klien produsen atau konsumen, tergantung pada bahasa yang digunakan dalam proyek.
Namun, pendekatan ini memiliki keterbatasan dalam beberapa skenario, seperti ketika klien perlu terhubung langsung ke Kafka. Dalam kasus seperti itu, menambahkan API gateway antara pemanggil dan Kafka dapat membantu memisahkan layanan. Dengan cara ini, pemanggil tidak perlu khawatir tentang Kafka atau protokol komunikasi tertentu, yang mengurangi biaya pemanggilan. Selain itu, API gateway dapat memberikan dukungan keamanan dan kemampuan kontrol lalu lintas untuk API yang diekspos oleh Kafka, memastikan stabilitas layanan Kafka.
Menghubungkan Kafka Secara Langsung
Menghubungkan langsung ke Kafka dapat menghasilkan sejumlah keterbatasan dan risiko ketika menggunakannya sebagai middleware antrean pesan:
- Konsumen yang berbeda harus menyesuaikan diri dengan protokol komunikasi Kafka.
- Kafka tidak menyediakan solusi untuk mengamankan API yang diekspos, kontrol lalu lintas, dan masalah lainnya. Tanpa kebijakan pembatasan laju, beberapa produsen atau konsumen dapat mengonsumsi daya komputasi dan bandwidth yang berlebihan.
- Baik konsumen maupun produsen harus mengetahui topologi kluster Kafka, yang mungkin terpengaruh oleh perubahan pada kluster Kafka.
API Gateway Meningkatkan Kegunaan Kafka
Konversi Protokol Komunikasi
Ketika API gateway digunakan untuk memproksi Kafka, klien berkomunikasi dengan API gateway menggunakan protokol HTTP, sementara API gateway berkomunikasi dengan Kafka menggunakan protokol Kafka. API gateway mengubah pesan klien ke protokol Kafka, menghilangkan kebutuhan klien untuk menyesuaikan diri dengan protokol pesan Kafka yang berbeda. Ini secara signifikan mengurangi biaya pengembangan dan membuatnya lebih nyaman digunakan.
Pembatasan Laju
Ketika sumber daya terbatas, kapasitas layanan node Kafka juga terbatas. Melebihi batas ini dapat menyebabkan layanan crash dan menghasilkan reaksi berantai. Pembatasan laju dapat mencegah hal ini terjadi. Dalam arsitektur Kafka tradisional, klien berkomunikasi dengan Kafka melalui SDK. Namun, jika jumlah klien atau permintaan tinggi, ini dapat memengaruhi beban mesin node Kafka dan memengaruhi stabilitas fungsi Kafka. Menambahkan API gateway ke arsitektur memudahkan untuk memasukkan berbagai dimensi dukungan fungsi pembatasan laju ke kluster Kafka, karena API gateway unggul dalam hal ini. Kemampuan ini meliputi:
- Menggunakan algoritma jendela waktu tetap untuk membatasi jumlah total permintaan yang dapat dibuat oleh satu klien ke layanan dalam jangka waktu tertentu.
- Membatasi jumlah permintaan bersamaan yang dapat dibuat oleh klien ke satu layanan.
- Menggunakan algoritma ember bocor untuk membatasi laju permintaan satu klien ke layanan.
Dengan menerapkan fungsi pembatasan laju ini, node Kafka dapat dilindungi secara efektif, memastikan stabilitasnya.
Dukungan Autentikasi
Autentikasi juga merupakan fitur kuat dari API gateway. Dalam arsitektur Kafka tradisional, sebagian besar port Kafka diakses dalam jaringan internal. Jika akses dari jaringan publik diperlukan, konfigurasi yang kompleks diperlukan untuk memastikan keamanan. Menggunakan fungsi autentikasi API gateway saat memproksi Kafka dapat melindungi port yang diekspos oleh Kafka sambil juga memungkinkan atau menolak akses klien secara selektif.
Kemampuan Pemantauan
Saat ini ada banyak produk pemantauan yang tersedia untuk Kafka, seperti Kafka Eagle, Kafka Monitor, Kafka Manager, dll. Masing-masing memiliki kelebihan dan kekurangan. Sangat menantang untuk mencapai kemampuan pemantauan yang universal, dan biaya kustomisasi relatif tinggi. Selain itu, mengintegrasikannya dengan sistem pemantauan internal bisa sulit. Membangun sistem pemantauan Kafka dari awal juga mahal, karena informasi pemantauan untuk Kafka mencakup banyak aspek, dan metrik pemantauan yang disediakan oleh Kafka sendiri memerlukan pemrosesan yang kompleks melalui Java Management Extension (JMX).
Dengan menambahkan API gateway ke arsitektur, komunikasi klien dan API gateway didasarkan pada protokol HTTP. Akibatnya, ekosistem perangkat lunak pemantauan berbasis protokol HTTP sangat kaya. Ini memungkinkan penyediaan observabilitas yang komprehensif untuk layanan Kafka dengan biaya yang sangat rendah.
Peningkatan Bertahap Kafka
Layanan Kafka diekspos melalui alamat broker, yang perlu disediakan oleh produsen dan konsumen dalam informasi konfigurasi mereka untuk terhubung ke kluster Kafka. Daftar alamat biasanya diformat sebagai host1:port1, host2:port2, dan dapat berisi satu atau lebih alamat yang dipisahkan oleh koma.
Namun, metode konfigurasi ini memiliki keterbatasan: ini memerlukan alamat broker Kafka tetap dan layanan tetap stabil. Klien Kafka mengasumsikan bahwa semua alamat broker tersedia dan secara acak memilih satu untuk digunakan. Ini dapat menyebabkan masalah selama peningkatan bertahap karena klien tidak tahu broker mana yang harus digunakan, dan mengubah alamat broker memerlukan semua klien produsen dan konsumen untuk melakukan perubahan.
Dengan API gateway untuk Kafka, alamat broker dapat dikonfigurasi di lapisan gateway, dan klien tidak perlu lagi fokus pada detail spesifik broker Kafka. Bahkan jika alamat broker berubah, klien tetap tidak terpengaruh. Ini memudahkan untuk melakukan peningkatan bertahap untuk Kafka tanpa khawatir memengaruhi klien.
Ringkasan
Dengan demikian, dengan menambahkan API gateway ke Kafka, menjadi lebih mudah untuk menyediakan pembatasan laju, autentikasi, pemantauan, dan kemampuan peningkatan bertahap untuk layanan Kafka melalui fungsi kaya dari API gateway.
Menggunakan Apache APISIX untuk Memperluas Kafka
Apache APISIX adalah API gateway berkinerja tinggi dan real-time di bawah Apache Software Foundation. Ini menawarkan berbagai fitur manajemen lalu lintas yang canggih, termasuk load balancing, upstream dinamis, canary release, circuit breaking, autentikasi, dan observabilitas. Sebagai API gateway, APISIX membantu perusahaan memproses lalu lintas API dan mikroservis dengan cepat dan aman dan banyak digunakan dalam Kubernetes Ingress dan service mesh. Dengan menambahkan lapisan APISIX di depan layanan Kafka, perusahaan dapat memanfaatkan sistem plugin yang kaya dari platform untuk mengaktifkan proksi pesan, pengiriman log, pembatasan laju, pemantauan, dan kemampuan lainnya. Dengan APISIX, baik lalu lintas utara-selatan dari klien ke server maupun lalu lintas timur-barat antara mikroservis perusahaan dapat diproses secara efektif.

Memproksi Pesan Kafka
APISIX menawarkan kemampuan untuk memproksi pesan Kafka. Klien dapat berkomunikasi langsung dengan APISIX, yang menangani konversi protokol pesan antara klien dan Kafka.
Untuk mengaktifkan fitur proksi Kafka di APISIX, kita hanya perlu menambahkan rute seperti yang ditunjukkan di bawah ini:
curl -X PUT 'http://127.0.0.1:9180/apisix/admin/routes/Kafka' \ -H 'X-API-KEY: <api-key>' \ -H 'Content-Type: application/json' \ -d '{ "uri": "/Kafka", "plugins": { "Kafka-proxy": { "sasl": { "username": "user", "password": "pwd" } }, "limit-count": { "count": 2, "time_window": 60, "rejected_code": 503, "key_type": "var", "key": "remote_addr" } }, "upstream": { "nodes": { "Kafka-server1:9092": 1, "Kafka-server2:9092": 1, "Kafka-server3:9092": 1 }, "type": "none", "scheme": "Kafka" } }'
Permintaan ini membuat rute dengan URI /Kafka di APISIX, yang dikaitkan dengan tiga node broker Kafka sebagai layanan upstream. Plugin kafka-proxy digunakan untuk menambahkan autentikasi SASL/PLAIN ke permintaan Kafka. Konfigurasi di APISIX mendukung pembaruan panas, sehingga broker Kafka dapat diubah tanpa memerlukan restart API gateway atau mengganggu klien.
Selain itu, plugin limit-count diaktifkan untuk rute ini untuk menyediakan dukungan pembatasan laju. Konfigurasi plugin menentukan bahwa hanya dua permintaan yang diizinkan untuk melewati dalam interval 60 detik, dan permintaan tambahan akan ditolak oleh APISIX dengan kode status 503.
Pengiriman Log
Plugin kafka-logger APISIX memungkinkan log dikirim sebagai objek JSON ke kluster Apache Kafka.
Berikut adalah contoh konfigurasi:
curl http://127.0.0.1:9180/apisix/admin/routes/1 \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "kafka-logger": { "brokers" : [ { "host" :"127.0.0.1", "port" : 9092 }, { "host" :"127.0.0.1", "port" : 9093 } ], "kafka_topic" : "test2", "key" : "key1" } }, "upstream": { "nodes": { "127.0.0.1:1980": 1 }, "type": "roundrobin" }, "uri": "/hello" }'
APISIX menawarkan lebih dari sekadar kemampuan untuk memproksi pesan Kafka. Ini juga menyediakan tracing, metrik, dan logging melalui berbagai plugin, mencakup semua aspek observabilitas. Dengan konfigurasi plugin sederhana di APISIX, integrasi dengan layanan observabilitas lain seperti Prometheus, Skywalking, dan lainnya dimungkinkan, meningkatkan kemampuan pemantauan kluster Kafka.
Ringkasan
Artikel ini menyoroti keuntungan dari implementasi API gateway untuk Kafka, dan menggunakan Apache APISIX sebagai studi kasus untuk menunjukkan bagaimana API gateway menawarkan fitur Kafka seperti pembatasan laju, autentikasi, pemantauan, dan peningkatan bertahap.