Tutorial 13: Apache Kafka untuk Pipeline ML Real-Time
Daftar Isi
Pendahuluan
Dalam sistem machine learning modern, kemampuan untuk memproses data dan menghasilkan prediksi secara real-time merupakan keunggulan kompetitif yang sangat penting. Pipeline inferensi batch yang berjalan setiap jam atau harian tidak mampu memenuhi kebutuhan sistem deteksi penipuan, mesin rekomendasi, penetapan harga dinamis, atau deteksi anomali yang membutuhkan waktu respons di bawah satu detik.
Apache Kafka adalah platform streaming event terdistribusi yang memungkinkan Anda membangun pipeline data real-time yang handal, skalabel, dan fault-tolerant. Ketika diintegrasikan dengan model ML, Kafka memungkinkan Anda untuk menyerap data streaming, menghitung fitur secara langsung, menyajikan prediksi real-time, dan mengirimkan hasil ke sistem hilir (downstream) — semuanya dengan throughput tinggi dan toleransi terhadap kegagalan.
Tutorial ini akan memandu Anda melalui perjalanan lengkap: dari dasar-dasar Kafka hingga membangun pipeline inferensi ML real-time tingkat produksi menggunakan Python.
Prasyarat
- Python 3.9 atau lebih tinggi
- Docker dan Docker Compose sudah terinstal
- Pemahaman dasar konsep machine learning
- Familiar dengan REST API dan JSON
- Instal paket Python yang diperlukan:
pip install confluent-kafka fastavro requests scikit-learn numpy pandas fastapi uvicorn
Memahami Apache Kafka
Konsep Inti
Apache Kafka beroperasi menggunakan beberapa abstraksi fundamental:
Topics adalah kategori atau feed bernama tempat rekaman dipublikasikan. Bayangkan topic seperti tabel database atau folder dalam sistem file. Setiap topic dibagi menjadi partitions, yaitu urutan rekaman yang teratur dan tidak dapat diubah (immutable). Partisi memungkinkan paralelisme — beberapa consumer dapat membaca dari partisi yang berbeda secara bersamaan. Producers adalah aplikasi klien yang mempublikasikan (menulis) event ke topic Kafka. Consumers adalah aplikasi yang berlangganan (membaca dan memproses) event dari topic. Consumer diorganisasikan dalam consumer groups, di mana setiap partisi dikonsumsi oleh tepat satu consumer dalam grup, memungkinkan penyeimbangan beban. Brokers adalah server Kafka yang menyimpan data dan melayani klien. Sebuah cluster Kafka terdiri dari beberapa broker untuk redundansi dan skalabilitas. Offsets adalah ID sekuensial unik yang diberikan pada setiap rekaman dalam partisi. Consumer melacak posisi mereka menggunakan offset, memungkinkan jaminan pemrosesan exactly-once atau at-least-once.Mengapa Kafka untuk ML?
| Fitur | Manfaat untuk ML |
|-------|-----------------|
| Throughput tinggi | Menangani jutaan permintaan prediksi per detik |
| Durabilitas | Tidak kehilangan data input meskipun layanan ML mati |
| Decoupling | Memisahkan penyerapan data dari inferensi model |
| Replayability | Memproses ulang data historis dengan model yang diperbarui |
| Skalabilitas | Menambahkan lebih banyak consumer/partisi seiring peningkatan beban |
Menyiapkan Kafka Secara Lokal
Buat file docker-compose.yml untuk stack Kafka lengkap:
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
environment:
ZOOKEEPERCLIENTPORT: 2181
ZOOKEEPERTICKTIME: 2000
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:7.5.0
dependson:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKABROKERID: 1