ヤフー発のメッセージキュー「Pulsar」のご紹介

4.6K Views

November 27, 17

スライド概要

PulsarはアメリカのYahoo! Inc. によって開発され、現在はApache Software Foundationに移管されたオープンソースのメッセージキューです。
日本のヤフーでも利用しているこのPulsarの機能や特徴をご紹介します。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ヤフー発のメッセージキュー 「Pulsar」のご紹介 ヤフー株式会社 システム統括本部 坂本 雅宏 2017/11/18

2.

自己紹介 坂本 雅宏 経歴: ▪ 2013/04 ▪ 2013/07~ ▪ 2015/10~ ▪ 2016/04~ ▪ 2017/06~ ヤフー入社 ユーザの属性情報を扱うシステムを担当 社内向けのWebAPI実行環境を担当 メッセージキュー「Pulsar」を担当 「Pulsar」のコミッター 扱う事が多い言語:日本語、Java、PHP、Node.js 扱うのに困難が伴う言語:英語 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2

3.

Apache Pulsar Yahoo! Inc.(現:Oath)で開発されたJava製の新しいメッセージキュー ▪ Pub-Subメッセージングモデルを採用 ▪ 特徴 › 高速 / スケーラブル › マルチテナント › ジオレプリケーション ▪ 歴史 › 2014秋 Yahoo! Inc. が開発 › 2016/09 OSSとして公開 › 2017/06 Apache Software Foundationに移管(Incubatorプロジェクト) Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3

4.

アジェンダ 1. メッセージキューとは? 2. Pulsar導入の背景 3. インターフェースとアーキテクチャ 4. Pulsar on Kubernetes 5. Kafkaとの比較 6. Pulsarの近況 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4

5.

メッセージキューとは? Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5

6.

メッセージキュー(MQ)とは? システム間のメッセージのやり取りに使用されるソフトウェアの総称 ▪ メッセージ … 他のシステムへの通知情報、処理して欲しいデータ、ログ etc. ▪ キュー … 先に入れたものから順に出てくるデータ構造 › メッセージの送信 = キューの最後尾にメッセージを追加する › メッセージの受信 = キューの先頭からメッセージを取り出す 送信側 システム 6 MQにメッセージを 送信すると… 1 5 4 3 メッセージキュー Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 受信側 システム 送った通りの順番で 非同期に相手に届く! 6

7.

メッセージキューを使わなかったら… 応答が全然 返ってこない… 10 9 8 7 6 5 4 3 リクエストがいっぱい来てるよ! 早く次のメッセージ受け取って! 2 1 送信側 システム 受信側 システム フロントエンド サーバ バックエンド サーバ 今は忙しいんだ 後にしてくれ エンドユーザの Webブラウザなど Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7

8.

メッセージキューを使えば… ちゃんとリクエストは 受け付けてくれたみたい とりあえずキューに追加だけ しておいてユーザに応答! 手が空き次第 順番に受け取っていくよ 1 送信側 システム フロントエンド サーバ 5 4 3 2 メッセージキュー 受信側 システム バックエンド サーバ エンドユーザの Webブラウザなど Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8

9.

Pub-Subメッセージングとは? トピックと呼ばれる宛先に対してメッセージの送受信が行われる方式 ▪ メッセージの送信側 = Producer / Publisher / 出版者 ▪ メッセージの受信側 = Consumer / Subscriber / 購読者 Consumer 1 Producer あるトピックに対して メッセージを送信すると… Consumer 2 トピック メッセージキュー Consumer 3 そのトピックを購読している 相手にメッセージが届く! Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9

10.

Pub-Subメッセージングをしなかったら… 1対1の通信なら問題ないが、1対多や多対多になると複雑で管理も大変 送信側 システム1 受信側 システム1 送信側 システム2 受信側 システム2 送信側 システム3 受信側 システム3 送信側 システム4 受信側 システム4 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10

11.

Pub-Subメッセージングをすれば… 送信側も受信側もお互いを意識する必要がない → シンプルかつスケーラブルに 送信側 システム1 送信側 システム2 送信側 システム3 送信側 システム4 トピック1 トピック2 トピック3 メッセージキュー Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 受信側 システム1 受信側 システム2 受信側 システム3 受信側 システム4 11

12.

代表的なメッセージキュー ▪ Kafka › 2011年にLinkedInから公開 › 大量のデータを高速に処理する事を目指し設計 › ストリームデータの処理によく使用される ▪ RabbitMQ › 2007年にRabbit Technologiesから公開 › 通信プロトコルにAMQPを採用 › どちらかと言えばパフォーマンスよりも信頼性を重視 ▪ ActiveMQ › 2004年から使用されている歴史あるプロダクト › 様々なプロトコルをサポートし、多数の言語から利用可能なのが強み Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12

