Pengantar Apache Pulsar

1. Perkenalan

Apache Pulsar adalah sistem perpesanan berbasis Publikasi / Langganan open source yang dikembangkan di Yahoo .

Itu dibuat untuk memberdayakan aplikasi penting Yahoo seperti Yahoo Mail, Yahoo Finance, Yahoo Sports, dll. Kemudian, pada 2016, open source di bawah Apache Software Foundation.

2. Arsitektur

Pulsar adalah solusi multi-tenant berkinerja tinggi untuk olahpesan server-ke-server . Ini terdiri dari satu set broker dan bandar judi bersama dengan Apache ZooKeeper bawaan untuk konfigurasi dan manajemen. Para bandar judi berasal dari Apache BookKeeper yang menyediakan penyimpanan untuk pesan sampai pesan tersebut dikonsumsi.

Dalam sebuah cluster kita akan memiliki:

  • Beberapa broker cluster menangani pesan masuk dari produsen dan mengirimkan pesan ke konsumen
  • Apache BookKeeper untuk mendukung persistensi pesan
  • Apache ZooKeeper untuk menyimpan konfigurasi cluster

Untuk lebih memahami ini, mari kita lihat diagram arsitektur dari dokumentasi:

3. Fitur Utama

Mari kita mulai dengan melihat sekilas beberapa fitur utama:

  • Dukungan bawaan untuk beberapa cluster
  • Dukungan untuk Geo-replikasi pesan di beberapa cluster
  • Berbagai mode langganan
  • Dapat diskalakan untuk jutaan topik
  • Menggunakan Apache BookKeeper untuk menjamin pengiriman pesan.
  • Latensi rendah

Sekarang, mari kita bahas beberapa fitur utama secara mendetail.

3.1. Model Perpesanan

Kerangka kerja menyediakan model pengiriman pesan yang fleksibel. Secara umum arsitektur perpesanan memiliki dua model perpesanan yaitu antrian dan penerbit / pelanggan. Penerbit / Pelanggan adalah sistem pesan siaran di mana pesan dikirim ke semua konsumen. Di sisi lain, antrian adalah komunikasi point to point.

Pulsar menggabungkan kedua konsep tersebut dalam satu API umum . Penerbit menerbitkan pesan untuk topik yang berbeda. Kemudian pesan ini disiarkan ke semua langganan.

Konsumen berlangganan untuk mendapatkan pesan. Pustaka memungkinkan konsumen untuk memilih berbagai cara untuk menggunakan pesan dalam langganan yang sama yang mencakup eksklusif, dibagikan, dan failover. Kami akan membahas jenis langganan ini secara rinci di bagian selanjutnya.

3.2. Mode Penerapan

Pulsar memiliki dukungan bawaan untuk penyebaran di lingkungan yang berbeda . Ini berarti kami dapat menggunakannya pada mesin di lokasi standar, atau menerapkannya di klaster Kubernetes, Google atau AWS Cloud.

Itu dapat dieksekusi sebagai node tunggal untuk tujuan pengembangan dan pengujian. Dalam hal ini, semua komponen (broker, BookKeeper, dan ZooKeeper) berjalan dalam satu proses.

3.3. Replikasi Geo

Pustaka menyediakan dukungan siap pakai untuk replikasi geografis data. Kami dapat mengaktifkan replikasi pesan antara beberapa cluster dengan mengonfigurasi wilayah geografis yang berbeda.

Data pesan direplikasi hampir secara real time. Jika terjadi kegagalan jaringan di seluruh cluster, data selalu aman dan disimpan di BookKeeper. Sistem replikasi terus mencoba lagi hingga replikasi berhasil.

Fitur geo-replikasi juga memungkinkan organisasi untuk menyebarkan Pulsar di berbagai penyedia cloud dan mereplikasi data . Ini membantu mereka menghindari penggunaan API penyedia cloud berpemilik.

3.4. Keabadian

Setelah Pulsar membaca dan mengakui data, itu menjamin tidak ada kehilangan data . Daya tahan data terkait dengan jumlah disk yang dikonfigurasi untuk menyimpan data.

