Apache Pulsar — Apache Kafka vs Apache Pulsar

Umut Bayram
4 min readNov 19, 2021

--

Apache Pulsar, Yahoo tarafından geliştirilen ve desteklenen, dağıtılmış mesajlaşma sistemi ve streaming sağlayan bir platformdur, Apache Software Foundation projeleri içerisinde yer alır.

Apache Pulsar

Linkedln tarafından tasarlanan Apache Kafka projesinin bir alternatifi sayılabilir. Kullanım amaçları benzer ama farklı teknoloji ve teknoloji altyapısı kullanan platformlardır. Apache Kafka streaming data processor , Apache Pulsar ise dağıtılmış mesajlaşma sistemi ve streaming oluşturur. Özünde ikisi benzer şeyleri farklı şekilde yapar.

Pulsar ve Kafka uzun süredir yarışma halinde olan iki platformdur. Her ikisi de dünya çapında firmalar tarafından, çok büyük miktarda veriler üzerinde çalışan sistemlerde kullanılır ve tercih edilir.

Kafka, Pulsar’dan daha çok ve daha uzun süredir kullanılan platformdur. İki platformda açık kaynaklıdır. Pulsar, Kafka’ya göre daha yeni bir sistem olduğu için teknik olarak bazı noktalarda üstünlükleri bulunmaktadır. Örneğin Pulsar, veri akışını düzene sokan, çok daha hızlı ve verimli hale getiren yerleşik bir çoklu veri merkezi çoğaltma sistemine sahiptir.

Apache Pulsar, büyük miktardaki veriyi Kafka’dan çok daha hızlı bir şekilde işlemek için idealdir. Bunun asıl nedeni Kafka’nın tek sistemli bir çözüm olarak oluşturulması ve tek katmanda çalışmasıdır. Pulsar ise tüm sürecin çok katmanlı bir sistemde akmasına izin verir.

Apache Pulsar’ı Apache Kafka’dan üstün kılan üç önemli özellik; çok kiracılı, coğrafi eşleme ve katmanlı depolamadır.

Pulsar horizontal scale edilebilen yapıya sahiptir. Birden çok coğrafi bölgedeki veri merkezleri arasında yapılandırılabilir, çoğaltma sağlanabilir.

Şuanda resmi sitesinde client olarak alttaki library ve örnekleri bulunmaktadır, ve programlama dillerinde geliştirmeyi desteklemektedir.

Java client
Go client
Python client
C++ client
Node.js client
WebSocket client
C# client

İndirme Linki : https://pulsar.apache.org/docs/en/client-libraries/

Pulsar gecikme süresi ve dayanıklılık yanında veri erişimini garanti etmektedir. Özellikle <5ms altında scale edilebilen dağıtım vaat etmektedir. Event Driven Architecture kullanılarak tasarlanmış bir mimaride bu sürenin ve dayanıklılığın ne kadar önemli olduğunu göz önünde bulundurursak önemli bir seçim ve kullanım kriteri olarak görebiliriz.

Yahoo tarafından şuan bu yazı tarihi itibari ile 5 seneyi aşkın süredir aktif kullanılmaktadır.

Multitenancy desteklemektedir. Bu yapıyı inşa edecek şekilde tasarlanmıştır. Isolation, kimlik doğrulama, yetkilendirme ve kotaları destekler. Kafka multitenancy desteklememektedir.

Yönetim, araçlar ve izleme için REST Admin API si mevcuttur. Şuan için Bare metal, Kubernetes, Amazon Web Services(AWS) ve DataCenter Operating System(DC/OS) üzerinde devreye alınabilir ve destek sağlamaktadır.

Apache BookKeeper’a dayalı kalıcı mesaj depolama kullanmaktadır. Yazma ve okuma işlemleri arasında IO düzeyinde izolasyon sağlamaktadır.

