この記事は私のGithubセレクションに含まれています、ようこそスター!
簡単な紹介
Pulsarは、マルチテナンシー、高性能などを備えたサーバー間メッセージングシステムです。もともとはYahooによって開発されましたが、現在はApacheSoftwareFoundationによって管理されています。これは、Apache Software Foundationのトップレベルのプロジェクトであり、メッセージング、ストレージ、軽量機能コンピューティングを統合する次世代のクラウドネイティブ分散メッセージフロープラットフォームです。強力な整合性などのストリーミングデータストレージ機能を備えた、地域を超えたデータレプリケーション、高スループット、低遅延、および高スケーラビリティは、クラウドネイティブ時代のリアルタイムメッセージストリーミング、ストレージ、およびコンピューティングに最適なソリューションと見なされています。
特性
- Pulsarの単一インスタンスは、複数のクラスターをネイティブにサポートし、コンピュータールーム間でクラスター間でメッセージをシームレスに複製できます。
- 非常に低いパブリッシングとエンドツーエンドのレイテンシ。
- 100万を超えるトピックにシームレスに拡張できます。
- Java、Go、Python、C++をサポートするシンプルで使いやすいクライアントAPI。
- 複数のトピックサブスクリプションモード(排他的サブスクリプション、共有サブスクリプション、フェイルオーバーサブスクリプション)をサポートします。
- メッセージ配信は、ApacheBookKeeperが提供する永続的なメッセージストレージメカニズムによって保証されます。
- PulsarFunctionsに基づくサーバーレスコネクタフレームワークであるPulsarIOを使用すると、ApachePulsarとの間でデータを簡単に移動できます。
- ストリームネイティブのデータ処理は、軽量のサーバーレスコンピューティングフレームワークであるPulsarFunctionsによって実装されます。
- 階層型ストレージは、データが古くなると、データをホットストレージからコールド/長期ストレージ(S3、GCSなど)にオフロードします。
建築
これは公式ウェブサイトのアーキテクチャ図であり、いくつかのコンポーネントが含まれています。簡単な説明は次のとおりです。
ブローカー:ブローカーは、メッセージの送信、トピック管理、および負荷分散を担当します。ブローカーは、メッセージの保存を担当せず、ステートレスコンポーネントです。
Bookie:负责消息的的持久化,采用Apache BookKeeper组件,BookKeeper是一个分布式的WAL系统。
Producer:生产者,封装消息并将消息以同步或者异步的方式发送到Broker。
Consumer:消费者,以订阅Topic的方式消费消息,并确认。Pulsar中还定义了Reader角色,也是一种消费者,区别在于,它可以从指定置位获取消息,且不需要确认。
Zookeeper:元数据存储,负责集群的配置管理,包括租户,命名空间等,并进行一致性协调。
四种订阅模式
在介绍Pulsar特性时,讲过支持多种订阅模式,总共有四种,分别是独占(exclusive)订阅、共享(shared)订阅、故障转移(failover)订阅、键(key_shared)共享。
独占(Exclusive)
独占模式:同时只有一个消费者可以启动并消费数据;通过 SubscriptionName
标明是同一个消费者),适用范围较小。
共享(Shared)
可以有 N 个消费者同时运行,消息按照 round-robin
轮询投递到每个 consumer
中;当某个 consumer
宕机没有 ack
时,该消息将会被投递给其他消费者。这种消费模式可以提高消费能力,但消息无法做到有序。
故障转移(Failover)
故障转移模式:在独占模式基础之上可以同时启动多个 consumer
,一旦一个 consumer
挂掉之后其余的可以快速顶上,但也只有一个 consumer
可以消费;部分场景可用。
键共享(KeyShared)
基于共享模式;相当于对同一个topic
中的消息进行分组,同一分组内的消息只能被同一个消费者有序消费。
下载安装
我这里安装的是2.9.1版本的pulsar,链接地址如下:
ダウンロードが完了したら、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を使用してテストします。
要約する
上記はパルサーミドルウェアの簡単な紹介であり、パルサーの特性、アーキテクチャ、サブスクリプションモード、およびSpringBootの統合の小さな例を紹介しています。最後に、参考のために他の主流のミドルウェアと比較してください。
読んでいただきありがとうございます。この記事がお役に立てば幸いです。
あなたがそれが役に立つと思うなら、それを好きにしてください、あなたの好きは私の創造の最大の動機です〜
私は覚えられるように一生懸命努力しているプログラマーです。またね!!!
能力には限りがあります。間違いや不適切な点があれば、批判して訂正し、一緒に学び、コミュニケーションを図ってください!