SlideShare une entreprise Scribd logo
1  sur  63
Télécharger pour lire hors ligne
メッセージキュー「Pulsar」のご紹介
〜ヤフーの導⼊事例を交えて〜
ヤフー株式会社 システム統括本部
志賀 優毅
2017/10/07
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2
⾃⼰紹介
志賀 優毅 (GitHub: yush1ga)
経歴:
▪ 2016/04 ヤフー株式会社新卒⼊社
▪ 2016/10~ メッセージキュー「Pulsar」の開発
▪ 2017/06~ 「Pulsar」のCommitter
登壇歴:
▪ 2017/05 GitHub Patchwork
▪ 2017/07 OSC 2017 Hokkaido
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
Pulsar
Yahoo! Inc. で開発された新しいPub-Subメッセージングシステム
(メッセージキュー)
▪ 2014秋 Yahoo! Inc. が開発を開始
▪ 2015春 Yahoo! Inc. で利⽤開始
▪ 2016/04 Yahoo! JAPANが開発に参加
▪ 2016/09 OSSとして公開
▪ 2017/01 Yahoo! JAPANで利⽤開始
▪ 2017/06 Apache Incubator Projectへ移管
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
アジェンダ
4
アジェンダ
1. メッセージキューについて
2. Pulsar導⼊の背景
3. インターフェースとアーキテクチャ
4. Pulsar on Kubernetes
5. Kafkaとの⽐較
6. Yahoo! JAPANの取り組み
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5
メッセージキューについて
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6
メッセージキュー(MQ)とは?
送信側
システム
受信側
システム
1
2345
メッセージキュー
6
システム間のメッセージのやり取りに使⽤されるソフトウェアの総称
▪ メッセージ … 他のシステムへの通知情報、処理して欲しいデータ、ログなど
▪ キュー … 先に⼊れたものから順に出てくるデータ構造
› メッセージの送信 = キューの最後尾にメッセージを追加する
› メッセージの受信 = キューの先頭からメッセージを取り出す
※ 送受信は⾮同期
MQにメッセージを
送信すると…
送った通りの順番で
相⼿に届く!
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7
メッセージキューを使わなかったら…
送信側
システム
受信側
システム
12
45
3
6
9 8 7 早くメッセージを
受け取って!
ちょっと今は無理…
フロントエンド
サーバ
バックエンド
サーバ
エンドユーザ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8
メッセージキューを使えば…
送信側
システム
受信側
システム
134
メッセージキュー
2
相⼿の状態は知らないけど
とりあえずキューに追加!
今は無理だけど⼿が
空いたら受け取るよ
フロントエンド
サーバ
バックエンド
サーバ
エンドユーザ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9
Pub-Subメッセージングとは?
トピックと呼ばれる宛先に対してメッセージの送受信が⾏われる⽅式
▪ メッセージの送信側 = Producer / Publisher / 出版者
▪ メッセージの受信側 = Consumer / Subscriber / 購読者
トピックProducer
Consumer 1
Consumer 2
Consumer 3あるトピックに対して
メッセージを送信すると… メッセージキュー
そのトピックを購読している
相⼿にメッセージが届く!
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10
Pub-Subメッセージングをしなかったら…
送信側
システム1
送信側
システム2
送信側
システム3
送信側
システム4
受信側
システム1
受信側
システム2
受信側
システム3
受信側
システム4
1対1の通信なら問題ないが、1対多や多対多になると複雑で⼤変
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11
Pub-Subメッセージングをすれば…
送信側
システム1
送信側
システム2
送信側
システム3
送信側
システム4
受信側
システム1
受信側
システム2
受信側
システム3
受信側
システム4
トピック1
トピック2
トピック3
送信側も受信側もお互いを意識する必要がない → シンプルかつスケーラブルに
メッセージキュー
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12
代表的なメッセージキュー
▪ Kafka
› 2011年にLinkedInから公開
› ⼤量のデータを⾼速に処理する事を⽬指し設計
› ストリームデータの処理によく使⽤される
▪ RabbitMQ
› 2007年にRabbit Technologiesから公開
› 通信プロトコルにAMQPを採⽤
› どちらかと⾔えばパフォーマンスよりも信頼性を重視
▪ ActiveMQ
› 2004年から使⽤されている歴史あるプロダクト
› 様々なプロトコルをサポートし、多数の⾔語から利⽤可能なのが強み
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13
Pulsar導⼊の背景
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14
全社プラットフォームとしてのMQを提供したい
■背景:
▪ ヤフーには100程度のサービスがあり、それぞれに開発/運⽤チームが存在
▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利⽤したい
しかし各チームそれぞれがMQを持つことになると
▪ 設備・運⽤コストが増え、本来やりたかったサービス開発に集中できない
▪ ナレッジが社内で分散する
→ サービス横断で利⽤可能な、全社プラットフォームとしてのMQを提供したい
■求められる要件:
1. ⾼いパフォーマンス / スケーラビリティ
2. 複数のサービスが同居できる
3. 複数のデータセンター間でのレプリケーション
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15
要件1 – ⾼いパフォーマンス / スケーラビリティ
▪ ヤフーでは100程度のサービスを提供しており、それぞれの利⽤者数も膨⼤
▪ 例えばトップページ(PC)の1⽇あたりの利⽤者数は…
› PV(Webページの参照回数):2億以上
› UB(ユニークなWebブラウザ数):3千万以上
▪ それを⽀えるMQも⼤量のメッセージを⾼速に処理できる事が求められる
▪ 利⽤者数増⼤の可能性もあるためスケーラブルである事も必須
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16
要件2 - 複数のサービスが同居できる
A⽤MQProducer
サービスA
Consumer B⽤MQProducer
サービスB
Consumer
C⽤MQProducer
サービスC
Consumer Producer
サービスD
ConsumerD⽤MQ
サービスごとに専⽤のMQを⽤意するのはコストが⼤きい
1つのMQに複数のサービスが同居できる(=マルチテナント)ことが求められる
ProducerサービスA Consumer
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
トピックD
サービスB
サービスC
サービスD
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17
要件3 – 複数のデータセンター間でのレプリケーション
データセンターA
Consumer
▪ ヤフーは地理的に離れた複数のデータセンターでサービスを展開
▪ 全てのデータセンターで同じメッセージを受けて同じ処理を実⾏したい場合:
› 全てのデータセンターにメッセージをPublish? → ⾮効率的、⼿間がかかる
› 特定のデータセンターのMQに全てのConsumerが接続? → レイテンシ⼤
→ MQ内で(データセンターをまたいで)レプリケーションして欲しい
Producer Consumer
Consumer
MQ
データセンターB
Consumer
Producer Consumer
Consumer
MQ
データセンターC
Consumer
Consumer
Consumer
ネットワークをまたぐこと
によりレイテンシが増加
各DCでPublishするのは
⾮効率
全DCでPublishするのは
⾮効率的
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18
Pulsarは前述の要件を全て満たす
1. ⾼いパフォーマンス / スケーラビリティ
2. 複数のサービスが同居できる
3. 複数のデータセンター間でのレプリケーション
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
特徴1 – ⾼速 / スケーラブル
Producer
⼤量のメッセージを⾼速に送受信可能
▪ Yahoo! Inc. での実績
› トピック数:140万
› メッセージ数:1,000億 [msg/day]
› メッセージの送信に要する時間(平均):5 [ms]
▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル
Consumer
Pulsar
Consumer
Pulsar
Producer
Producer
Producer
Producer
Producer
Producer
Consumer
Consumer
Consumer
Consumer
Consumer
スケール
アウト
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
特徴2 - マルチテナント
ProducerサービスA Consumer
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
トピックD
サービスB
サービスC
サービスD
他のサービスのトピックへの
アクセスは認証・認可機構で
ブロック
複数のサービスが1つのPulsarインスタンスを共⽤可能
▪ ヤフーでは全社で共有するインスタンスを専⽤のチームが提供・運⽤
▪ 各サービスはサービス開発に集中できる 各サービスが利⽤可能な
リソースを個別に設定可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21
特徴3 – ジオレプリケーション
Producer トピック
あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能
▪ Producerは⾃分と同じデータセンターのPulsarにメッセージを送ればいい
▪ Consumerは⾃分と同じデータセンターのPulsarからメッセージを受け取れる
Pulsar クラスタ A
Consumer
Consumer
Consumer
データセンターA
トピック Consumer
Consumer
Consumer
データセンターB
ジオレプリケーション
Pulsar クラスタ B
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22
利⽤事例 - コンテンツ⼊稿プラットフォーム
▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが⼊稿される
▪ ⼊稿サーバへのファイル転送を検知したら⼊稿ログをPulsarに流す
▪ トピックを購読している各サービスがファイルを取得して処理する
Producer
Consumer
トピック
サービスA
Pulsar
コンテンツの⼊稿ログ
をPulsarに流す
ファイルを取得
Consumer
サービスB
Consumer
サービスC
⼊稿サーバ
コンテンツ
プロバイダ
天気情報、地図情報、
ニュース、etc.
ログサーバ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23
利⽤事例 - Yahoo!メールのBEシステム
▪ メールの検索インデックスの⽣成/修正といった時間のかかるジョブを⾮同期に
処理するために利⽤
▪ ProducerはPulsarにジョブをキューイング
▪ ConsumerはPulsarからジョブを取り出して順番に処理
Producer
Consumer
Producer
トピック
ジョブを処理する
ハンドラ
メールBEサーバ
メールBEサーバ
Pulsar
リクエスト
ジョブを登録
忙しい時やジョブが
失敗した時は再登録
ジョブを
取り出して処理
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24
インターフェース
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25
Pulsarのインターフェース
▪ クライアントライブラリはJava, C++, Pythonを提供
▪ 他の⾔語からもWebSocket APIを利⽤可能
▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続
▪ さらにConsumerはサブスクリプションの名前を指定する必要がある
▪ ⽤途に応じて3種類のサブスクリプションモード(メッセージの配信⽅式)を選択可能
persistent://property/cluster/namespace/destination
サービス名など
データセンターなど
⽤途など
⽤途の詳細などメッセージを永続化
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26
サブスクリプションとは?
Producer
Consumer
Consumer
1
2345
Consumerがトピックの購読を開始した時に作成される購読の管理単位
▪ メッセージのキューはサブスクリプションごとに⽤意される
▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける
subscription-B
subscription-A
123
45
subscription-Aのキュー
subscription-Bのキュー
トピック
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27
サブスクリプションタイプ1 - Exclusive
Producer
Consumer
Consumer
Consumer
12345
12345
▪ 1つのサブスクリプションには1つのConsumerだけが接続可能
▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる
subscription-A
(Exclusive)
subscription-B
(Exclusive)
12345
トピック
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28
サブスクリプションタイプ2 - Shared
Producer
12345
Consumer
Consumer
Consumer
25
3
4
1
subscription
(Shared)
▪ 1つのサブスクリプションに複数のConsumerが接続可能
▪ メッセージは各Consumerにラウンドロビンで配信される
▪ 複数のシステムで処理を分担させたい場合に有⽤
トピック
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29
サブスクリプションタイプ3 - Failover
Producer
12345
Consumer
Consumer
Consumer
345
▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ
▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる
▪ システムの障害に備えたい場合に有⽤
subscription
(Failover)
トピック
2
1
1と2の受け取り後にダウン
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30
// 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());
Javaのサンプルコード - Producer
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31
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);
Javaのサンプルコード - Consumer
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32
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);
Javaのサンプルコード - サブスクリプションタイプの指定
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33
アーキテクチャ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34
システム構成図 Broker
‣ クライアントとのメッセージのやり取
りを担当
‣ 状態を持たないため増設が容易
Bookie
‣ BookKeeperのストレージノード
‣ トピックに送信されたメッセージやそ
れに関連するデータを保存
ZooKeeper
‣ トピックの管理に必要なメタ情報を保
存
‣ Local ZKはクラスタ内に閉じた情報を
担当
‣ Global ZKは全てのクラスタで共有すべ
き情報を担当
Producer Consumer
Broker 1 Broker 2 Broker 3
Bookie
1
Local
ZooKeeper
Bookie
2
Bookie
3
Pulsar クラスタ
Global
ZooKeeper
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35
BookKeeperとは?
▪ オープンソースの分散型ログストレージサービス
▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性
▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル
A
Bookie2 Bookie3
D
C
A
B
D
B
C
Bookie1
データの複製数は⾃由に変更可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36
BookKeeperのアーキテクチャ
▪ 先⾏書き込みログ
› ストレージに対する「操作」を先に書き込む
› ストレージへの反映は後からバックグラウンドで
› 途中で電源が落ちても「操作」を再開可能
› 容量より速度を重視したいので⾼速なSSDを使⽤
▪ 永続化ストレージ
› 連続するデータをまとめてキャッシュに読み込んでおく
› ⼀般にメッセージキューは連続するデータを扱うため効率がよい
› 速度より容量を重視したいので⼤容量なHDDを使⽤
速度と永続性の両⽴を実現
先⾏書き込みログ
(SSD)
永続化ストレージ
(HDD)
Bookie
書き込み
キャッシュ
先⾏読み込み
キャッシュ
Write
Read
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37
Pulsar on Kubernetes
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38
Kubernetesとは
▪ Dockerのオーケストレーションツール
▪ Dockerとは
› コンテナ型仮想化技術
コンテナ
App
ホストOS
ハードウェア
コンテナ
App
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39
Dockerの問題点の例
コンテナ
App
コンテナ
App
Private IP
ホスト1
コンテナ
App
コンテナ
App
😇❓
ホスト2
Private IP
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40
Kubernetesを使うと
コンテナ
App
コンテナ
App
Cluster IP
Kubernetesクラスタ (複数台のホストから構成)
コンテナ
App
コンテナ
App
Cluster IPCluster IP
あたかも1台の実⾏環境であるかのように利⽤可能
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41
Pulsar on Kubernetes
▪ Pulsarは
› Google Container Engine (GKE)
› AWS
› 独⾃
のKubernetesクラスタに簡単にデプロイ可能
▪ GKEでのデプロイ⼿順を紹介
▪ 詳細な⼿順はこちら
https://pulsar.incubator.apache.org/docs/latest/deployment/Kubernetes
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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. 無断引用・転載禁止 43
Google Cloud Platformの準備
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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. 無断引用・転載禁止 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. 無断引用・転載禁止 46
Pulsarのデプロイ – ZooKeeperのデプロイ
# yaml定義のあるディレクトリに移動
$ cd /path/to/incubator-pulsar/kubernetes
/google-container-engine
# デプロイ
$ kubectl apply -f zookeeper.yaml
# クラスタメタデータの初期化
$ 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. 無断引用・転載禁止 47
Pulsarのデプロイ – 残りのコンポーネントのデプロイ
# bookie, broker, 監視ツールのデプロイ
$ kubectl apply -f bookie.yaml
$ kubectl apply -f broker.yaml
$ kubectl apply -f monitoring.yaml
以上でデプロイは完了
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48
デプロイ完了後のKubernetesダッシュボード
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 49
Grafana
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50
Pulsarダッシュボード
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能
▪ コンソールからパフォーマンステストも実⾏可能
51
管理ツール
$ kubectl exec pulsar-admin -it -- bash
$ bin/pulsar-perf produce persistent://prop/us-
central/ns/my-topic --rate 150000
# 実行結果
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 (後略)
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能
▪ コンソールからパフォーマンステストも実⾏可能
52
管理ツール
$ kubectl exec pulsar-admin -it -- bash
$ bin/pulsar-perf produce persistent://prop/us-
central/ns/my-topic --rate 150000
# 実行結果
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!
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 53
Kafkaとの⽐較
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 54
Kafkaとは
▪ スケーラブルな分散Pub-Subメッセージングシステム
▪ 2011年にLinkedInから公開
▪ ⼤量のデータを⾼速処理する事を⽬指し設計
▪ ストリームデータの処理によく使⽤される
Pulsarと被る部分が多い
Pulsarのアドバンテージとは?
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 55
マルチテナントの実現しやすさ
Pulsar ◯トピックが階層化されているため、ネームスペース単位で設定変更が
可能で、設定変更作業を利⽤者側に委任しやすい
Kafka △トピックは階層化されておらず、トピックごとに設定が必要
Pulsarはマルチテナントを実現しやすいよう設計されている
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 56
トピック構造の違い
log-stream-for-log-a
job-queue-for-job-a
job-queue-for-job-b
service-a
job-
queue
job-a
log-
stream
job-b
log-a
log-b
Property
log-stream-for-log-b
Namespace Destination
Kafka
Pulsar
ACL
ACL
ACL
ACL
ACL
ACL
ACL
トピックごとに
設定が必要
ネームスペースの
設定を継承
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 57
Brokerの負荷分散
Pulsar ◯負荷に応じて⾃動的にBrokerが担当するトピックが移動
◯Brokerを増設した際、トピックの再割り当ては不要
Kafka △Brokerが担当するパーティションは固定
△Brokerを増設した際、パーティションの再割り当てが必要
PulsarはBrokerにデータを保持しないため、負荷分散が⾃動的に⾏われる
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 58
Yahoo! JAPANの取り組み
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 59
Yahoo! JAPANのPulsarに対する取り組み
▪ C++クライアントライブラリのOSS化
▪ Athenz⽤認証プラグインのOSS化
(※Athenzはロールベースの認証認可システムを実現するOSS)
▪ Spark Streamingのカスタムレシーバ作成
▪ ワイルドカードを⽤いた認可機能の追加
▪ ドキュメントの⽇本語化
▪ その他細かいバグ修正や機能追加
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 60
まとめ
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
まとめ
61
まとめ
▪ Pulsar
› 分散Pub-Subメッセージングシステム
› ⾼速、スケーラブル、マルチテナント、ジオレプリケーション
› 特に⼤規模なサービスでの利⽤に向く
▪ コード・ドキュメントはhttps://pulsar.incubator.apache.orgにあります
▪ ⽇本語ドキュメント もあります
▪ 質問やフィードバックはメーリングリストへ:
› users@pulsar.incubator.apache.org
› dev@pulsar.incubator.apache.org
Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 62
Pulsarの近況 - 最近マージされた機能
▪ Kafka client Java API wrapper
› KafkaProducer / KafkaConsumerのインターフェイスでPulsarを利⽤するためのラッパー
▪ End-to-Endでの暗号化
› メッセージをproduce時に暗号化 / consume時に復号する機能を追加
▪ non-persistentなトピック
› メッセージを永続化しないことでより⾼速なproduce / consumeを可能にするトピック
▪ produce時の重複排除
› メッセージをproduceする際にBroker側で重複を排除する
メッセージキュー「Pulsar」の紹介 @OSC_20171007