Arayüz üzerinden takip edilmek istenirse Pulsar Manager kurulabilir. Kuruluma ve kullanıma bu linkten ulaşabilirsiniz.

Pulsar Manager

Apache Pulsar Kurulumu

Docker üzerinde direk çalıştırabiliriz.

docker run -it -p 6650:6650 -p 8080:8080 — mount source=pulsardata,target=/pulsar/data — mount source=pulsarconf,target=/pulsar/conf apachepulsar/pulsar:2.8.1 bin/pulsar standalone

Bu komut ile çalıştırdığımızda pulsar servisi 6650, Pulsar Admin API 8080 portu üzerinde çalışacaktır.

Pulsar Manager Kurulumu

Pulsar Manager, Apache Pulsar üzerinde işlem ve izleme yapabileceğimiz bir arayüz sunar. Docker üzerinde çalıştırılabilir.

docker pull apachepulsar/pulsar-manager:v0.2.0
docker run -it -p 9527:9527 -p 7750:7750 -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties apachepulsar/pulsar-manager:v0.2.0

http://localhost:9527 adresinden uygulama arayüzüne erişebilirsiniz.

Pulsar Manager Login Page

http://localhost:7750 adresinden Postman kullanarak kullanıcı ekleyebilirsiniz.

CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)

http://localhost:7750/pulsar-manager/csrf-token get request yapılarak csrf token alınmalıdır.

csrf-token get request
 curl \ -H ‘X-XSRF-TOKEN: $CSRF_TOKEN’ \ -H ‘Cookie: XSRF-TOKEN=$CSRF_TOKEN;’ \ -H “Content-Type: application/json” \ -X PUT http://localhost:7750/pulsar-manager/users/superuser \ -d ‘{“name”: “admin”, “password”: “apachepulsar”, “description”: “test”, “email”: “username@test.org”}’

http://localhost:7750/pulsar-manager/users/superuser put request ile yeni kullanıcı bilgileri gönderilir.

superuser put request
superuser put request

Apache Pulsar Java Client Sample

Apache Pulsar için Java üzerinde Pulsar Client kütüphanesi kullanarak producer ve consumer servisleri bulunan bir örnek proje github adresinde bulunmaktadır.

PulsarClient pulsarClient = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();

PulsarClient sınıfı ile connection sağlanır.

Producer<String> stringProducer = pulsarClient.newProducer(Schema.STRING)
.topic("my-topic")
.create();

Thread producerThread = new Thread(new Runnable() {
@Override
public void run() {
int index = 0;
while (true) {
try {
String msg = "Message " + index;
stringProducer.send(msg);
System.out.println("Message sent : " + msg);
index++;
Thread.sleep(1000);
} catch (PulsarClientException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
producerThread.start();

Thread içerisinde 1 saniyede mesaj gönderen producer komutları üstteki gibidir. Pulsar içerinde şemalar oluşturabiliyoruz. Bu producer sadece String bir değer göndermektedir.

MessageListener messageListener = (consumer, msg) -> {
try {
System.out.println("Message received: " + new String(msg.getData()));
consumer.acknowledge(msg);
} catch (Exception e) {
consumer.negativeAcknowledge(msg);
}
};

Consumer consumer = pulsarClient.newConsumer()
.topic("my-topic")
.subscriptionName("my-subscription")
.messageListener(messageListener)
.subscribe();

MessageListener ile consumer servisi oluşturulmuştur. “my-topic” üzerine gelen mesajlara subscribe olarak dinlenmektedir.

Uygulama çıktısı :

Message sent : Message 0
Message received: Message 0
Message sent : Message 1
Message received: Message 1
Message sent : Message 2
Message received: Message 2
Message sent : Message 3
Message received: Message 3
Message sent : Message 4
Message received: Message 4
Message sent : Message 5
Message received: Message 5
Message sent : Message 6
Message received: Message 6
Message sent : Message 7
...

Github Link : https://github.com/u-bayram/apache-pulsar-sample

--

--