Flink telah dibandingkan dengan Spark , yang, menurut saya, merupakan perbandingan yang salah karena Flink membandingkan sistem pemrosesan peristiwa berjendela dengan micro-batching; Demikian pula, tidak masuk akal bagi saya untuk membandingkan Flink dengan Samza. Dalam kedua kasus, ini membandingkan real-time vs. strategi pemrosesan peristiwa bertumpuk, bahkan jika pada "skala" yang lebih kecil dalam kasus Samza. Tapi saya ingin tahu bagaimana Flink dibandingkan dengan Storm, yang secara konseptual tampak jauh lebih mirip dengannya.
Saya telah menemukan ini (Slide # 4) yang mendokumentasikan perbedaan utama sebagai "latensi yang dapat disesuaikan" untuk Flink. Petunjuk lain tampaknya adalah artikel oleh Slicon Angle yang menyarankan bahwa Flink lebih terintegrasi ke dalam dunia Spark atau HadoopMR, tetapi tidak ada detail aktual yang disebutkan atau dirujuk. Terakhir, Fabian Hueske sendiri mencatat dalam sebuah wawancara bahwa "Dibandingkan dengan Apache Storm, fungsionalitas analisis aliran Flink menawarkan API tingkat tinggi dan menggunakan strategi toleransi kesalahan yang lebih ringan untuk memberikan jaminan pemrosesan yang tepat sekali."
Semua itu agak jarang bagi saya dan saya tidak mengerti maksudnya. Adakah yang bisa menjelaskan masalah apa dengan pemrosesan streaming di Storm yang sebenarnya diselesaikan oleh Flink? Apa yang dimaksud Hueske dengan masalah API dan "strategi toleransi kesalahan yang lebih ringan"?
Jawaban:
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.
sumber
Menambah jawaban dari Fabian Hueske:
Flink meningkat pada Storm juga dengan cara berikut:
Backpressure: Runtime streaming Flink berperilaku baik ketika operator yang berbeda berjalan pada kecepatan yang berbeda, karena operator downstream memberikan tekanan balik kepada operator upstream dengan sangat baik meskipun lapisan jaringan mengelola kumpulan buffer.
Status yang ditentukan pengguna: Flink memungkinkan program mempertahankan status kustom di operator Anda. Status itu sebenarnya dapat berpartisipasi dalam pemeriksaan untuk toleransi kesalahan, memberikan jaminan tepat satu kali untuk status kustom yang ditentukan pengguna. Lihat contoh mesin status yang ditentukan pengguna di dalam operator, yang secara konsisten checkpoint bersama dengan aliran data.
Streaming Windows: Jendela aliran dan agregasi jendela adalah blok bangunan penting untuk menganalisis aliran data. Flink hadir dengan sistem jendela yang cukup kuat yang mendukung banyak jenis jendela.
sumber
Penafian: Saya adalah karyawan Cloudera, pendukung utama Storm dan (segera) Flink.
Fungsional
Banyak poin teknis bagus telah disajikan. Ringkasan sorotan yang sangat singkat:
Non-Fungsional
Kesimpulan
Cloudera baru-baru ini mengumumkan penghentian Storm (dalam HDP). Dan secara bersamaan Flink diumumkan sebagai penggantinya.
Jadi, jika Anda memiliki kasus penggunaan di badai, mereka tentu saja akan terus bekerja. Tetapi untuk kasus penggunaan baru, saya akan melihat Flink atau mesin streaming lainnya.
sumber
Berdasarkan pengalaman saya tentang Storm dan Flink. Saya merasa alat ini dapat menyelesaikan masalah yang sama dengan pendekatan yang berbeda. Setiap fitur Flink yang disebutkan oleh @Stephan Ewen dapat dicocokkan oleh Storm dengan API internal (mis., Spolts dan baut ) dan API Trident sekarang. Seseorang mengklaim bahwa Trident adalah gaya batch mini sementara saya pikir sebagian besar aplikasi kompleks dengan terkait negara atau agregasi hanya dapat bergantung pada pemrosesan batch dengan gaya jendela. Jadi saya hanya membuat daftar beberapa perbedaan utama di sini tanpa mengatakan mana yang lebih baik.
addSpolt()/addBolt()
) di Storm.sumber