Contenu connexe

Tendances

AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2AbemaTV, Inc.
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Yuki Gonda
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までHitoshi Ikemoto
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)Hiroshi Tokumaru
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Cloudera Japan
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Rac rac one_node説明資料
Rac rac one_node説明資料Rac rac one_node説明資料
Rac rac one_node説明資料Hiroki Morita
 
Azure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge StrategyAzure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge StrategyTakeshi Fukuhara
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceToru Makabe
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザNoritaka Sekiyama
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 

Tendances (20)

AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
 
Metaspace
MetaspaceMetaspace
Metaspace
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-
 
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化までSAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
SAP on Azure インフラ設計解説:HA/DR、Backupからパフォーマンス最適化まで
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
DSC 再入門
DSC 再入門DSC 再入門
DSC 再入門
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
M04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイドM04_失敗しないための Azure Virtual Desktop 設計ガイド
M04_失敗しないための Azure Virtual Desktop 設計ガイド
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理Apache Hadoop YARNとマルチテナントにおけるリソース管理
Apache Hadoop YARNとマルチテナントにおけるリソース管理
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Rac rac one_node説明資料
Rac rac one_node説明資料Rac rac one_node説明資料
Rac rac one_node説明資料
 
Azure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge StrategyAzure Data Box Family Overview and Microsoft Intelligent Edge Strategy
Azure Data Box Family Overview and Microsoft Intelligent Edge Strategy
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 

