Feragatname : Ben bir Apache Flink komutanı ve PMC üyesiyim ve sadece Storm'un üst düzey tasarımına aşinayım.
Apache Flink, birleşik akış ve toplu işlem için bir çerçevedir. Flink'in çalışma zamanı, ardışık düzen karışıklıkları içeren paralel görevler arasında ardışık veri aktarımları nedeniyle her iki etki alanını da yerel olarak destekler. Kayıtlar, görev üretmekten görev almaya (ağ aktarımı için bir arabellekte toplandıktan sonra) hemen gönderilir. Toplu işler isteğe bağlı olarak veri aktarımlarını engelleme kullanılarak yürütülebilir.
Apache Spark, toplu iş ve akış işlemeyi de destekleyen bir çerçevedir. Flink'in toplu API'si oldukça benzer görünüyor ve Spark ile benzer kullanım durumlarını ele alıyor, ancak dahili olarak farklı. Akış için, her iki sistem de onları farklı uygulamalar için uygun kılan çok farklı yaklaşımları (mini gruplar arası akış) izler. Spark ve Flink'i karşılaştırmanın geçerli ve kullanışlı olduğunu söyleyebilirim, ancak Spark, Flink'e en benzer akış işleme motoru değil.
Orijinal soruya gelen Apache Storm, toplu iş yetenekleri olmayan bir veri akışı işlemcisidir. Aslında, Flink'in boru hattı motoru dahili olarak Storm'a biraz benziyor, yani Flink'in paralel görevlerinin arayüzleri Storm'un cıvatalarına benziyor. Storm ve Flink ortak olarak boru hatlı veri aktarımlarıyla düşük gecikmeli akış işlemeyi hedefliyorlar. Ancak Flink, Storm'a kıyasla daha yüksek seviyeli bir API sunuyor. Bir veya daha fazla okuyucu ve toplayıcı içeren bir cıvatanın işlevselliğini uygulamak yerine, Flink'in DataStream API'sı Harita, GroupBy, Pencere ve Birleştirme gibi işlevler sağlar. Bu işlevselliğin birçoğu Storm kullanılırken manuel olarak uygulanmalıdır. Diğer bir fark işleme semantiği. Fırtına en az bir kez işlemeyi garanti ederken, Flink tam bir kez sağlar. Bu işleme garantilerini veren uygulamalar biraz farklıdır. Storm rekor düzeyde alındı bildirimlerini kullanırken, Flink Chandy-Lamport algoritmasının bir varyantını kullanır. Özetle, veri kaynakları düzenli olarak veri akışına işaretleyiciler enjekte eder. Bir operatör böyle bir işaretleyici aldığında, dahili durumunu kontrol eder. Tüm veri havuzları tarafından bir işaretleyici alındığında, işaretçi (ve daha önce işlenmiş olan tüm kayıtlar) işlenir. Bir arıza durumunda, tüm kaynak operatörleri son taahhüt edilen işaretçiyi gördüklerinde durumlarına sıfırlanır ve işleme devam edilir. Bu işaretçi kontrol noktası yaklaşımı, Storm'un rekor seviye onaylarından daha hafiftir. Bu veri kaynakları düzenli olarak veri akışına işaretleyiciler enjekte eder. Bir operatör böyle bir işaretleyici aldığında, dahili durumunu kontrol eder. Tüm veri havuzları tarafından bir işaretleyici alındığında, işaretçi (ve daha önce işlenmiş olan tüm kayıtlar) işlenir. Bir arıza durumunda, tüm kaynak operatörleri son taahhüt edilen işaretçiyi gördüklerinde durumlarına sıfırlanır ve işleme devam edilir. Bu işaretçi kontrol noktası yaklaşımı, Storm'un rekor seviye onaylarından daha hafiftir. Bu veri kaynakları düzenli olarak veri akışına işaretleyiciler enjekte eder. Bir operatör böyle bir işaretleyici aldığında, dahili durumunu kontrol eder. Tüm veri havuzları tarafından bir işaretleyici alındığında, işaretçi (ve daha önce işlenmiş olan tüm kayıtlar) işlenir. Bir arıza durumunda, tüm kaynak operatörleri son taahhüt edilen işaretçiyi gördüklerinde durumlarına sıfırlanır ve işleme devam edilir. Bu işaretçi kontrol noktası yaklaşımı, Storm'un rekor seviye onaylarından daha hafiftir. Bu son kaynak işaretçisini gördüklerinde ve işlemeye devam edildiğinde tüm kaynak operatörleri durumlarına sıfırlanır. Bu işaretçi kontrol noktası yaklaşımı, Storm'un rekor seviye onaylarından daha hafiftir. Bu son kaynak işaretçisini gördüklerinde ve işlemeye devam edildiğinde tüm kaynak operatörleri durumlarına sıfırlanır. Bu işaretçi kontrol noktası yaklaşımı, Storm'un rekor seviye onaylarından daha hafiftir. Buslayt seti ve ilgili konuşma Flink'in hata toleransı, kontrol noktası ve durum işleme dahil akış işleme yaklaşımını tartışır.
Storm aynı zamanda Trident adında bir kez daha yüksek seviyeli bir API sunar. Ancak, Trident mini partilere dayanıyor ve bu nedenle Spark'a Flink'ten daha benziyor.
Flink'in ayarlanabilir gecikmesi, Flink'in kayıtları bir görevden diğerine gönderme yolunu ifade eder. Daha önce de söylemiştim, Flink hazır veri aktarımlarını kullanıyor ve üretilir üretilmez kayıtları iletiyor. Verimlilik için, bu kayıtlar, dolduğunda veya belirli bir zaman eşiği karşılandığında ağ üzerinden gönderilen bir tamponda toplanır. Bu eşik, kayıtların gecikmesini kontrol eder, çünkü bir kaydın bir sonraki göreve gönderilmeden arabellekte kalacağı maksimum süreyi belirtir. Ancak, bir kaydın bir programdan ayrılmasına kadar geçen süre hakkında kesin garantiler vermek için kullanılamaz, çünkü bu aynı zamanda görevler içindeki işlem süresine ve diğer şeylerin yanı sıra ağ aktarımlarının sayısına da bağlıdır.