13.

Pulsar導入の背景 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13

14.

社内プラットフォームとしてのMQを提供したい ■背景: ▪ ヤフーには100程度のサービスがあり、それぞれに開発/運用チームが存在 ▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利用したい ■課題: ▪ 設備・運用コストが増え、本来やりたかったサービス開発に集中できない ▪ ナレッジが社内で分散する → サービス横断で利用可能な「社内プラットフォームとしてのMQ」を提供したい ■求められる要件: 1. 高いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14

15.

要件1 – 高いパフォーマンス / スケーラビリティ ▪ ヤフーで提供しているサービスは数が多く、それぞれの利用者数も膨大 ▪ 例えばトップページ(PC)の1日あたりの利用者数は… › PV(Webページの参照回数):2億以上 › UB(ユニークなWebブラウザ数):3千万以上 ▪ それを支えるMQも大量のメッセージを高速に処理できる事が求められる ▪ 利用者数の増大に対応できるようにスケーラブルである事も重要 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15

16.

要件2 - 複数のサービスが同居できる サービスごとに専用のMQを用意するのはコストがかかる 1つのMQに複数のサービスが同居できる(=マルチテナント)事が求められる サービスA Producer MQ サービスB Consumer サービスC Producer MQ Producer MQ Producer MQ Producer トピックA Consumer サービスB Producer トピックB Consumer サービスC Producer トピックC Consumer サービスD Producer トピックD Consumer Consumer サービスD Consumer サービスA Consumer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16

17.

要件3 – 複数のデータセンター間でのレプリケーション ▪ ヤフーは地理的に離れた複数のデータセンターでサービスを展開 ▪ 全てのデータセンターで同じメッセージを受けて同じ処理を実行したい場合: › 全てのデータセンターにメッセージをpublish? → 非効率的、手間がかかる › 特定のデータセンターのMQに全てのConsumerが接続? → レイテンシ大 → MQの中でデータセンターをまたいだレプリケーションして欲しい データセンターA データセンターB データセンターC Consumer Producer MQ Consumer Producer MQ Consumer それぞれのDCでpublish 全てのDSでPublish するのは非効率的 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Consumer Consumer Consumer Consumer Consumer Consumer DCをまたぐので レイテンシが大きい 17

18.

Pulsarは前述の要件を全て満たす 前述の要件を全て満たすソリューションが存在しなかった ▪ パフォーマンスが低い… ▪ トピック数が膨大になるとスケールがうまくいかなくなる… ▪ オペレーションが不便… そこで要件を満たすために1から作られたのがPulsar 1. 高いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18

19.

特徴1 – 高速 / スケーラブル 大量のメッセージを高速に送受信可能 ▪ Yahoo! Inc. での実績 › トピック数:140万 › メッセージ数:1,000億 [msg/day] › メッセージの送信に要する時間(平均):5 [ms] ▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル Producer Producer Producer Producer Producer Producer Producer スケール アウト Consumer Pulsar Consumer Consumer Consumer Consumer Consumer Consumer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Pulsar 19

20.

特徴2 - マルチテナント 複数のサービスが1つのPulsarインスタンスを共用可能 ▪ ヤフーでは全社で共有するインスタンスを専用のチームが提供・運用 各サービスが利用可能な ▪ 各サービスはサービス開発に集中できる リソースを個別に設定可能 サービスA Producer トピックA Consumer サービスB Producer トピックB Consumer サービスC Producer トピックC Consumer トピックD 他のサービスのトピックへの Consumer アクセスは認証・認可機構で ブロック サービスD Producer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20

21.

特徴3 – ジオレプリケーション あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能 ▪ Producerは自分と同じデータセンターのPulsarにメッセージを送ればいい ▪ Consumerは自分と同じデータセンターのPulsarからメッセージを受け取れる データセンターA データセンターB Pulsar クラスタ A Producer トピック Consumer ジオ レプリケーション Consumer Consumer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Pulsar クラスタ B トピック Consumer Consumer Consumer 21

22.

利用事例1 - コンテンツ入稿プラットフォーム ▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが入稿される ▪ 入稿サーバへのファイル転送を検知したら入稿ログをPulsarに流す ▪ トピックを購読している各サービスがファイルを取得して処理する サービスA Pulsar 天気情報、地図情報、 ニュース etc. ログサーバ 入稿サーバ Producer Consumer サービスB トピック Consumer コンテンツの入稿ログ をPulsarに流す コンテンツ プロバイダ サービスC Consumer ファイルを取得 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22