En vedette

メッセージキュー「Pulsar」の紹介 @JJUG_20170927
メッセージキュー「Pulsar」の紹介 @JJUG_20170927メッセージキュー「Pulsar」の紹介 @JJUG_20170927
メッセージキュー「Pulsar」の紹介 @JJUG_20170927Nozomi Kurihara
 
Raspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトRaspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトTakayuki Konishi
 
自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介Takeshi Take
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanAkihiko Horiuchi
 
サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方Yuki Morishita
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜Jumpei Miyata
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方Yuki Morishita
 

En vedette (11)

メッセージキュー「Pulsar」の紹介 @JJUG_20170927
メッセージキュー「Pulsar」の紹介 @JJUG_20170927メッセージキュー「Pulsar」の紹介 @JJUG_20170927
メッセージキュー「Pulsar」の紹介 @JJUG_20170927
 
Raspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライトRaspberry PiとActiveMQで作るセンサーライト
Raspberry PiとActiveMQで作るセンサーライト
 
自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介自作仮想化基盤 「n0stack」の紹介
自作仮想化基盤 「n0stack」の紹介
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue Ocean
 
サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 

Similaire à メッセージキュー「Pulsar」の紹介 @OSC_20171007

ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118Nozomi Kurihara
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in TokyoKyosuke Inoue
 
