Pulsarミドルウェアの使用を開始する

この記事は私のGithubセレクションに含まれています、ようこそスター!

簡単な紹介

Pulsarは、マルチテナンシー、高性能などを備えたサーバー間メッセージングシステムです。もともとはYahooによって開発されましたが、現在はApacheSoftwareFoundationによって管理されています。これは、Apache Software Foundationのトップレベルのプロジェクトであり、メッセージング、ストレージ、軽量機能コンピューティングを統合する次世代のクラウドネイティブ分散メッセージフロープラットフォームです。強力な整合性などのストリーミングデータストレージ機能を備えた、地域を超えたデータレプリケーション、高スループット、低遅延、および高スケーラビリティは、クラウドネイティブ時代のリアルタイムメッセージストリーミング、ストレージ、およびコンピューティングに最適なソリューションと見なされています。

特性

  • Pulsarの単一インスタンスは、複数のクラスターをネイティブにサポートし、コンピュータールーム間でクラスター間でメッセージをシームレスに複製できます。
  • 非常に低いパブリッシングとエンドツーエンドのレイテンシ。
  • 100万を超えるトピックにシームレスに拡張できます。
  • Java、Go、Python、C++をサポートするシンプルで使いやすいクライアントAPI。
  • 複数のトピックサブスクリプションモード(排他的サブスクリプション、共有サブスクリプション、フェイルオーバーサブスクリプション)をサポートします。
  • メッセージ配信は、ApacheBookKeeperが提供する永続的なメッセージストレージメカニズムによって保証されます。
  • PulsarFunctionsに基づくサーバーレスコネクタフレームワークであるPulsarIOを使用すると、ApachePulsarとの間でデータを簡単に移動できます。
  • ストリームネイティブのデータ処理は、軽量のサーバーレスコンピューティングフレームワークであるPulsarFunctionsによって実装されます。
  • 階層型ストレージは、データが古くなると、データをホットストレージからコールド/長期ストレージ(S3、GCSなど)にオフロードします。

建築

pulsar_01.png

これは公式ウェブサイトのアーキテクチャ図であり、いくつかのコンポーネントが含まれています。簡単な説明は次のとおりです。

ブローカー:ブローカーは、メッセージの送信、トピック管理、および負荷分散を担当します。ブローカーは、メッセージの保存を担当せずステートレスコンポーネントです。

Bookie:负责消息的的持久化,采用Apache BookKeeper组件,BookKeeper是一个分布式的WAL系统。

Producer:生产者,封装消息并将消息以同步或者异步的方式发送到Broker。

Consumer:消费者,以订阅Topic的方式消费消息,并确认。Pulsar中还定义了Reader角色,也是一种消费者,区别在于,它可以从指定置位获取消息,且不需要确认。

Zookeeper:元数据存储,负责集群的配置管理,包括租户,命名空间等,并进行一致性协调。

四种订阅模式

在介绍Pulsar特性时,讲过支持多种订阅模式,总共有四种,分别是独占(exclusive)订阅、共享(shared)订阅、故障转移(failover)订阅、键(key_shared)共享。

pulsar_02.png

独占(Exclusive)

独占模式:同时只有一个消费者可以启动并消费数据;通过 SubscriptionName 标明是同一个消费者),适用范围较小。

共享(Shared)

可以有 N 个消费者同时运行,消息按照 round-robin 轮询投递到每个 consumer 中;当某个 consumer 宕机没有 ack 时,该消息将会被投递给其他消费者。这种消费模式可以提高消费能力,但消息无法做到有序。

故障转移(Failover)

故障转移模式:在独占模式基础之上可以同时启动多个 consumer,一旦一个 consumer 挂掉之后其余的可以快速顶上,但也只有一个 consumer 可以消费;部分场景可用。

键共享(KeyShared)

基于共享模式;相当于对同一个topic中的消息进行分组,同一分组内的消息只能被同一个消费者有序消费。

pulsar_06.png

下载安装

我这里安装的是2.9.1版本的pulsar,链接地址如下:

www.apache.org/dyn/mirrors…

ダウンロードが完了したら、Linuxサーバーにアップロードし、次のコマンドを使用して解凍します。