23.

利用事例2 - Yahoo!メールのBEシステム ▪ メールの検索インデックスの生成/修正といった時間のかかるジョブを非同期に 処理するために利用 ▪ ProducerはPulsarにジョブをキューイング ▪ ConsumerはPulsarからジョブを取り出して順番に処理 メールBEサーバ Pulsar Consumer メールBEサーバ Producer リクエスト トピック ジョブを登録 ジョブを 取り出して処理 ジョブを処理する ハンドラ Producer 忙しい時やジョブが 失敗した時は再登録 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23

24.

インターフェース Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24

25.

Pulsarのインターフェース ▪ クライアントライブラリはJava, C++, Pythonを提供 ▪ 他の言語からもWebSocket APIを利用可能 ▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続 サービス名など 用途など persistent://property/cluster/namespace/destination メッセージを永続化 データセンターなど 用途の詳細など ▪ さらにConsumerはサブスクリプションの名前を指定する必要がある ▪ 用途に応じて3種類のサブスクリプションモード(メッセージの配信方式)を選択可能 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25

26.

サブスクリプションとは? Consumerがトピックの購読を開始した時に作成される購読の管理単位 ▪ 「メッセージがどこまで受け取られたか?」はサブスクリプションごとに管理される ▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける 1 トピック subscription-A Producer 6 5 4 3 Consumer 2 3 subscription-B Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 1 Consumer 26

27.

サブスクリプションタイプ1 - Exclusive ▪ 1つのサブスクリプションには1つのConsumerだけが接続可能 ▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる ▪ デフォルトのサブスクリプションタイプ トピック 5 4 3 2 1 5 4 3 subscription-A (Exclusive) Producer 2 1 Consumer 5 subscription-B (Exclusive) 4 3 2 1 Consumer Consumer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27

28.

サブスクリプションタイプ2 - Shared ▪ 1つのサブスクリプションに複数のConsumerが接続可能 ▪ メッセージは各Consumerにラウンドロビンで配信される ▪ 複数のシステムで処理を分担させたい場合に有用 1 Consumer 4 トピック 5 Producer 4 3 2 1 subscription (Shared) 2 5 Consumer 3 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Consumer 29

29.

サブスクリプションタイプ3 - Failover ▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ ▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる ▪ アクティブ・スタンバイ構成を実現可能 1 Consumer 2 トピック 5 Producer 4 3 2 1 5 subscription (Failover) 4 3 1と2の受け取り後 にダウン Consumer Consumer Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31

30.

Javaのサンプルコード - Producer // PulsarのURIを指定してクライアントを作成 PulsarClient client = PulsarClient.create( "pulsar://broker.usw.example.com:6650"); // トピックを指定してProducerを作成 Producer producer = client.createProducer( "persistent://my-property/us-west/my-namespace/my-topic"); // メッセージを送信 producer.send("my-message".getBytes()); Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33

31.

Javaのサンプルコード - Consumer PulsarClient client = PulsarClient.create( "pulsar://broker.usw.example.com:6650"); // トピックとサブスクリプションを指定してConsumerを作成 Consumer consumer = client.subscribe( "persistent://my-property/us-west/my-namespace/my-topic", "my-subscription-name"); // メッセージを受信して画面に表示 Message msg = consumer.receive(); System.out.println(new String(msg.getData())); // メッセージに対するACKを返信(キューからメッセージを削除) consumer.acknowledge(msg); Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34

32.

Javaのサンプルコード - サブスクリプションタイプの指定 PulsarClient client = PulsarClient.create( "pulsar://broker.usw.example.com:6650"); // Consumerの設定にサブスクリプションタイプを追加 ConsumerConfiguration conf = new ConsumerConfiguration(); conf.setSubscriptionType(SubscriptionType.Shared); Consumer consumer = client.subscribe( "persistent://my-property/us-west/my-namespace/my-topic", "my-subscription-name", conf); Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35

33.

アーキテクチャ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36

34.

システム構成図 ■Broker Producer Consumer ‣ クライアントとのメッセージの やり取りを担当 ‣ 「状態」を持たないため増設が容易 ■Bookie Broker 1 Broker 2 Broker 3 Local ZooKeeper Global ZooKeeper Pulsar クラスタ Bookie 1 Bookie 2 Bookie 3 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 ‣ BookKeeperのストレージノード ‣ トピックに送信されたメッセージや それに関連するデータを保存 ■ZooKeeper ‣ トピックの管理に必要なメタ情報を 保存 ‣ Local ZKはクラスタ内に閉じた 情報を担当 ‣ Global ZKは全てのクラスタで 共有すべき情報を担当 37