20150613 Azure最新Update
20150613 Azure最新Update20150613 Azure最新Update
20150613 Azure最新UpdateKeiji Kamebuchi
 
AzureでLaravel動かしてみた
AzureでLaravel動かしてみたAzureでLaravel動かしてみた
AzureでLaravel動かしてみたKeiji Kamebuchi
 
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Nozomi Kurihara
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Nozomi Kurihara
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoKyosuke Inoue
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介OSSラボ株式会社
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform拓将 平林
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
20151024 Azureデータストア概要
20151024 Azureデータストア概要20151024 Azureデータストア概要
20151024 Azureデータストア概要Keiji Kamebuchi
 
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築Tomo-o Kubo
 
OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化Nobuyori Takahashi
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるYou&I
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 

Similaire à メッセージキュー「Pulsar」の紹介 @OSC_20171007 (20)

ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
 
Azure &lt;3 Openness
Azure &lt;3 OpennessAzure &lt;3 Openness
Azure &lt;3 Openness
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
20150613 Azure最新Update
20150613 Azure最新Update20150613 Azure最新Update
20150613 Azure最新Update
 
AzureでLaravel動かしてみた
AzureでLaravel動かしてみたAzureでLaravel動かしてみた
AzureでLaravel動かしてみた
 
Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~
 
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
Apache Pulsarの近況 & meetup 北京の参加報告 @PulsarMeetupJapan_20190904
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in Tokyo
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
 
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
20151024 Azureデータストア概要
20151024 Azureデータストア概要20151024 Azureデータストア概要
20151024 Azureデータストア概要
 
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築
JNSA西日本支部 技術研究WG AWSを使ったセキュアなシステム構築
 
OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみる
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 

Dernier

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Dernier (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

メッセージキュー「Pulsar」の紹介 @OSC_20171007

  • 2. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 ⾃⼰紹介 志賀 優毅 (GitHub: yush1ga) 経歴: ▪ 2016/04 ヤフー株式会社新卒⼊社 ▪ 2016/10~ メッセージキュー「Pulsar」の開発 ▪ 2017/06~ 「Pulsar」のCommitter 登壇歴: ▪ 2017/05 GitHub Patchwork ▪ 2017/07 OSC 2017 Hokkaido
  • 3. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3 Pulsar Yahoo! Inc. で開発された新しいPub-Subメッセージングシステム (メッセージキュー) ▪ 2014秋 Yahoo! Inc. が開発を開始 ▪ 2015春 Yahoo! Inc. で利⽤開始 ▪ 2016/04 Yahoo! JAPANが開発に参加 ▪ 2016/09 OSSとして公開 ▪ 2017/01 Yahoo! JAPANで利⽤開始 ▪ 2017/06 Apache Incubator Projectへ移管
  • 4. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 アジェンダ 4 アジェンダ 1. メッセージキューについて 2. Pulsar導⼊の背景 3. インターフェースとアーキテクチャ 4. Pulsar on Kubernetes 5. Kafkaとの⽐較 6. Yahoo! JAPANの取り組み
  • 5. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5 メッセージキューについて
  • 6. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6 メッセージキュー(MQ)とは? 送信側 システム 受信側 システム 1 2345 メッセージキュー 6 システム間のメッセージのやり取りに使⽤されるソフトウェアの総称 ▪ メッセージ … 他のシステムへの通知情報、処理して欲しいデータ、ログなど ▪ キュー … 先に⼊れたものから順に出てくるデータ構造 › メッセージの送信 = キューの最後尾にメッセージを追加する › メッセージの受信 = キューの先頭からメッセージを取り出す ※ 送受信は⾮同期 MQにメッセージを 送信すると… 送った通りの順番で 相⼿に届く!
  • 7. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7 メッセージキューを使わなかったら… 送信側 システム 受信側 システム 12 45 3 6 9 8 7 早くメッセージを 受け取って! ちょっと今は無理… フロントエンド サーバ バックエンド サーバ エンドユーザ
  • 8. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8 メッセージキューを使えば… 送信側 システム 受信側 システム 134 メッセージキュー 2 相⼿の状態は知らないけど とりあえずキューに追加! 今は無理だけど⼿が 空いたら受け取るよ フロントエンド サーバ バックエンド サーバ エンドユーザ
  • 9. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9 Pub-Subメッセージングとは? トピックと呼ばれる宛先に対してメッセージの送受信が⾏われる⽅式 ▪ メッセージの送信側 = Producer / Publisher / 出版者 ▪ メッセージの受信側 = Consumer / Subscriber / 購読者 トピックProducer Consumer 1 Consumer 2 Consumer 3あるトピックに対して メッセージを送信すると… メッセージキュー そのトピックを購読している 相⼿にメッセージが届く!
  • 10. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10 Pub-Subメッセージングをしなかったら… 送信側 システム1 送信側 システム2 送信側 システム3 送信側 システム4 受信側 システム1 受信側 システム2 受信側 システム3 受信側 システム4 1対1の通信なら問題ないが、1対多や多対多になると複雑で⼤変
  • 11. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11 Pub-Subメッセージングをすれば… 送信側 システム1 送信側 システム2 送信側 システム3 送信側 システム4 受信側 システム1 受信側 システム2 受信側 システム3 受信側 システム4 トピック1 トピック2 トピック3 送信側も受信側もお互いを意識する必要がない → シンプルかつスケーラブルに メッセージキュー
  • 12. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12 代表的なメッセージキュー ▪ Kafka › 2011年にLinkedInから公開 › ⼤量のデータを⾼速に処理する事を⽬指し設計 › ストリームデータの処理によく使⽤される ▪ RabbitMQ › 2007年にRabbit Technologiesから公開 › 通信プロトコルにAMQPを採⽤ › どちらかと⾔えばパフォーマンスよりも信頼性を重視 ▪ ActiveMQ › 2004年から使⽤されている歴史あるプロダクト › 様々なプロトコルをサポートし、多数の⾔語から利⽤可能なのが強み
  • 13. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13 Pulsar導⼊の背景
  • 14. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14 全社プラットフォームとしてのMQを提供したい ■背景: ▪ ヤフーには100程度のサービスがあり、それぞれに開発/運⽤チームが存在 ▪ バックエンドの処理(システム連携、データ解析 etc.)にMQを利⽤したい しかし各チームそれぞれがMQを持つことになると ▪ 設備・運⽤コストが増え、本来やりたかったサービス開発に集中できない ▪ ナレッジが社内で分散する → サービス横断で利⽤可能な、全社プラットフォームとしてのMQを提供したい ■求められる要件: 1. ⾼いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション
  • 15. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15 要件1 – ⾼いパフォーマンス / スケーラビリティ ▪ ヤフーでは100程度のサービスを提供しており、それぞれの利⽤者数も膨⼤ ▪ 例えばトップページ(PC)の1⽇あたりの利⽤者数は… › PV(Webページの参照回数):2億以上 › UB(ユニークなWebブラウザ数):3千万以上 ▪ それを⽀えるMQも⼤量のメッセージを⾼速に処理できる事が求められる ▪ 利⽤者数増⼤の可能性もあるためスケーラブルである事も必須
  • 16. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16 要件2 - 複数のサービスが同居できる A⽤MQProducer サービスA Consumer B⽤MQProducer サービスB Consumer C⽤MQProducer サービスC Consumer Producer サービスD ConsumerD⽤MQ サービスごとに専⽤のMQを⽤意するのはコストが⼤きい 1つのMQに複数のサービスが同居できる(=マルチテナント)ことが求められる ProducerサービスA Consumer Producer Consumer Producer Consumer Producer Consumer トピックA トピックB トピックC トピックD サービスB サービスC サービスD
  • 17. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 要件3 – 複数のデータセンター間でのレプリケーション データセンターA Consumer ▪ ヤフーは地理的に離れた複数のデータセンターでサービスを展開 ▪ 全てのデータセンターで同じメッセージを受けて同じ処理を実⾏したい場合: › 全てのデータセンターにメッセージをPublish? → ⾮効率的、⼿間がかかる › 特定のデータセンターのMQに全てのConsumerが接続? → レイテンシ⼤ → MQ内で(データセンターをまたいで)レプリケーションして欲しい Producer Consumer Consumer MQ データセンターB Consumer Producer Consumer Consumer MQ データセンターC Consumer Consumer Consumer ネットワークをまたぐこと によりレイテンシが増加 各DCでPublishするのは ⾮効率 全DCでPublishするのは ⾮効率的
  • 18. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18 Pulsarは前述の要件を全て満たす 1. ⾼いパフォーマンス / スケーラビリティ 2. 複数のサービスが同居できる 3. 複数のデータセンター間でのレプリケーション
  • 19. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19 特徴1 – ⾼速 / スケーラブル Producer ⼤量のメッセージを⾼速に送受信可能 ▪ Yahoo! Inc. での実績 › トピック数:140万 › メッセージ数:1,000億 [msg/day] › メッセージの送信に要する時間(平均):5 [ms] ▪ サーバの台数を増やせばその分だけキャパシティを増やせる → スケーラブル Consumer Pulsar Consumer Pulsar Producer Producer Producer Producer Producer Producer Consumer Consumer Consumer Consumer Consumer スケール アウト
  • 20. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20 特徴2 - マルチテナント ProducerサービスA Consumer Producer Consumer Producer Consumer Producer Consumer トピックA トピックB トピックC トピックD サービスB サービスC サービスD 他のサービスのトピックへの アクセスは認証・認可機構で ブロック 複数のサービスが1つのPulsarインスタンスを共⽤可能 ▪ ヤフーでは全社で共有するインスタンスを専⽤のチームが提供・運⽤ ▪ 各サービスはサービス開発に集中できる 各サービスが利⽤可能な リソースを個別に設定可能
  • 21. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21 特徴3 – ジオレプリケーション Producer トピック あるデータセンターのトピックに送信したメッセージを他のDCに複製・配信可能 ▪ Producerは⾃分と同じデータセンターのPulsarにメッセージを送ればいい ▪ Consumerは⾃分と同じデータセンターのPulsarからメッセージを受け取れる Pulsar クラスタ A Consumer Consumer Consumer データセンターA トピック Consumer Consumer Consumer データセンターB ジオレプリケーション Pulsar クラスタ B
  • 22. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22 利⽤事例 - コンテンツ⼊稿プラットフォーム ▪ ヤフーには外部のコンテンツプロバイダから様々なファイルが⼊稿される ▪ ⼊稿サーバへのファイル転送を検知したら⼊稿ログをPulsarに流す ▪ トピックを購読している各サービスがファイルを取得して処理する Producer Consumer トピック サービスA Pulsar コンテンツの⼊稿ログ をPulsarに流す ファイルを取得 Consumer サービスB Consumer サービスC ⼊稿サーバ コンテンツ プロバイダ 天気情報、地図情報、 ニュース、etc. ログサーバ
  • 23. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23 利⽤事例 - Yahoo!メールのBEシステム ▪ メールの検索インデックスの⽣成/修正といった時間のかかるジョブを⾮同期に 処理するために利⽤ ▪ ProducerはPulsarにジョブをキューイング ▪ ConsumerはPulsarからジョブを取り出して順番に処理 Producer Consumer Producer トピック ジョブを処理する ハンドラ メールBEサーバ メールBEサーバ Pulsar リクエスト ジョブを登録 忙しい時やジョブが 失敗した時は再登録 ジョブを 取り出して処理
  • 24. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 インターフェース
  • 25. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 Pulsarのインターフェース ▪ クライアントライブラリはJava, C++, Pythonを提供 ▪ 他の⾔語からもWebSocket APIを利⽤可能 ▪ Producer/Consumerは次のようなトピックURIを指定してPulsarに接続 ▪ さらにConsumerはサブスクリプションの名前を指定する必要がある ▪ ⽤途に応じて3種類のサブスクリプションモード(メッセージの配信⽅式)を選択可能 persistent://property/cluster/namespace/destination サービス名など データセンターなど ⽤途など ⽤途の詳細などメッセージを永続化
  • 26. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26 サブスクリプションとは? Producer Consumer Consumer 1 2345 Consumerがトピックの購読を開始した時に作成される購読の管理単位 ▪ メッセージのキューはサブスクリプションごとに⽤意される ▪ Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける subscription-B subscription-A 123 45 subscription-Aのキュー subscription-Bのキュー トピック
  • 27. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27 サブスクリプションタイプ1 - Exclusive Producer Consumer Consumer Consumer 12345 12345 ▪ 1つのサブスクリプションには1つのConsumerだけが接続可能 ▪ 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる subscription-A (Exclusive) subscription-B (Exclusive) 12345 トピック
  • 28. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28 サブスクリプションタイプ2 - Shared Producer 12345 Consumer Consumer Consumer 25 3 4 1 subscription (Shared) ▪ 1つのサブスクリプションに複数のConsumerが接続可能 ▪ メッセージは各Consumerにラウンドロビンで配信される ▪ 複数のシステムで処理を分担させたい場合に有⽤ トピック
  • 29. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29 サブスクリプションタイプ3 - Failover Producer 12345 Consumer Consumer Consumer 345 ▪ 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ ▪ そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる ▪ システムの障害に備えたい場合に有⽤ subscription (Failover) トピック 2 1 1と2の受け取り後にダウン
  • 30. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30 // 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()); Javaのサンプルコード - Producer
  • 31. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31 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); Javaのサンプルコード - Consumer
  • 32. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32 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); Javaのサンプルコード - サブスクリプションタイプの指定
  • 33. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33 アーキテクチャ
  • 34. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34 システム構成図 Broker ‣ クライアントとのメッセージのやり取 りを担当 ‣ 状態を持たないため増設が容易 Bookie ‣ BookKeeperのストレージノード ‣ トピックに送信されたメッセージやそ れに関連するデータを保存 ZooKeeper ‣ トピックの管理に必要なメタ情報を保 存 ‣ Local ZKはクラスタ内に閉じた情報を 担当 ‣ Global ZKは全てのクラスタで共有すべ き情報を担当 Producer Consumer Broker 1 Broker 2 Broker 3 Bookie 1 Local ZooKeeper Bookie 2 Bookie 3 Pulsar クラスタ Global ZooKeeper
  • 35. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35 BookKeeperとは? ▪ オープンソースの分散型ログストレージサービス ▪ データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性 ▪ ノード数を増やせば容量と速度の向上が可能 → スケーラブル A Bookie2 Bookie3 D C A B D B C Bookie1 データの複製数は⾃由に変更可能
  • 36. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36 BookKeeperのアーキテクチャ ▪ 先⾏書き込みログ › ストレージに対する「操作」を先に書き込む › ストレージへの反映は後からバックグラウンドで › 途中で電源が落ちても「操作」を再開可能 › 容量より速度を重視したいので⾼速なSSDを使⽤ ▪ 永続化ストレージ › 連続するデータをまとめてキャッシュに読み込んでおく › ⼀般にメッセージキューは連続するデータを扱うため効率がよい › 速度より容量を重視したいので⼤容量なHDDを使⽤ 速度と永続性の両⽴を実現 先⾏書き込みログ (SSD) 永続化ストレージ (HDD) Bookie 書き込み キャッシュ 先⾏読み込み キャッシュ Write Read
  • 37. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37 Pulsar on Kubernetes
  • 38. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 38 Kubernetesとは ▪ Dockerのオーケストレーションツール ▪ Dockerとは › コンテナ型仮想化技術 コンテナ App ホストOS ハードウェア コンテナ App
  • 39. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 39 Dockerの問題点の例 コンテナ App コンテナ App Private IP ホスト1 コンテナ App コンテナ App 😇❓ ホスト2 Private IP
  • 40. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 40 Kubernetesを使うと コンテナ App コンテナ App Cluster IP Kubernetesクラスタ (複数台のホストから構成) コンテナ App コンテナ App Cluster IPCluster IP あたかも1台の実⾏環境であるかのように利⽤可能
  • 41. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 41 Pulsar on Kubernetes ▪ Pulsarは › Google Container Engine (GKE) › AWS › 独⾃ のKubernetesクラスタに簡単にデプロイ可能 ▪ GKEでのデプロイ⼿順を紹介 ▪ 詳細な⼿順はこちら https://pulsar.incubator.apache.org/docs/latest/deployment/Kubernetes
  • 42. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 42 Google Cloud Platformの準備 ▪ 事前準備として以下が必要 › cloud.google.comにサインアップできるGoogle Cloud Platformアカウント › 既存のCloud Platformプロジェクト › Google Cloud SDK (特にgcloudとkubectlツール) 無料トライアルアカウントでも可
  • 43. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 43 Google Cloud Platformの準備
  • 44. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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の数 ※無料トライアルアカウント⽤に ドキュメントよりスペックを下げています
  • 45. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 45 Kubernetesダッシュボードの表⽰ $ gcloud container clusters get-credentials pulsar-gke-cluster --zone=us-central1-a -- project=<project-id> $ kubectl proxy 上記のコマンド⼊⼒後 http://localhost:8001/uiにブラウザからアクセス可
  • 46. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 46 Pulsarのデプロイ – ZooKeeperのデプロイ # yaml定義のあるディレクトリに移動 $ cd /path/to/incubator-pulsar/kubernetes /google-container-engine # デプロイ $ kubectl apply -f zookeeper.yaml # クラスタメタデータの初期化 $ 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/
  • 47. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 47 Pulsarのデプロイ – 残りのコンポーネントのデプロイ # bookie, broker, 監視ツールのデプロイ $ kubectl apply -f bookie.yaml $ kubectl apply -f broker.yaml $ kubectl apply -f monitoring.yaml 以上でデプロイは完了
  • 48. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 48 デプロイ完了後のKubernetesダッシュボード
  • 49. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 49 Grafana
  • 50. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 50 Pulsarダッシュボード
  • 51. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 ▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能 ▪ コンソールからパフォーマンステストも実⾏可能 51 管理ツール $ kubectl exec pulsar-admin -it -- bash $ bin/pulsar-perf produce persistent://prop/us- central/ns/my-topic --rate 150000 # 実行結果 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 (後略)
  • 52. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 ▪ 以下のコマンドから管理ツールを実⾏するためのコンソールにアクセス可能 ▪ コンソールからパフォーマンステストも実⾏可能 52 管理ツール $ kubectl exec pulsar-admin -it -- bash $ bin/pulsar-perf produce persistent://prop/us- central/ns/my-topic --rate 150000 # 実行結果 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!
  • 53. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 53 Kafkaとの⽐較
  • 54. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 54 Kafkaとは ▪ スケーラブルな分散Pub-Subメッセージングシステム ▪ 2011年にLinkedInから公開 ▪ ⼤量のデータを⾼速処理する事を⽬指し設計 ▪ ストリームデータの処理によく使⽤される Pulsarと被る部分が多い Pulsarのアドバンテージとは?
  • 55. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 55 マルチテナントの実現しやすさ Pulsar ◯トピックが階層化されているため、ネームスペース単位で設定変更が 可能で、設定変更作業を利⽤者側に委任しやすい Kafka △トピックは階層化されておらず、トピックごとに設定が必要 Pulsarはマルチテナントを実現しやすいよう設計されている
  • 56. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 56 トピック構造の違い log-stream-for-log-a job-queue-for-job-a job-queue-for-job-b service-a job- queue job-a log- stream job-b log-a log-b Property log-stream-for-log-b Namespace Destination Kafka Pulsar ACL ACL ACL ACL ACL ACL ACL トピックごとに 設定が必要 ネームスペースの 設定を継承
  • 57. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 57 Brokerの負荷分散 Pulsar ◯負荷に応じて⾃動的にBrokerが担当するトピックが移動 ◯Brokerを増設した際、トピックの再割り当ては不要 Kafka △Brokerが担当するパーティションは固定 △Brokerを増設した際、パーティションの再割り当てが必要 PulsarはBrokerにデータを保持しないため、負荷分散が⾃動的に⾏われる
  • 58. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 58 Yahoo! JAPANの取り組み
  • 59. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 59 Yahoo! JAPANのPulsarに対する取り組み ▪ C++クライアントライブラリのOSS化 ▪ Athenz⽤認証プラグインのOSS化 (※Athenzはロールベースの認証認可システムを実現するOSS) ▪ Spark Streamingのカスタムレシーバ作成 ▪ ワイルドカードを⽤いた認可機能の追加 ▪ ドキュメントの⽇本語化 ▪ その他細かいバグ修正や機能追加
  • 60. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 60 まとめ
  • 61. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 まとめ 61 まとめ ▪ Pulsar › 分散Pub-Subメッセージングシステム › ⾼速、スケーラブル、マルチテナント、ジオレプリケーション › 特に⼤規模なサービスでの利⽤に向く ▪ コード・ドキュメントはhttps://pulsar.incubator.apache.orgにあります ▪ ⽇本語ドキュメント もあります ▪ 質問やフィードバックはメーリングリストへ: › users@pulsar.incubator.apache.org › dev@pulsar.incubator.apache.org
  • 62. Copyright (C) 2017 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 62 Pulsarの近況 - 最近マージされた機能 ▪ Kafka client Java API wrapper › KafkaProducer / KafkaConsumerのインターフェイスでPulsarを利⽤するためのラッパー ▪ End-to-Endでの暗号化 › メッセージをproduce時に暗号化 / consume時に復号する機能を追加 ▪ non-persistentなトピック › メッセージを永続化しないことでより⾼速なproduce / consumeを可能にするトピック ▪ produce時の重複排除 › メッセージをproduceする際にBroker側で重複を排除する