こんにちは。ヤフーの津田です。
私は現在、ヤフーの各プロダクト向けにキューイング・Pub-Sub・ストリーミングなどのメッセージングプラットフォームを提供するチームに所属しています。このチームでは、メッセージングプラットフォームとしてOSS Apache Pulsar(以降はPulsar)を利用しています。
2021/09/30にApache Pulsar Meetup Japan #4を開催し、Pulsarの概要や近況、ヤフーのPulsarの活用についてもお話ししました。本稿では、Apache Pulsar Meetup Japan #4の各発表内容をご紹介します。また、ヤフーにおいて2021年のPulsarのOSS/コミュニティーでどのような活動が行われたのかについてもご紹介します。
そもそもPulsarとは?
Pulsarは、Publish-Subscribe方式でメッセージを送受信できるプラットフォームです。マルチテナント、高スループット、低レンテンシー、水平スケール可能などといった特徴を持っています。例えばですが、あるアプリケーションから得たログを複数のアプリケーションに非同期で送りたいときや、ジョブの保存や取り出しを非同期で行いたいときなどにPulsarが使われます。
図1. Publish-Subscribe方式でメッセージの送受信を行う際のイメージ
また、クライアントライブラリにおいてはJava・C++・Go・Node.jsなどのさまざまな言語を公式でサポートしています。
Pulsarの仕組みや基本的な使い方に関しては別記事を投稿していますのでそちらをご覧ください。
- メッセージングPF「Apache Pulsar」の使い方(入門編)
- メッセージングPF「Apache Pulsar」の使い方(クライアント編)
- メッセージングPF「Apache Pulsar」の使い方(クライアント編2)
- メッセージングPF「Apache Pulsar」の使い方(サーバー編)
ヤフーとPulsarの関わり
私の所属するチームはPulsarがOSS化される2016年9月頃からPulsarに携わっており、Pulsarのコミッターも複数名在籍しています。このチームでは、ヤフーの各プロダクト向けにPulsarを運用しつつ、社内における需要・事例をもとに機能拡張・バグ修正などの開発を通じたOSSへの貢献も行っています。
詳細に関しては別記事を投稿していますのでそちらをご覧ください。
Pulsar Meetup
まずはPuslar Meetupの説明をします。Pulsar MeetupはPulsarに関する発表やその発表を聞けたり、参加者同士でPulsarについての話ができるイベントです。Pulsarコミュニティーの盛り上げを目的に掲げており、日本でのPulsarの情報収集や導入の手助けになればと思い、登壇やイベント開催をサポートしています。
これまでに3回ほどPulsar Meetupを開催しており今回で4回目です。
これまでは対面でのイベントでしたが今回は初のオンラインでのイベントです。
ここから簡単にではありますが第4回目であるApache Pulsar Meetup Japan #4の発表内容をご紹介したいと思います。
「Apache Pulsarの概要と近況」の発表
こちらは私が発表しました!
Pulsarを全く知らない方でもイベントを楽しんで頂けるように、初めにPulsarの各用語・構成・コンポーネント・クライアントライブラリなどの概要を簡単にお話ししました。お話しした内容の大半は別記事で投稿した内容の通りなので、ここでは詳細は割愛します。
その後、Pulsarの各バージョンのリリース状況や追加された機能(v2.5~v2.8)に関してお話ししました。
v2.5~v2.8で追加された機能に関してですが、Producerのレート制限・Javaクライアントライブラリでのバッチ受信・Exclusive Producerなどの機能が追加になっています。スライドに記載の機能はほんの一部ですので、詳細に関してはオフィシャルのリリースノートをご覧ください。
図2. v2.5~v2.8で追加された機能の一覧(発表時のスライド)
その後、コミュニティーの活動に関してお話ししました。
Pulsarコミュニティーでは継続的にイベントが行われており、ブログやYouTubeなどによる情報発信も随時行われている状況です。加えてGitHub上のStar数やContributor数も順調に推移していることから、コミュニティーとしては非常に活発な状態だと言えます。
図3. コミュニティーとしてのイベントの開催状況(発表時のスライド)
また、発表の最後にPulsarの利用時のイメージが少しでも伝わればと思い、実際にPulsarでProduceとConsume(Exclusive・Shared)を行うデモをしました。
図4. Sharedでのデモの内容(発表時のスライド)
以下に発表時のスライドがありますので、ご興味があればご覧ください。
「Apache PulsarにおけるApache BookKeeperとApache ZooKeeper」の発表
特別講演として、DataStax, Inc.のEnrico Olivelli氏に発表いただきました!
DataStax, Inc.のEnrico Olivelli氏はPulsar・Apache BookKeeper(以降はBookKeeper)・Apache ZooKeeper(以降はZooKeeper)のPMCメンバーであり、Apache CuratorのPMC議長です。
初めに、Pulsar・BookKeeper・ZooKeeperの概要や各コンポーネントの役割などをお話ししてくださいました。少し補足しますと、PulsarはBookKeeperとZooKeeperを利用しています。BookKeeperはメッセージを保存するためのコンポーネント、ZooKeeperはネームスペース・テナントなどの設定情報を保存するためのコンポーネントです。
私の発表でもBookKeeper・ZooKeeperにほんの少しだけ触れていましたが、これらについて詳細にお話ししてくださいました。
その後、実際にBrokerにメッセージがProduceされた場合に各コンポーネントでどのような処理をしているかお話がありました。少し補足しますと、BrokerはPulsarにおいて実際にクライアントとのメッセージの送受信を行うコンポーネントです。
また、Brokerで障害が発生した場合に対象Brokerの担当トピックがどのように自動リカバリーされるかのお話とこの際のデモをしてくださいました。
いずれの内容もある程度は理解しているつもりではいたのですが、実際お話を伺うと知らなかったことも多くあったので非常に良い勉強になりました。
また、デモの際にはBKVM(bookkeeper-visual-manager)というツールを利用されていました。これはBookKeeperに保存されているLedger(Produceされたメッセージの集合体のようなもの)のID・サイズ・ステータスなどをWeb UIで確認できるようなので、機会があれば利用してみたいと思います。
以下に発表時のスライドがありますので、ぜひご覧ください。
ヤフーでのPulsarの利用事例の発表
Yahoo! JAPANを支えるログ・メトリクス転送システムのE2Eモニタリングの取り組み
ヤフーのコンピューティングプラットフォームチームとモニタリングプラットフォームチームによる共同発表です。
ログ・メトリクス転送システムでは各アプリケーションからのログ転送時にPulsarを利用しています。今回はProducer, Consumer間のログ到達率を可視化するための取り組みに関してお話ししました。
以下に発表時のスライドがありますので、ぜひご覧ください。
ユーザー情報格納基盤におけるPulsarの活用事例
ヤフーのユーザー情報格納基盤チームからの発表です。
ユーザー情報格納基盤ではユーザー情報が更新された場合に、各社内プロダクトに更新情報をフィードしておりその際にPulsarを利用しています。メッセージングプラットフォームは他にもいろいろありますが、選定のポイントやPulsarを選択した理由などを紹介しました。
以下に発表時のスライドがありますので、ぜひご覧ください。
2021年のOSS/コミュニティー活動まとめ
ヤフーではPulsar Meetup以外にもPulsarのOSS/コミュニティー活動を行っていますので、簡単にではありますがその内容をご紹介します。
継続的な活動
ヤフーの各プロダクト向けにPulsarを運用しているのもあり、日々の検証・障害・利用者の問い合わせなどにより、機能改善要望やバグなどの課題が出てきます。この課題の解決に向けて、私の所属するチームでは日々、Pulsarの機能拡張・バグ修正などを行っています。
ちなみに最近ではBookKeeperの機能拡張・バグ修正を行う機会も増えています。
また、Pulsarのコード修正だけではなく新バージョンのリリース・リリース候補となるパッケージのチェック・各Pull Requestのレビュー・Issueの回答なども行っています。
Qiitaへの投稿
Pulsarに関連する日本語の情報(記事)は、まだまだインターネット上に少ないと感じています。そこで不定期ではありますが、私の所属するチームではPulsarに関連する情報をQiitaにも投稿しています。
今年は以下の記事を投稿しました。ご興味があれば以下のQiitaの記事をご覧ください。(外部サイトへ移動します)
- Pulsar Node.jsクライアントライブラリを使ってみた
- サブスクリプションタイプKey_Sharedの紹介
- Apache Pulsarにおけるレプリケーテッドサブスクリプションの紹介
- Apache PulsarにおけるBacklogの概念とその挙動
PIP(Pulsar Improvement Proposals)
PulsarのコミュニティーにPartitioned topics Producerの機能改善に関するプロポーザルを提出しています。また、提出したプロポーザルの内容でPulsar Summit NA 2021にも登壇しています。
提出したプロポーザルの機能改善の内容を簡潔に説明すると、パーティションドトピックでProduceを行う場合はパーティション数分のProducerを作成する仕様なのですが、これを削減したいといったものです。
詳細に関しては別記事を投稿していますので、ご興味があればご覧ください。
「Apache Kafka Meetup Japan #9」での登壇
Apache Kafka Meetup Japan #9で登壇(LT枠)しました。
PulsarとApache Kafkaのアーキテクチャ・機能・パフォーマンスを比較しつつPulsarを紹介するといった内容です。
詳細は割愛しますが、以下に発表時のスライドがありますので、こちらもご興味があればご覧ください。
おわりに
本稿では、Pulsar Meetupの発表内容と2021年のOSS/コミュニティー活動をご紹介しました。
Pulsar Meetupは2年ぶりの開催となりましたが、個人的にはDataStax, Inc.のEnrico Olivelli氏の特別講演があり、いくつかのPulsarの利用事例もご紹介できましたので非常に良いイベントになったと思います。また、イベント後の歓談・交流・質問タイムにてApache Kafkaを運用されている方や実際にPulsarを運用されている方とお話をする機会もありました。特にヤフー以外でPulsarを導入している方とお話しでき、非常に嬉しく思いました。
時期は決まっていませんが、またこのようなイベントを開催したいと思っておりますので、ぜひともJapan Pulsar User Groupに事前登録していただけると幸いです。
また、私の所属するチームとしては、来年以降もPulsarのOSS/コミュニティー活動に力を入れていきたいと考えています。
最後まで読んでいただきありがとうございました。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました
- 津田 秀介
- メッセージングプラットフォーム エンジニア
- Apache Pulsarをベースにしたメッセージングプラットフォームを開発・運用しています。