tar -zxvf apache-pulsar-2.9.0-bin.tar.gz

スタンドアロンバージョンの場合、コマンドを使用してバックグラウンドで開始します。

./bin/pulsar-daemonスタンドアロンで起動

バックグラウンドで実行されているコマンドを終了します。

./bin/pulsar-daemonstopスタンドアロン

SpringBoot統合

Linuxサーバーでの起動が完了したら、Javaクライアントを使用して操作します。まず、Mavenの依存関係を導入します。

<dependency>
    <groupId>io.github.majusko</groupId>
    <artifactId>pulsar-java-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>
复制代码

application.yml構成ファイルと構成:

#pulsar的服务地址
pulsar:
  service-url: pulsar://192.168.0.105:6650
复制代码

構成クラスを追加しますPulsarConfig

@Configuration
public class PulsarConfig {

    @Bean
    public ProducerFactory producerFactory() {
        return new ProducerFactory().addProducer("testTopic", String.class);
    }
}
复制代码

トピック名を記録する定数クラスを追加します。

/**
 * Pulsar中间件的topic名称
 *
 * @author yehongzhi
 * @date 2022/4/9 5:57 PM
 */
public class TopicName {

    private TopicName(){}
    /**
     * 测试用的topic
     */
    public static final String TEST_TOPIC = "testTopic";
}
复制代码

メッセージプロデューサーPulsarProducerクラスを追加します。

/**
 * Pulsar生产者
 *
 * @author yehongzhi
 * @date 2022/4/9 5:23 PM
 */
@Component
public class PulsarProducer<T> {

    @Resource
    private PulsarTemplate<T> template;

    /**
     * 发送消息
     */
    public void send(String topic, T message) {
        try {
            template.send(topic, message);
        } catch (PulsarClientException e) {
            e.printStackTrace();
        }
    }
}
复制代码

トピック名が「testTopic」のコンシューマーを追加します。

/**
 * topic名称为"testTopic"对应的消费者
 *
 * @author yehongzhi
 * @date 2022/4/9 6:00 PM
 */
@Component
public class TestTopicPulsarConsumer {

    private static final Logger log = LoggerFactory.getLogger(TestTopicPulsarConsumer.class);

    //SubscriptionType.Shared,表示共享模式
    @PulsarConsumer(topic = TopicName.TEST_TOPIC,
                    subscriptionType = SubscriptionType.Shared,
                    clazz = String.class)
    public void consume(String message) {
        log.info("PulsarRealConsumer content:{}", message);
    }

}
复制代码

PulsarController最後に、テスト送信メッセージを追加します。

@RestController
@RequestMapping("/pulsar")
public class PulsarController {

    @Resource
    private PulsarProducer<String> pulsarProducer;

    @PostMapping(value = "/sendMessage")
    public CommonResponse<String> sendMessage(@RequestParam(name = "message") String message) {
        pulsarProducer.send(TopicName.TEST_TOPIC, message);
        return CommonResponse.success("done");
    }
}
复制代码

CommonResponseパブリックレスポンス機関:

public class CommonResponse<T> {

    private String code;

    private Boolean success;

    private T data;

    public static <T>CommonResponse<T> success(T t){
        return new CommonResponse<>("200",true,t);
    }

    public CommonResponse(String code, Boolean success, T data) {
        this.code = code;
        this.success = success;
        this.data = data;
    }
    //getter、setter方法
}
复制代码

プロジェクトを開始し、postmanを使用してテストします。

pulsar_07.png

pulsar_08.png

要約する

上記はパルサーミドルウェアの簡単な紹介であり、パルサーの特性、アーキテクチャ、サブスクリプションモード、およびSpringBootの統合の小さな例を紹介しています。最後に、参考のために他の主流のミドルウェアと比較してください。

読んでいただきありがとうございます。この記事がお役に立てば幸いです。

あなたがそれが役に立つと思うなら、それを好きにしてください、あなたの好きは私の創造の最大の動機です

私は覚えられるように一生懸命努力しているプログラマーです。またね!

能力には限りがあります。間違いや不適切な点があれば、批判して訂正し、一緒に学び、コミュニケーションを図ってください!

おすすめ

転載: juejin.im/post/7087592695828332557