35.

Apache BookKeeperとは? ▪ オープンソースの分散型ログストレージサービス ▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性 ▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル データの複製数は自由に変更可能 A A B C Apache BookKeeperはApache Software Foundationの 米国およびその他の国における登録商標または商標です。 C D D Bookie1 Bookie2 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 B Bookie3 38

36.

BookKeeperのアーキテクチャ ▪ 先行書き込みログ › Bookie Write Read ストレージに対する「操作」を先に書き込む › ストレージへの反映は後からバックグラウンドで › 途中で電源が落ちても「操作」を再開可能 › 容量より速度を重視したいので高速なSSDを使用 書き込み キャッシュ 先行書き込みログ (SSD) 先行読み込み キャッシュ 永続化ストレージ (HDD) ▪ 永続化ストレージ › 連続するデータをまとめてキャッシュに読み込んでおく › 一般にメッセージキューは連続するデータを扱うため効率がよい › 速度より容量を重視したいので大容量なHDDを使用 速度と永続性の両立を実現 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39

37.

Pulsar on Kubernetes Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40

38.

Kubernetesとは? ▪ コンテナ型仮想化技術「Docker」のためのオーケストレーションツール › コンテナ = 隔離されたアプリケーション実行環境 › VM型仮想化とは違ってOSの仮想化などはしないため軽量 コンテナ コンテナ App App 複数の仮想的なホストが 動いているように見える ホストOS ハードウェア Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41

39.

Dockerの問題点の例 ホスト2 ホスト1 コンテナ ❓ Private IP App コンテナ コンテナ Private IP App App コンテナ App NATなどによる変換が必要 → 管理が煩雑、スケールアウトが困難 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42

40.

Kubernetesを使うと… Kubernetesクラスタ (複数台のホストから構成) コンテナ Cluster IP App コンテナ コンテナ Cluster IP コンテナ Cluster IP App App App あたかも1台の実行環境であるかのように利用可能 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43

41.

Pulsar on Kubernetes ▪ Pulsarは様々なKubernetesクラスタに簡単にデプロイ可能 › › › Google Container Engine (GKE) Amazon Web Service (AWS) 独自クラスタ ▪ 今回はGKEでのデプロイ方法をご紹介 › 詳細な手順はこちら: https://pulsar.incubator.apache.org/ja/deployment/Kubernetes/ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 44

42.

Google Cloud Platformの準備 ▪ 事前準備として以下が必要 › › › cloud.google.comにサインアップできるGoogle Cloud Platformのアカウント 既存のCloud Platformプロジェクト Google Cloud SDK (特にgcloudとkubectlツール) 無料トライアルアカウントでも可 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45

43.

Google Cloud Platformの準備 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46

44.

新しいKubernetesクラスタの作成 $ gcloud container clusters create ¥ pulsar-gke-cluster ¥ # クラスタ名 --zone=us-central1-a ¥ # リージョンとゾーン --machine-type=n1-standard-4 ¥ # マシンの種類 --num-nodes=2 ¥ # ノード数 --local-ssd-count=2 # ローカルSSDの数 ※無料トライアルアカウント用に ドキュメントよりスペックを下げています Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47

45.

Kubernetesダッシュボードの表示 $ gcloud container clusters get-credentials ¥ pulsar-gke-cluster ¥ --zone=us-central1-a ¥ --project=<project-id> $ kubectl proxy 上記コマンドの入力後 http://localhost:8001/uiにブラウザからアクセス可 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48

46.

Pulsarのデプロイ – ZooKeeperのデプロイ1 # yaml定義のあるディレクトリに移動 $ cd /path/to/incubatorpulsar/kubernetes/google-container-engine # デプロイ $ kubectl apply -f zookeeper.yaml Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 49

47.

Pulsarのデプロイ – ZooKeeperのデプロイ2 # クラスタメタデータの初期化 $ kubectl exec -it zk-0 -- ¥ bin/pulsar initialize-cluster-metadata ¥ --cluster us-central ¥ --zookeeper zookeeper ¥ --global-zookeeper zookeeper ¥ --web-service-url http://broker.default.svc.cluster.local:8080/ ¥ --broker-service-url pulsar://broker.default.svc.cluster.local:6650/ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50

48.

