Pengenalan kepada Apache Pulsar

1. Pengenalan

Apache Pulsar adalah sistem pesanan berasaskan Terbitan / Penerbitan sumber terbuka yang diedarkan yang dibangunkan di Yahoo .

Ia dibuat untuk memberi kuasa kepada aplikasi kritikal Yahoo seperti Yahoo Mail, Yahoo Finance, Yahoo Sports dan lain-lain. Kemudian, pada tahun 2016, ia dibuka secara terbuka di bawah Apache Software Foundation.

2. Senibina

Pulsar adalah penyelesaian berprestasi tinggi multi-penyewa untuk pesanan pelayan ke pelayan . Ini terdiri daripada sekumpulan broker dan bookie bersama dengan Apache ZooKeeper bawaan untuk konfigurasi dan pengurusan. Bookie adalah dari Apache BookKeeper yang menyediakan simpanan untuk mesej sehingga habis.

Dalam kelompok kita akan mempunyai:

  • Banyak broker cluster untuk menangani mesej masuk dari pengeluar dan menghantar mesej tersebut kepada pengguna
  • Apache BookKeeper untuk menyokong ketekunan mesej
  • Apache ZooKeeper untuk menyimpan konfigurasi kluster

Untuk lebih memahami ini, mari kita lihat gambarajah seni bina dari dokumentasi:

3. Ciri-ciri Utama

Mari kita mulakan dengan melihat beberapa ciri utama:

  • Sokongan terbina dalam untuk beberapa kelompok
  • Sokongan untuk meniru semula mesej di pelbagai kluster
  • Pelbagai mod langganan
  • Skala hingga berjuta topik
  • Menggunakan Apache BookKeeper untuk menjamin penghantaran mesej.
  • Kependaman rendah

Sekarang, mari kita bincangkan beberapa ciri utama secara terperinci.

3.1. Model Pemesejan

Kerangka ini menyediakan model pesanan fleksibel. Secara amnya seni bina pesanan mempunyai dua model pesanan iaitu beratur dan penerbit / pelanggan. Penerbit / Pelanggan adalah sistem pesanan siaran di mana mesej dihantar kepada semua pengguna. Sebaliknya, beratur adalah komunikasi titik ke titik.

Pulsar menggabungkan kedua konsep dalam satu API umum . Penerbit menerbitkan mesej ke topik yang berbeza. Kemudian mesej ini disiarkan ke semua langganan.

Pengguna melanggan untuk mendapatkan mesej. Perpustakaan membolehkan pengguna memilih pelbagai cara untuk menggunakan mesej dalam langganan yang sama yang merangkumi eksklusif, bersama dan failover. Kami akan membincangkan jenis langganan ini secara terperinci di bahagian kemudian.

3.2. Kaedah Penyebaran

Pulsar mempunyai sokongan terpadu untuk penyebaran di lingkungan yang berbeza . Ini bermaksud kita dapat menggunakannya pada mesin di premis standard, atau menyebarkannya di kluster Kubernetes, Google atau AWS Cloud.

Ia dapat dilaksanakan sebagai simpul tunggal untuk tujuan pengembangan dan pengujian. Dalam kes ini, semua komponen (broker, BookKeeper, dan ZooKeeper) berjalan dalam satu proses.

3.3. Peniruan Geo

Perpustakaan memberikan sokongan di luar kotak untuk replikasi data geo. Kami dapat mengaktifkan replikasi mesej antara beberapa kelompok dengan mengkonfigurasi kawasan geografi yang berbeza.

Data mesej direplikasi dalam masa hampir nyata. Sekiranya kegagalan rangkaian merentasi kluster, data selalu selamat dan disimpan di BookKeeper. Sistem replikasi terus dicuba sehingga replikasi berjaya.

Ciri replikasi geo juga membolehkan organisasi menyebarkan Pulsar di penyedia awan yang berbeza dan meniru data . Ini membantu mereka untuk mengelakkan penggunaan API penyedia awan proprietari.

3.4. Kekal

Setelah Pulsar membaca dan mengakui data, ia menjamin tiada kehilangan data . Ketahanan data berkaitan dengan jumlah cakera yang dikonfigurasi untuk menyimpan data.

Pulsar memastikan ketahanan dengan menggunakan bookies (contoh Apache BookKeeper) yang berjalan di nod penyimpanan. Setiap kali bookie menerima mesej, ia menyimpan salinan dalam memori dan juga menulis data ke WAL (Write Ahead Log). Log ini berfungsi dengan cara yang sama seperti WAL pangkalan data. Bookie beroperasi berdasarkan prinsip transaksi pangkalan data dan memastikan data tidak hilang walaupun berlaku kerosakan mesin.

Selain daripada perkara di atas, Pulsar juga dapat menahan banyak kegagalan nod. Perpustakaan mereplikasi data ke beberapa bookie, kemudian mengirim pesan pengakuan kepada produser. Mekanisme ini menjamin bahawa kehilangan data sifar walaupun terdapat banyak kegagalan perkakasan.

4. Persediaan Node Tunggal

Sekarang mari kita lihat bagaimana untuk menubuhkan kluster nod tunggal Apache Pulsar.

Apache juga menyediakan API klien sederhana dengan pengikatan untuk Java, Python, dan C ++ . Kami kemudian akan membuat contoh pengeluar dan langganan Java yang mudah.

4.1. Pemasangan

Apache Pulsar boleh didapati sebagai pengedaran binari. Mari mulakan dengan memuat turunnya:

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

Apabila muat turun selesai, kita boleh menyaharkib fail zip. Pengedaran yang tidak diarkibkan akan mengandungi folder bin, conf, contoh, lesen 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 pengguna di atas, kami telah membuat langganan dengan jenis yang dikongsi . Kami juga boleh membuat langganan eksklusif dan failover .

Yang eksklusif langganan membenarkan hanya satu pengguna untuk dilanggan.

Sebaliknya, langganan ailover membolehkan pengguna menentukan pengguna fallback, sekiranya satu pengguna gagal, seperti yang ditunjukkan dalam rajah Apache ini:

6. Kesimpulannya

Dalam artikel ini, kami telah mengetengahkan ciri sistem pesanan Pulsar seperti model pesanan, replikasi geo dan jaminan ketahanan yang kuat.

Kami juga belajar bagaimana mengatur satu simpul dan bagaimana menggunakan klien Java.

Seperti biasa, pelaksanaan penuh tutorial ini boleh didapati di Github.