Apache Apex

**Apache Apex** adalah kerangka kerja pemrosesan mahadata (*big data*) berskala besar yang berfokus pada aliran data (*stream-first*). Teknologi ini dirancang untuk menangani dataset tak terbatas (*unbounded*) maupun terbatas (*bounded*) dengan latensi rendah,  lewatan tinggi (*throughput*), serta toleransi kesalahan yang baik dalam lingkungan klaster. Pengembangan Apex dimulai pada tahun 2012 dan menjadi proyek di **Apache Software Foundation** pada tahun 2015.

Sistem ini dapat digunakan untuk pemrosesan data secara langsung maupun dalam kelompok, dengan arsitektur pengaliran data yang terpadu dan menyimpan keadaan proses secara berkelanjutan. Selain itu, Apache Apex mendukung pengelompokan data berdasarkan waktu kejadian serta memastikan setiap data diproses tepat satu kali tanpa pengulangan.

## Model
Logika pemrosesan dalam aplikasi Apex direpresentasikan dalam bentuk **graf asiklik terarah** atau *Directed Acyclic Graph* (DAG), yang terdiri dari operator dan aliran data. Aliran data adalah rangkaian kejadian atau kumpulan data yang tidak terbatas, sedangkan operator merupakan unit fungsional dasar yang digunakan sebagai sumber data, tujuan akhir, atau untuk melakukan transformasi data.

Berdasarkan pendekatan DAG, logika pemrosesan yang kompleks dapat disusun secara berurutan maupun paralel. Karena graf bersifat asiklik, keluaran dari suatu operator hanya dapat dikirim ke operator di tingkat berikutnya. Untuk alur pemrosesan yang membutuhkan perulangan, disediakan operator penundaan khusus yang memungkinkan keluaran dari suatu operator dikembalikan sebagai masukan ke operator sebelumnya. Yang mana mekanisme ini yang sering digunakan dalam pemelajaran mesin. Selain itu, mesin pemrosesan Apex juga menyediakan antarmuka modul, yang memungkinkan pembuatan operator gabungan yang mewakili bagian DAG yang dapat digunakan kembali.

Mesin pemrosesan Apex menyediakan **antarmuka pemrograman tingkat rendah** yang memungkinkan pengembang menyusun alur pemrosesan dengan menggabungkan operator dan aliran data ke dalam graf asiklik terarah (DAG). Antarmuka ini memberikan fleksibilitas dan kendali penuh terhadap pemrosesan data. Pengembang dapat menentukan operator secara langsung serta mengatur berbagai atribut seperti batasan sumber daya, hubungan antar-komponen, hingga metode pengodean aliran data. Namun, karena sifatnya yang sangat terperinci, antarmuka ini cenderung lebih panjang dan kompleks jika digunakan untuk skenario yang tidak memerlukan fleksibilitas tingkat tinggi.

Untuk menyederhanakan proses pengembangan, Apex juga menyediakan **antarmuka pemrograman tingkat tinggi** dalam bentuk pustaka khusus. Melalui pendekatan ini, pengembang dapat merancang aplikasi menggunakan gaya deklaratif yang lebih ringkas, mirip dengan cara kerja sistem pemrosesan data lainnya seperti Apache Spark dan Apache Flink. Alih-alih menentukan operator satu per satu, pengembang cukup mendefinisikan sumber data, proses transformasi, dan tujuan akhir dengan merangkai pemanggilan metode pada antarmuka aliran data. Secara internal, antarmuka ini tetap menerjemahkan perintah ke dalam struktur DAG tingkat rendah, sehingga pengembang tidak perlu memahami kelas operator secara mendetail. Antarmuka ini lebih cocok untuk kasus penggunaan yang tidak memerlukan pengaturan lanjutan.

## Referensi