Pulsarのデプロイ – 残りのコンポーネントのデプロイ # $ $ $ Bookie, kubectl kubectl kubectl Broker, 監視ツールのデプロイ apply -f bookie.yaml apply -f broker.yaml apply -f monitoring.yaml 以上でデプロイは完了 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 51

49.

デプロイ完了後のKubernetesダッシュボード Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 52

50.

Grafana Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 53

51.

Pulsarダッシュボード Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 54

52.

管理ツール ▪ 以下のコマンドで管理ツールを実行するためのコンソールにアクセス可能 $ kubectl exec pulsar-admin -it -- bash ▪ コンソールからパフォーマンステストも実行可能 $ bin/pulsar-perf produce --rate 150000 ¥ persistent://prop/us-central/ns/my-topic # 実行結果 2017-09-28 05:35:30,398 - INFO [main:PerformanceProducer@341] - Throughput produced: 149979.1 msg/s --1171.7 Mbit/s -- Latency: mean: 46.952 ms (後略) 毎秒15万メッセージ!レイテンシ50ms! 55 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

53.

Kafkaとの比較 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 56

54.

PulsarとKafka ▪ スケーラブルな分散Pub-Subメッセージングシステム ▪ 大量のデータを高速処理する事を目指し設計 ▪ ストリームデータの処理に使用可能 PulsarとKafkaには被る部分が多い ではPulsar持つアドバンテージとは何か? Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 57

55.

マルチテナントの実現しやすさ ACL job-queue-for-job-a job-queue-for-job-b Kafka ACL ↓ ACL log-stream-for-log-a log-stream-for-log-b プロパティ ACL Pulsar トピック名が階層化されていない service-a ネームスペース jobqueue logstream トピックごとに設定が必要 ACL デスティネーション ACL job-a job-b ACL Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 log-a トピック名が階層化されている ↓ 管理を利用者側に委任しやすい log-b 58

56.

Brokerの負荷分散 Pulsar ◯ 負荷に応じて自動的にBrokerが担当するトピックが移動 ◯ Brokerを増設した際、トピックの再割り当ては不要 Kafka △ Brokerが担当するパーティションは固定 △ Brokerを増設した際、パーティションの再割り当てが必要 PulsarはBrokerにデータを保持しないため、負荷分散が自動的に行われる Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 59

57.

クラスタ間のメッセージの複製 Pulsar ◯ ジオレプリケーション機能 ◯ Broker内部でReplicatorが自動的に起動 ○ 複製対象のトピックは利用者がネームスペース単位で指定可能 △ ミラーリング機能 △ MirrorMakerという独立したプロセスを起動 △ 複製対象のトピックをMirrorMaker起動時に指定する必要あり Kafka $ bin/kafka-mirror-maker.sh ¥ --consumer.config consumer.properties ¥ --producer.config producer.properties --whitelist my-topic Pulsarの方がオペレーションが容易でより柔軟な設定が可能 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 60

58.

Pulsarの近況 Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 61

59.

最近マージされた機能 ▪ Kafka client Java API wrapper › KafkaProducer / KafkaConsumerのインターフェースでPulsarを利用するためのラッパー ▪ End-to-Endでの暗号化 › メッセージをproduce時に暗号化 / consume時に復号する機能を追加 ▪ non-persistentなトピック › メッセージを永続化しないことでより高速なproduce / consumeが可能なトピック ▪ produce時の重複排除 › メッセージをproduceする際にBroker側で重複を排除する Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 62

60.

Cloud Native Landscape Projectに追加 Ⓒ 2017 Cloud Native Computing Foundation Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 63

61.

まとめ Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 64

62.

まとめ ▪ Pulsar › Pub-Subメッセージングを採用したメッセージキュー › 高速、スケーラブル、マルチテナント、ジオレプリケーション › 特に大規模なサービスでの利用に向く ▪ 公式ドキュメントはこちら: › 英語 : https://pulsar.incubator.apache.org/docs/latest/getting-started/LocalCluster/ › 日本語 : https://pulsar.incubator.apache.org/ja/getting-started/LocalCluster/ ▪ 質問やフィードバックはSlackまたはメーリングリストへ: › https://apache-pulsar.slack.com/ › users@pulsar.incubator.apache.org Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 65

63.

One more thing… Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 66

64.

Pulsarの日本ユーザ会ができました ▪ connpassでJapan Pulsar User Groupを作成しました › https://japan-pulsar-user-group.connpass.com/ ▪ 今後ハンズオンなどのイベントの開催を予定 ▪ Pulsarにご興味を持たれた方はぜひご参加ください Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 67