Penafian : Saya adalah komiter Apache Flink dan anggota PMC dan hanya akrab dengan desain tingkat tinggi Storm, bukan internal.
Apache Flink adalah kerangka kerja untuk aliran terpadu dan pemrosesan batch. Runtime Flink secara native mendukung kedua domain karena transfer data pipelined antara tugas paralel yang mencakup pengacakan pipelined. Rekaman segera dikirim dari tugas produksi ke tugas penerimaan (setelah dikumpulkan dalam buffer untuk transfer jaringan). Pekerjaan batch dapat dijalankan secara opsional menggunakan pemblokiran transfer data.
Apache Spark adalah kerangka kerja yang juga mendukung pemrosesan batch dan aliran. API batch Flink terlihat sangat mirip dan menangani kasus penggunaan yang mirip seperti Spark tetapi berbeda di internal. Untuk streaming, kedua sistem mengikuti pendekatan yang sangat berbeda (mini-batch vs. streaming) yang membuatnya cocok untuk berbagai jenis aplikasi. Saya akan mengatakan membandingkan Spark dan Flink adalah valid dan berguna, namun, Spark bukanlah mesin pemroses aliran yang paling mirip dengan Flink.
Datang ke pertanyaan awal, Apache Storm adalah prosesor aliran data tanpa kemampuan batch. Faktanya, mesin pipelined Flink secara internal terlihat agak mirip dengan Storm, yaitu, antarmuka tugas paralel Flink mirip dengan baut Storm. Storm dan Flink memiliki kesamaan yaitu mereka bertujuan untuk pemrosesan aliran latensi rendah dengan transfer data pipelined. Namun, Flink menawarkan API level yang lebih tinggi dibandingkan dengan Storm. Alih-alih mengimplementasikan fungsionalitas baut dengan satu atau lebih pembaca dan kolektor, Flink DataStream API menyediakan fungsi seperti Map, GroupBy, Window, dan Join. Banyak dari fungsi ini harus diimplementasikan secara manual saat menggunakan Storm. Perbedaan lainnya adalah memproses semantik. Storm menjamin setidaknya sekali pemrosesan sementara Flink menyediakan tepat sekali. Implementasi yang memberikan jaminan pemrosesan ini sedikit berbeda. Sementara Storm menggunakan pengakuan tingkat rekor, Flink menggunakan varian dari algoritma Chandy-Lamport. Singkatnya, sumber data secara berkala memasukkan penanda ke dalam aliran data. Setiap kali operator menerima penanda seperti itu, ia memeriksa status internalnya. Saat marker diterima oleh semua data sink, marker (dan semua record yang telah diproses sebelumnya) dikomit. Jika terjadi kegagalan, semua operator sumber disetel ulang ke status mereka saat mereka melihat penanda terakhir yang dilakukan dan pemrosesan dilanjutkan. Pendekatan marker-checkpoint ini lebih ringan daripada pengakuan level rekor Storm. Ini sumber data secara berkala memasukkan penanda ke dalam aliran data. Setiap kali operator menerima penanda seperti itu, ia memeriksa status internalnya. Saat marker diterima oleh semua data sink, marker (dan semua record yang telah diproses sebelumnya) dikomit. Jika terjadi kegagalan, semua operator sumber disetel ulang ke status mereka saat mereka melihat penanda terakhir yang dilakukan dan pemrosesan dilanjutkan. Pendekatan marker-checkpoint ini lebih ringan daripada pengakuan level rekor Storm. Ini sumber data secara berkala memasukkan penanda ke dalam aliran data. Setiap kali operator menerima penanda seperti itu, ia memeriksa status internalnya. Saat marker diterima oleh semua data sink, marker (dan semua record yang telah diproses sebelumnya) dikomit. Jika terjadi kegagalan, semua operator sumber disetel ulang ke status mereka saat mereka melihat penanda terakhir yang dilakukan dan pemrosesan dilanjutkan. Pendekatan marker-checkpoint ini lebih ringan daripada pengakuan level rekor Storm. Ini semua operator sumber disetel ulang ke status mereka saat mereka melihat penanda terakhir yang dilakukan dan pemrosesan dilanjutkan. Pendekatan marker-checkpoint ini lebih ringan daripada pengakuan level rekor Storm. Ini semua operator sumber disetel ulang ke status mereka saat mereka melihat penanda terakhir yang berkomitmen dan pemrosesan dilanjutkan. Pendekatan marker-checkpoint ini lebih ringan daripada pengakuan level rekor Storm. Iniset slide dan pembicaraan terkait membahas pendekatan pemrosesan streaming Flink termasuk toleransi kesalahan, checkpointing, dan penanganan status.
Storm juga menawarkan API tingkat tinggi yang tepat sekali yang disebut Trident. Namun, Trident didasarkan pada mini-batch dan karenanya lebih mirip dengan Spark daripada Flink.
Latensi Flink yang dapat disesuaikan mengacu pada cara Flink mengirimkan catatan dari satu tugas ke tugas lainnya. Saya katakan sebelumnya, bahwa Flink menggunakan transfer data pipelined dan meneruskan catatan segera setelah diproduksi. Untuk efisiensi, record ini dikumpulkan dalam buffer yang dikirim melalui jaringan setelah penuh atau ambang waktu tertentu terpenuhi. Ambang batas ini mengontrol latensi rekaman karena ini menentukan jumlah waktu maksimum rekaman akan tetap berada di buffer tanpa dikirim ke tugas berikutnya. Namun, ini tidak dapat digunakan untuk memberikan jaminan pasti tentang waktu yang dibutuhkan untuk rekaman dari memasuki hingga keluar dari program karena ini juga tergantung pada waktu pemrosesan dalam tugas dan jumlah transfer jaringan di antara hal-hal lainnya.