Pulsar memastikan ketahanan dengan menggunakan bandar judi (contoh Apache BookKeeper) yang berjalan di node penyimpanan. Setiap kali bandar menerima pesan, ia akan menyimpan salinannya di memori dan juga menulis data ke WAL (Write Ahead Log). Log ini bekerja dengan cara yang sama seperti database WAL. Bandar judi beroperasi berdasarkan prinsip transaksi database dan memastikan bahwa data tidak hilang bahkan jika mesin mati.

Selain di atas, Pulsar juga dapat menahan beberapa kegagalan node. Perpustakaan mereplikasi data ke beberapa bandar judi, lalu mengirimkan pesan pengakuan ke produser. Mekanisme ini menjamin bahwa tidak ada kehilangan data bahkan jika terjadi beberapa kegagalan perangkat keras.

4. Setup Node Tunggal

Sekarang mari kita lihat cara mengatur cluster node tunggal Apache Pulsar.

Apache juga menyediakan API klien sederhana dengan binding untuk Java, Python, dan C ++ . Kami nanti akan membuat contoh produsen dan langganan Java sederhana.

4.1. Instalasi

Apache Pulsar tersedia sebagai distribusi biner. Mari kita mulai dengan mendownloadnya:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-2.1.1-incubating-bin.tar.gz

Saat unduhan selesai, kami dapat membatalkan pengarsipan file zip. Distribusi yang tidak diarsipkan akan berisi folder bin, conf, contoh, lisensi dan lib .

After that, we need to download the inbuilt connectors. These now ship as a separate package:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-io-connectors-2.1.1-incubating-bin.tar.gz

Let's unarchive the connectors and copy the Connectors folder in the Pulsar folder.

4.2. Starting an Instance

To start a standalone instance we can execute:

bin/pulsar standalone

5. Java Client

Now we'll create a Java project to produce and consume messages. We'll also create examples for different subscription types.

5.1. Setting up the Project

We'll start by adding the pulsar-client dependency to our project:

 org.apache.pulsar pulsar-client 2.1.1-incubating 

5.2. Producer

Let's continue by creating a Producer example. Here, we'll create a topic and a producer.

First, we need to create a PulsarClient which will connect to a Pulsar service on a specific host and port, using its own protocol. Many producers and consumers can share a single client object.

Now, we'll create a Producer with the specific topic name:

private static final String SERVICE_URL = "pulsar://localhost:6650"; private static final String TOPIC_NAME = "test-topic"; 
PulsarClient client = PulsarClient.builder() .serviceUrl(SERVICE_URL) .build(); Producer producer = client.newProducer() .topic(TOPIC_NAME) .compressionType(CompressionType.LZ4) .create();

The producer will send 5 messages:

IntStream.range(1, 5).forEach(i -> { String content = String.format("hi-pulsar-%d", i); Message msg = MessageBuilder.create() .setContent(content.getBytes()) .build(); MessageId msgId = producer.send(msg); });

5.3. Consumer

Next, we'll create the consumer to get the messages created by the producer. The consumer also requires the same PulsarClient to connect with our server:

Consumer consumer = client.newConsumer() .topic(TOPIC_NAME) .subscriptionType(SubscriptionType.Shared) .subscriptionName(SUBSCRIPTION_NAME) .subscribe(); 

Here we've created the client with a Shared subscription type. This allows multiple consumers to attach to the same subscription and get messages.

5.4. Subscription Types for Consumer

Dalam contoh konsumen di atas, kami telah membuat langganan dengan tipe bersama . Kami juga dapat membuat langganan eksklusif dan failover .

The eksklusif langganan memungkinkan hanya satu konsumen untuk berlangganan.

Di sisi lain, langganan af ailover memungkinkan pengguna untuk menentukan konsumen fallback, jika satu konsumen gagal, seperti yang ditunjukkan dalam diagram Apache ini:

6. Kesimpulan

Dalam artikel ini, kami telah menyoroti fitur-fitur sistem pesan Pulsar seperti model pengiriman pesan, replikasi geografis, dan jaminan ketahanan yang kuat.

Kami juga mempelajari cara menyiapkan satu node dan cara menggunakan klien Java.

Seperti biasa, implementasi lengkap dari tutorial ini dapat ditemukan di Github.