Pulsar (TR)
03/02/2023
Apache Pulsar, cloud native, dağıtık, open-source bir pub-sub messaging ve streaming platformudur.
Yahoo! tarafından geliştirilmiş ve 2016'da Apache Software Foundation'a (ASF) katılmıştır. Pulsar, RabbitMQ gibi geleneksel bir mesajlaşma sisteminin en iyi özelliklerini, Apache Kafka gibi bir pub-sub sisteminin özellikleriyle birleştirir.
Açık kaynaklı pub-sub mesajlaşma sistemi
Pub-sub, publish-subscribe’ın kısaltmasıdır. pub-sub ile, mesaj gönderenler veya publisherlar, belirli alıcılara veya subscriberlara mesaj (veya etkinlik) göndermezler. Bunun yerine, mesaj consumerları ilgilendikleri konulara abone olurlar. O konuyla ilgili bir mesaj her yayınlandığında, tüm subscriberlar hemen alır.
Publisherlar, subscriberların kim olduğunu veya hangi konulara abone olduklarını bilmez ve aboneler, publisher’ın bilgisi olmadan ilgili mesajları alırlar. Bağımsız olarak iletişim kurarlar. Pub-sub'un asenkron doğası, loose coupling ve ölçeklenebilirlik sağlayarak onu dağıtık uygulamalar ile serverless ve mikroservis mimarileri için mükemmel bir seçenek haline getirir.
Pulsar, Apache Kafka da dahil olmak üzere diğer mesajlaşma sistemleriyle nasıl karşılaştırılır?
Diğer birçok event streaming platformunun aksine Apache Pulsar, cloud nativedir, ölçeklemesi çok daha kolaydır ve multi-data center ve aktif/aktif yapılandırma desteğine sahiptir.
Pulsar'ın Kafka'ya göre birçok avantajı vardır:
cost
performance
ease of deployment
geo-replication
scaling
architecture (Pulsar has tiered storage, decoupled compute and storage, and multitenancy)
queuing
support for messaging semantics of MQ-based solutions
Pazar araştırma şirketi GigaOm tarafından yapılan analiz, Pulsar'ın fiyat ve performans açısından kazandığını ortaya çıkardı. Rapordan Pulsar'ın sahip olduğu avantajları gösteren bulgulardan bazıları:
Kafka'ya kıyasla %81 daha düşük maliyet ( 3 yıllık )
%35 daha yüksek performans
Yüksek karmaşıklıktaki senaryolar için %73 tasarruf
Daha yüksek veri hacimleri için %81 tasarruf
Apache Pulsar Structural Basics
Apache Pulsar'ın yapı taşlarına bir göz atalım.
Cloud-native architecture
Apache Pulsar, compute’u(broker) depolamadan (BookKeeper) ayıran çok katmanlı bir yaklaşım kullandığından, bu iki endişeyi de birbirinden ayıran bulut altyapılarına çok iyi uyum sağlar. Brokerlar esasen statelesstır ve BookKeeper, cloud-native orkestrasyon için fiili standart olan Kubernetes gibi konteyner orkestrasyon ortamlarında bir StatefulSet olarak kolayca yönetilebilir.
Aslında Apache Pulsar, Kubernetes'te doğal olarak çalışır ve rolling updates, rollbacks ve yatay ölçeklendirmeyi destekler.
Client libraries
Pulsar, core proje tarafından yönetilen çok çeşitli client librarylerine sahiptir: Java, Python, C++, Golang, Node.js ve C#. Pulsar client librarylerini kullanmak istemiyorsanız, Pulsar bunun için bir WebSockets proxy'si içerir.
Community tarafından geliştirilmekte olan Scala ve Rust gibi birçok başka client vardır. Pulsar mesajlarını göndermek ve almak için HTTP kullanmayı tercih ederseniz, Pulsar Beam'i kullanabilirsiniz.
Multi-tenancy and namespaces
Yüksek performanslı, ölçeklenebilir bir mesajlaşma sistemine sahip olduğunuzda, bunu kuruluşunuzdaki farklı ekipler ve gruplar arasında paylaşmak isteyeceksiniz. Farklı ekiplerin birbirini etkilemediğinden emin olmak için yüksek performanslı sistemi kopyalamak veya multi-tenancy’i simüle etmek için karmaşık bir yer paylaşımlı sistem oluşturmak mantıklı değil.
Pulsar en başından multi-tenant bir sistem olarak tasarlandı. Bu nedenle, farklı ekipler mesajlaşma sistemini güvenle paylaşabilir. Her tenant’ın kendi kimlik doğrulaması, yetkilendirmesi ve policy’leri vardır. Ayrıca tenantlar, tek bir tenant içinde development, staging ve production gibi farklı ortamları desteklemeyi kolaylaştıran namespacelere ayrılabilir.
Features of Apache Pulsar
Apache Pulsar hızla büyüyen bir özellik setine sahiptir. Bazı temel özelliklerini gözden geçirelim.
Built-in schema registry
Herhangi bir mesajlaşma sisteminin en büyük zorluklarından biri, producerların ve consumerların aynı dilde iletişim kurmasını sağlamaktır. Producerlar ve consumerlar birbirinden ayrıldığından, gönderdikleri veya almayı bekledikleri mesajların biçimini değiştirmek biri veya her ikisi için kolaydır.
Bunun çözümü, producerların ve consumerların mesajları uyumlu bir schema ile kullanmasını gerektiren bir schema-registry’dir. Pulsar out-of-the-box bir schema-registery içerir. Sadece schemayı bir Pulsar topic’ine kaydetmeniz yeterlidir ve bu schema kurallarının uygulanmasını sağlar.
Built-in geo-replication
Mesajları remote konumlara çoğaltmak, disaster recovery’i sağlamak veya uygulamaların global ölçekte çalışmasını sağlamak için önemlidir. Uygulamanızın kullanıcıları seyahat ettiklerinde, nerede olurlarsa olsunlar aynı deneyimi yaşamalarını istersiniz. Geo-replication ile uygulamalar local cluster’a bağlanabilir ve yine de dünya çapındaki clusterlara veri gönderip alabilir.
Pulsar ile, mesajların coğrafi olarak kopyalanması built-in sağlanan bir özelliktir. Replicated bir namespace’teki bir topic’e bir mesaj yayınlarsanız, bu mesaj otomatik olarak yapılandırılmış remote coğrafi konuma veya konumlara kopyalanır. Karmaşık yapılandırmalara veya eklentilere gerek yoktur.
IO connectors
Bir mesajlaşma sisteminin ana işlevlerinden biri, veritabanları, stream-processing engine’leri ve diğer mesajlaşma sistemleri gibi data-intensive sistemleri birbirine bağlamaktır. Bunu kolaylaştırmak için ortak bir framework ve connectorler sağlamak mantıklıdır. Pulsar'ın IO connectorleri ile yaptığı da tam olarak budur.
Pulsar, MySQL, MongoDb, Cassandra, RabbitMQ, Kafka, Flume, Redis ve çok daha fazlası dahil olmak üzere çok çeşitli hazır connector ile birlikte gelir ve sistemlerinizi birbirine bağlamayı kolaylaştırır.
Apache Pulsar'ın Faydaları
Apache Pulsar'ın bazı avantajları.
Infinite retention
Pulsar'ın çok katmanlı mimarisinin önemli bir avantajı, yeni katmanların eklenebilmesidir. Yüksek performans için, herhangi bir kalıcı mesajlaşma sisteminin yüksek performanslı diskler kullanması gerekir, çünkü mesajların nihai olarak diske yazılması ve diskten alınması gerekebilir (eğer hemen tüketilmezlerse). Ancak, tekrar oynatmak istemeniz veya event-sourcing yapıyor olmanız ihtimaline karşı eski iletileri saklamanız gerekirse ne olur? Ya bu mesajları sonsuza kadar saklamak isterseniz? Bu eski mesajları yüksek performanslı disklerde depolamak pahalı olabilir.
Bu sorunu çözmek için Pulsar, katmanlı depolamayı destekleyerek eski mesajların S3 bucketları gibi daha ucuz depolama seçeneklerine boşaltılmasına izin verir. Bir consumer daha eski bir mesaja ihtiyaç duyduğunda, Pulsar onu otomatik olarak S3 bucket’ından alır ve consumer’a iletir.
Evet, performans daha düşük olacaktır. Ancak aylarca, hatta yıllarca eski mesajlarla uğraşırken performans önemli değil. Sadece bu mesajların yığını bozmadan ihtiyaç duyduğunuzda hazır olmasını istiyorsunuz.
Bunu yaparken Apache BookKeeper’dan faydalanır.
Flexible subscriptions
Apache Pulsar dört farklı subscription türünü destekler: exclusive, failover, shared, ve key shared. Ayrıca, tek bir topicte birden çok subscriptionu da destekler. Subscriptionları kullanarak, queuing, pub-sub, fan-out ve competing consumers gibi mesajlaşma patternlerini kolayca yapılandırabilirsiniz.
Apache Pulsar, shared subscriptionları kullanarak competing-consumers patternini uygular. Shared bir subscriptionda consumer sayısını sorunsuz bir şekilde yukarı ve aşağı ölçeklendirebilirsiniz. Partitionlar olaya dahil olmaz. Consumer eklemeniz onun hemen mesajları almaya başlamasını sağlar.
Low latency, high throughput
En başından beri Pulsar, yüksek throughputta düşük ve tutarlı latency sağlamak üzere tasarlandı. Bunu, message delivery endişelerini producerlar ve consumerlar arasında ayırarak ve mesajları kalıcılık için saklayarak yapar. Pulsar, mesajların brokerlar tarafından sunulduğu ve Apache BookKeeper tarafından saklandığı çok katmanlı bir mimari kullanır. Pulsar, kendi depolama katmanını oluşturmak yerine BookKeeper'ın performansından ve dayanıklılığından yararlanır.
BookKeeper, yazma ve okuma arasında IO izolasyonu ile mesajları kalıcı bir şekilde depolamak için tasarlanmış dağıtılmış bir günlüktür. Bu, büyük miktarda veri yazılırken veya okunurken bile tutarlı, düşük gecikme sağlayabileceği anlamına gelir. Geleneksel depolama sistemlerinden farklı olarak, yüksek yazma yükü veya yüksek okuma (consumer catch up) yükü altında performans düşmez. BookKeeper dağıtık bir sistemdir ve storage assigmentlarını rebalance etmeye gerek kalmadan yatay olarak sorunsuz bir şekilde ölçeklenebilir.
Apache Pulsar Use Cases
Apache Pulsarın kullanım senaryolarına göz atalım.
Pub-sub, streaming and queueing
Apache Pulsar, yüksek hacimli pub-sub messaging yanı sıra bir mesaj kuyruğu sisteminde tipik olan daha karmaşık mesajlaşma modellerini işleme konusunda ustadır. Ve bu karmaşık mesajlaşma kalıpları Pulsar tarafından işlenir - basit bir istemci üzerine inşa edilmiş karmaşık bir uygulama kullanarak kodlama yapmak yazılım geliştiricisine bırakılmaz.
Retention and message replay
Geleneksel bir mesajlaşma sisteminde, sistem belirli bir mesajın tüketilip tüketilmediğini takip eder. Consumer client mesajla işini bitirdiğinde, messaging sistemine artık mesaja ihtiyaç olmadığını bildirir. Geleneksel bir mesajlaşma sistemi daha sonra mesajı kalıcı depolama alanından siler. Sonuçta, mesaja artık gerek yoktur.
Sorunsuz bir dünyada bu doğru olabilir. Ancak gerçek dünyada işler ters gider, uygulamalar çöker, availibilty zonelar kapanır ve kaybolan mesajları geri alabilmek, uygulama durumunuzu yeniden eski haline getirmek için kritik olabilir. Bu nedenle mesajın saklanması önemlidir. Bir şeyler ters giderse, Pulsar bir topicte yayınlanmış mesajları, zaten tüketilmiş olsalar bile yeniden oynatabilir. Ne de olsa, o mesaja bir daha ne zaman ihtiyaç duyacağınızı asla bilemezsiniz.
Mesajları tutma yeteneği, her durum değişikliğini meydana gelme sırasına göre bir event olarak kaydetmenin önemli olduğu event sourcing gibi event driven uygulama mimarilerini de etkinleştirir.
Dead letter topic, negative acknowledgment, delayed delivery
Apache Pulsar, güçlü ve esnek uygulamalar oluşturmayı kolaylaştıran çeşitli gelişmiş mesajlaşma özelliklerini destekler. Negative acknowledgment ile consumer client, daha sonra işlemek için bir topic’e mesaj ekleyebilir veya başka bir consumer’ın onu işlemeye çalışmasına izin verebilir. Bir consumer bir mesajı işleyemiyorsa, engellenmek yerine mesajı dead-letter topic’e gönderebilir ve engeli kaldırabilir ve sorunlu mesajı daha sonra analiz etmek üzere kaydedebilir.
Gecikmeden sonra mesaj göndermek isterseniz, Pulsar bunu delayed delivery özelliğini kullanarak yapabilir. Bir mesaj yayınladığınızda, mesajların tüketilmesi için yapılandırılabilir bir bekleme süresi belirleyebilirsiniz.
Integrated streaming functions
Gerçek zamanlı olarak topladığımız verilerden analitikler elde etmek istiyoruz. Tüm verileri işlemek için bir gecelik batch job çalıştırıp beklemenin ve ertesi gün analitik elde etmenin yeterince iyi kabul edildiği günler geride kaldı. Bugün, gerçek zamanlı olarak tepki verebilmek için analitikleirmizi gerçek zamanlı olarak istiyoruz.
Gerçek zamanlı analitikler elde etmek için verilerin gerçek zamanlı olarak işlenmesi gerekir. Pulsar ile, verilerin gerçek zamanlı olarak temizlenmesini, zenginleştirilmesini ve analiz edilmesini gerçekleştirerek lightweight fonksiyonları mesaj akışına sorunsuz bir şekilde entegre edebilirsiniz. Her şeyi bir data lake’e atıp daha sonra işlemeye gerek yok. Pulsar Functions ile, verileri mesajlaşma sisteminden akarken işleyebilirsiniz. Pulsar Functions Java, Python veya Go'da yazılabilir ve Kubernetes podları olarak çalışacak şekilde yapılandırılabilir.
Best practices for pub messaging with Apache Pulsar
Apache Pulsar'dan en iyi şekilde yararlanmak için bu best-practiceleri izlemenizi öneririz
Pulsar'da çok fazla veri saklıyorsanız, bu veriler üzerinde sorgulamalar yapmak ve bunu Pulsar’ın mesaj gönderip almak olan ana işini yaparken yapmak çok yararlı olabilir. Pulsar, SQL sorgulama motoru Presto'dan yararlanarak bunu mümkün kılar. Pulsar, Presto ile entegre olur, böylece topiclerde saklanan veriler üzerinde SQL sorguları gerçekleştirebilirsiniz. Katmanlı depolamaya boşaltılmışsa bile verileri sorgulayabilirsiniz. Ve sorgular broker’ı bypass ederler, böylece Pulsar cluster’ının gerçek zamanlı mesaj gönderip alma yeteneğini etkilemezler.
Apache Pulsar hem partitioned hem de non-partitioned topicleri destekler. Daha düşük performanslı kullanım durumlarında, işleri basitleştirmek için non-partitioned bir topic kullanabilirsiniz. Ancak, tek bir topicte yüksek hacimli verileri işlemeniz gereken yüksek performanslı bir kullanım durumunuz varsa, işlemede paralellikten yararlanmak için partitioned bir topic kullanabilirsiniz. Performans gereksinimleri arttıkça partitionları sorunsuz bir şekilde ekleyebilirsiniz.
Kafka gibi, mesajınızı keyler ile yayınlarsanız, Pulsar da mesaj sırasını garanti edebilir. Pulsar, aynı anahtara sahip mesajları aynı partitiona atayarak, o key’e gönderilen mesajların sırasını garanti eder.
Kalıcı mesajlar diskte saklanmak üzere Apache BookKeeper'a gönderilir. Bu mesajların, network’ün, uygulamanın ve hatta Pulsar'ın arızasından bağımsız olarak en az bir kez(at-least-once) teslim edilmesi garanti edilir.
Ancak, bu düzeyde garantili teslimatın gerekli olmadığı ve en fazla bir kez(at-most-once) teslimatın yeterli olduğu bazı durumlar vardır. Bu durumlarda, Apache Pulsar kalıcı olmayan mesajları destekler. Kalıcı olmayan mesajlar diskte depolanmaz, bu da kaynak gereksinimlerini azaltırken yüksek verim ve düşük gecikme sağlar.
Bazen, bir veri parçasının yalnızca en son instance’ı ilgi çekicidir. Tüm historical değerler umurunuzda değil, yalnızca en son değer. Durum buysa, bir konudaki belirli bir key’deki yalnızca en son değeri depolamak için bir compacted topic kullanabilirsiniz.
Tüm veriler compacted(sıkıştırılmış) bir topic’e yayınlanır. Ancak Pulsar, bir key’in eski değerlerini periyodik olarak siler ve yalnızca en yenisini bırakır. Compacted topicler, topic’in sonsuza kadar büyümesini engeller ve bir topicteki en son değerlere hızlı erişim sağlar.
Last updated
Was this helpful?