SlideShare une entreprise Scribd logo
1  sur  68
Apache Pulsar ハンズオン
Japan Pulsar User Group
2018/02/26
Japan Pulsar User Group
Japan Pulsar User Groupにご参加ください!
https://japan-pulsar-user-group.connpass.com/
3
スタッフ紹介
栗原 望(発表者)
坂本 雅宏
酒井 宏行
志賀 優毅
北條 正和
4
準備
資料: https://github.com/nkurihar/pulsar-handson
1. お使いのPCにdocker/docker-composeを導入してください:
• DockerComunityEdition: https://www.docker.com/community-edition
※OSが古いなどでDockerComunityEditionが使えない場合下記を導入してください:
• DockerToolBox: https://docs.docker.com/toolbox/overview/
• DockerCompose: https://docs.docker.com/compose/install/
2. apachepulsar/pulsarとapachepulsar/pulsar-dashboardをpullしておいてください:
3. nkurihar/pulsar-handson をcloneしておいてください(要git)
$ docker pull apachepulsar/pulsar
$ docker pull apachepulsar/pulsar-dashboard
$ git clone https://github.com/nkurihar/pulsar-handson.git
$ cd pulsar-handson
5
Apache Pulsar
Yahoo! Inc.(現:Oath)で開発されたPub-Subメッセージングプラットフォーム
• Pub-Subメッセージングモデルを採用
• 特徴
• 高速
• スケーラブル
• マルチテナント
• ジオレプリケーション
• 歴史
• 2014秋 Yahoo! Inc. が開発
• 2016/09 OSSとして公開
• 2017/06 Apache Software Foundationに移管(Incubatorプロジェクト)
6
このハンズオンのゴール
• Pub-Subメッセージングの利用用途が分かる
• Pulsarが起動できる
• Pulsarのトピックの構造を理解し、メッセージの送受信ができる
• Pulsarのトピックにおいてどのようにメッセージが削除/保持されているかが分かる
実際にPulsarを動かしながら仕組みを理解する!
アジェンダ
7
アジェンダ
1. Pub-Subメッセージングとは?
2. Pulsarのアーキテクチャ
3. Yahoo! JAPANにおける利用事例
4. Pulsarを起動してみよう
--- 休憩 ---
5. トピック / サブスクリプション
6. Backlog / Retention
7. GeoReplication
8. 認証認可(※時間があれば)
8
Pub-Subメッセージングとは?
9
メッセージキュー(MQ)とは?
送信側
システム
受信側
システム
1
2345
メッセージキュー
6
MQ = “メッセージ”を溜めておく”キュー”
• メッセージ … 他のシステムへの通知情報、処理して欲しいデータ、ログ etc.
• キュー … 先に入れたものから順に出てくるデータ構造
MQを使う利点
→ メッセージを非同期に、順番通り、確実に届けることができる
MQにメッセージを
送信すると…
送った通りの順番で
非同期に相手に届く!
10
メッセージキューを使わなかったら…
送信側
システム
受信側
システム
23
56
4
7
10 9 8
フロントエンド
サーバ
バックエンド
サーバ
エンドユーザの
Webブラウザなど
リクエストがいっぱい来てるよ!
早く次のメッセージ受け取って!
今は忙しいんだ
後にしてくれ
1
応答が全然
返ってこない…
11
メッセージキューを使えば…
245
メッセージキュー
3
ちゃんとリクエストは
受け付けてくれたみたい
送信側
システム
フロントエンド
サーバ
受信側
システム
バックエンド
サーバ
1
エンドユーザの
Webブラウザなど
とりあえずキューに追加だけ
しておいてユーザに応答!
手が空き次第
順番に受け取っていくよ
12
Pub-Subメッセージングとは?
トピックと呼ばれる宛先に対してメッセージの送受信が行われる方式
• メッセージの送信側 = Producer(Publisher / 出版者)
• メッセージの受信側 = Consumer(Subscriber / 購読者)
トピックProducer
Consumer 1
Consumer 2
Consumer 3
メッセージキューあるトピックに対して
メッセージを送信すると…
そのトピックを購読している
相手にメッセージが届く!
13
Pub-Subメッセージングをしなかったら…
送信側
システム1
送信側
システム2
送信側
システム3
送信側
システム4
受信側
システム1
受信側
システム2
受信側
システム3
受信側
システム4
1対1の通信なら問題ないが、1対多や多対多になると複雑で管理も大変
14
Pub-Subメッセージングをすれば…
トピック1
トピック2
トピック3
送信側も受信側もお互いを意識する必要がない → シンプルかつスケーラブルに
送信側
システム1
送信側
システム2
送信側
システム3
送信側
システム4
受信側
システム1
受信側
システム2
受信側
システム3
受信側
システム4
メッセージキュー
15
代表的なメッセージキュー
• Kafka
• 2011年にLinkedInから公開
• 大量のデータを高速に処理する事を目指し設計
• ストリームデータの処理によく使用される
• RabbitMQ
• 2007年にRabbit Technologiesから公開
• 通信プロトコルにAMQPを採用
• どちらかと言えばパフォーマンスよりも信頼性を重視
• ActiveMQ
• 2004年から使用されている歴史あるプロダクト
• 様々なプロトコルをサポートし、多数の言語から利用可能なのが強み
16
Pulsarのアーキテクチャ
17
システム構成図 ■Broker
• クライアントとのメッセージの
やり取りを担当
■Bookie
• トピックに送信されたメッセージや
それに関連するデータを保存
■ZooKeeper
• トピックの管理に必要なメタ情報を
保存
• Local ZKはクラスタ内に閉じた
情報を担当
• Global ZKは全てのクラスタで
共有すべき情報を担当
Producer Consumer
Broker 1 Broker 2 Broker 3
Bookie
1
Local
ZooKeeper
Bookie
2
Bookie
3
Pulsar クラスタ
Global
ZooKeeper
18
Apache BookKeeperとは?
• オープンソースの分散型ログストレージサービス
• データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性
• ノード数を増やせば容量と速度の向上が可能 → スケーラブル
A
Bookie2 Bookie3
D
C
A
B
D
B
C
Bookie1
データの複製数は自由に変更可能
Apache BookKeeperはApache Software Foundationの
米国およびその他の国における登録商標または商標です。
19
BookKeeperのアーキテクチャ
• 先行書き込みログ
• ストレージに対する「操作」を先に書き込む
• 永続化ストレージへの反映は後からバックグラウンドで
• 途中で電源が落ちても「操作」を再開可能
• 容量より速度を重視したいので高速なSSDを使用
• 永続化ストレージ
• メッセージを溜めておく
• 速度より容量を重視したいので大容量なHDDを使用
先行書き込みログで速度を担保
永続化ストレージで容量を担保
先行書き込みログ
(SSD)
永続化ストレージ
(HDD)
Bookie
書き込み
キャッシュ
先行読み込み
キャッシュ
Write
Read
20
Yahoo! JAPANにおける利用事例
21
Pulsar導入の経緯
■背景
• Yahoo! JAPANには100程度のサービスが存在(ヤフオク、ショッピング、…)
• それぞれのサービスが個々にMQを構築すると
• 設備・運用コストが増大
• ナレッジが社内で分散
• 本来やりたいサービス開発に集中できない
→ サービス横断で利用可能な「社内プラットフォームとしてのMQ」を提供したい
■求められる要件
1. 高いパフォーマンス / スケーラビリティ
2. 堅牢なストレージ
3. 複数のサービスの同居(マルチテナント)
4. 複数のデータセンター間でのレプリケーション
→ Pulsarなら満たせる!
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
サービスB
サービスC
サービスA
22
サーバー構成
サービスB
(Java)
サービスA
(Node.js)
西
Broker
Bookie ZK
WebSocket
Proxy
東
Broker
Bookie ZK
WebSocket
Proxy
GeoReplication
サービスC
(C++)
Prometheus
+
Grafana
メトリクス収集
+
可視化
23
利用の流れ
ProducerサービスA Consumer
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
トピックD
サービスB
サービスC
サービスD
• マルチテナント: 複数の利用者が1つのPulsarインスタンスを共有
• 利用者がセルフサービスでトピックを作成
• 認証認可、割当リソースの設定も可能
• Yahoo! JAPANの社内では設定用の独自UIを提供している
各サービスが利用可能な
リソースを個別に設定可能:
BacklogSize 2GB,
RetentionTime 7days, …
他のサービスのトピックへの
アクセスは認証・認可機構で
ブロック利用者がセルフサービスで
トピックを作成
設定用UI
24
利用事例1 - コンテンツ入稿プラットフォーム
• Yahoo! JAPANには外部のコンテンツプロバイダから様々なファイルが入稿される
• 入稿サーバへのファイル転送を検知したら入稿ログをPulsarに流す
• トピックを購読している各サービスがファイルを取得して処理する
Producer
Consumer
トピック
サービスA
Pulsar
コンテンツの入稿ログ
をPulsarに流す
ファイルを取得
Consumer
サービスB
Consumer
サービスC
入稿サーバ
コンテンツ
プロバイダ
天気情報、地図情報、
ニュース etc.
ログサーバ
25
利用事例2 - Yahoo!メールの検索インデックス作成
• メールの検索インデックスの生成/修正といった時間のかかるジョブを非同期に
処理するために利用
• ProducerはPulsarにジョブをキューイング
• ConsumerはPulsarからジョブを取り出して順番に処理
Producer
Consumer
Producer
トピック
ジョブを処理する
ハンドラ
メールBEサーバ
メールBEサーバ
Pulsar
リクエスト
ジョブを登録
忙しい時やジョブが
失敗した時は再登録
ジョブを
取り出して処理
26
Pulsarを起動してみよう
27
Pulsar Standalone
Broker/Bookie/ZooKeeperが1セットになったおためし版
Broker
Bookie
Global/Local
ZooKeeper
standalone
28
Standaloneの起動
# pulsar-handson/standaloneに移動してください
$ cd standalone
# 起動
$ docker-compose up –d
# standaloneコンテナに入る
$ docker exec -it standalone_standalone_1 /bin/bash
29
コマンドラインツール
コマンド 用途
bin/pulsar Broker/Bookie/Zookeeperなど各種
サーバーの起動
bin/pulsar-admin プロパティ/ネームスペースの作成や
設定変更など各種管理操作
bin/pulsar-client メッセージの送受信の確認
bin/pulsar-perf パフォーマンスの測定
30
メッセージの送受信
# Consumerを起動
$ bin/pulsar-client consume -s sub
persistent://sample/standalone/ns1/topic1
# Producerからメッセージを送信(別ターミナルで)
$ bin/pulsar-client produce -m ‘hoge,fuga,bar'
persistent://sample/standalone/ns1/topic1
# Consumerがメッセージを受信
----- got message -----
hoge
----- got message -----
fuga
----- got message -----
bar
31
パフォーマンス測定ツールの実行
# Producer(終了するときはCtrl+C)
$ bin/pulsar-perf produce persistent://sample/standalone/ns1/topic1
<中略>
2018-02-16 10:43:51,830 - INFO - [main:PerformanceProducer@401] -
Throughput produced: 100.0 msg/s --- 0.8 Mbit/s ---
Latency: mean: 4.714 ms - med: 3.303 - 95pct: 4.563 - 99pct:
64.946 - 99.9pct: 153.931 - 99.99pct: 162.850 - Max: 162.850...
# Consumer(終了するときはCtrl+C)
$ bin/pulsar-perf consume persistent://sample/standalone/ns1/topic1
<中略>
2018-02-16 10:49:22,136 - INFO - [main:PerformanceConsumer@313] -
Throughput received: 99.926 msg/s -- 0.781 Mbit/s ---
Latency: mean: 7.856 ms - med: 8.000 - 95pct: 12.000 - 99pct: 13.000
- 99.9pct: 13.000 - 99.99pct: 13.000 - Max: 13.000
秒間メッセージ数
平均レイテンシ
32
参考: チュートリアル
下記にJava/Pythonのチュートリアルのコードがあります:
• https://github.com/streamlio/pulsar-java-tutorial
• https://github.com/streamlio/pulsar-python-tutorial
33
休憩
34
トピック / サブスクリプション
35
Pulsarのインターフェース
• クライアントライブラリはJava, C++, Pythonを提供
• 他の言語からもWebSocket APIを利用可能
• Producer/Consumerは次のようなトピックURIを指定してPulsarに接続
例: persistent://my-prop/standalone/my-ns/topic1
• さらにConsumerはサブスクリプションの名前を指定する必要がある
• 用途に応じて3種類のサブスクリプションモード(メッセージの配信方式)を選択可能
persistent://property/cluster/namespace/destination
サービス名など
データセンターなど
用途など
用途の詳細などメッセージを永続化
36
プロパティ / ネームスペースの作成
# プロパティを作成
$ bin/pulsar-admin properties create -c standalone
-r 'my-role' my-prop
# 確認
$ bin/pulsar-admin properties get my-prop
# ネームスペースを作成
$ bin/pulsar-admin namespaces create my-
prop/standalone/my-ns
# 作成されたことを確認
$ bin/pulsar-admin namespaces list my-prop
37
メッセージの送受信(今作ったネームスペースに対して)
# Consumerを起動
$ bin/pulsar-client consume -s sub
persistent://my-prop/standalone/my-ns/topic1
# Producerからメッセージを送信(別ターミナルで)
$ bin/pulsar-client produce -m ‘hoge,fuga,bar'
persistent://my-prop/standalone/my-ns/topic1
# Consumerがメッセージを受信
----- got message -----
hoge
----- got message -----
fuga
----- got message -----
bar
38
Persistent / Non-persistent
Producer Consumer
Broker
Bookie
Producer Consumer
Broker
Bookie
永続化
Persistent:
• メッセージをBookieに保存する
• データの永続性を重視
Non-persistent:
• メッセージをBookieに保存しない
• データの配信速度を重視
persistent://prop/cluster/ns/dst non-persistent://prop/cluster/ns/dst
39
メッセージの送受信(non-persistent)
# Consumerを起動
$ bin/pulsar-client consume -s sub non-persistent://my-
prop/standalone/my-ns/topic1
# Producerからメッセージを送信(別ターミナルで)
$ bin/pulsar-client produce -m ‘hoge,fuga,bar’ non-
persistent://my-prop/standalone/my-ns/topic1
# Consumerがメッセージを受信
----- got message -----
hoge
----- got message -----
fuga
----- got message -----
bar
40
サブスクリプションとは?
Producer
Consumer
Consumer
1
2345
Consumerがトピックの購読を開始した時に作成される購読の管理単位
• 「メッセージがどこまで受け取られたか?」はサブスクリプションごとに管理される
• Consumerとの接続が切れても削除されず、再接続までの間メッセージを溜め続ける
123
トピック
subscription-A
subscription-B
6
41
サブスクリプションタイプ1 - Exclusive
Producer
Consumer
Consumer
Consumer
1
• 1つのサブスクリプションには1つのConsumerだけが接続可能
• 既にConsumerが存在するサブスクリプションに接続を試みるとエラーになる
• デフォルトのサブスクリプションタイプ
subscription-A
(Exclusive)
subscription-B
(Exclusive)
トピック
1
1
2
2
2
42
Exclusive
# Consumerを起動
$ bin/pulsar-client consume -s sub persistent://my-
prop/standalone/my-ns/topic1
# 同じサブスクリプション名でConsumerの起動しようとすると失敗
する(別ターミナルで)
$ bin/pulsar-client consume -s sub persistent://my-
prop/standalone/my-ns/topic1
ERROR Error while consuming messages
ERROR Exclusive consumer is already connected
…
43
サブスクリプションタイプ2 - Shared
Producer Consumer
Consumer
Consumer
subscription
(Shared)
• 1つのサブスクリプションに複数のConsumerが接続可能
• メッセージは各Consumerに(ほぼ)ラウンドロビンで配信される
• 複数のConsumerで処理を分担させたい場合に有用
トピック
1 12 23 3
44
Shared
# ConsumerをSharedで起動
$ bin/pulsar-client consume -s sub -t Shared -n 0
persistent://my-prop/standalone/my-ns/topic1
# 同じサブスクリプション名で別のConsumerを起動(別ターミナル
で)
$ bin/pulsar-client consume -s sub -t Shared -n 0
persistent://my-prop/standalone/my-ns/topic1
# Producerからメッセージを5個送信(別ターミナルで)
$ bin/pulsar-client produce -m 1,2,3,4,5
persistent://my-prop/standalone/my-ns/topic1
45
サブスクリプションタイプ3 - Failover
Producer Consumer
Consumer
Consumer
• 複数のConsumerが接続可能だが、メッセージを受け取るのはその内1つだけ
• そのConsumerがダウンすると別のConsumerがメッセージを受け取るようになる
• アクティブ・スタンバイ構成を実現可能
subscription
(Failover)
トピック
1 12 23 3
46
Failover
# ConsumerをFailoverで起動
$ bin/pulsar-client consume -s sub -t Failover -n 0
persistent://my-prop/standalone/my-ns/topic1
# 同じサブスクリプション名で別のConsumerを起動(別ターミナルで)
$ bin/pulsar-client consume -s sub -t Failover -n 0
persistent://my-prop/standalone/my-ns/topic1
# Producerからメッセージを5個送信(別ターミナルで)$ bin/pulsar-
client produce -m 1,2,3,4,5 persistent://my-
prop/standalone/my-ns/topic1
# メッセージを受信したConsumerの接続を切ってから再度送信
$ bin/pulsar-client produce -m 1,2,3,4,5 persistent://my-
prop/standalone/my-ns/topic1
47
Backlog / Retention
48
Backlog
Consumer8 7 6 5 4 3 2 1 1 Ack 12 Ack 2
Backlog
subscription-A
Cursor
• Ack(Acknowledgement)
• Consumerがメッセージの処理を終えたときにBrokerに返す応答
• Cursor
• どのメッセージのAckが返されたかの情報
• Backlog
• 1つ以上のサブスクリプションからまだAckが返されていないメッセージ
49
Backlog – 実践
# Producerからメッセージを10個送信
$ bin/pulsar-client produce -m HelloPulsar -n 10 persistent://my-
prop/standalone/my-ns/topic1
# statsを確認(msgBacklog=10になっている)
$ bin/pulsar-admin persistent stats persistent://my-
prop/standalone/my-ns/topic1
…
"msgThroughputOut" : 0.0,
"msgRateRedeliver" : 0.0,
"msgBacklog" : 10,
# Backlogを消化
$ bin/pulsar-admin persistent skip-all -s sub persistent://my-
prop/standalone/my-ns/topic1
# statsを確認(msgBacklog=0になっている)
$ bin/pulsar-admin persistent stats persistent://my-
prop/standalone/my-ns/topic1
50
Retention
Consumer8 7 6 5 4 3 2 1 1 Ack 12 Ack 2
Backlog Retention
subscription-A
Cursor
✓✓
• Retention
• 既にAckが返されたメッセージを(必要に応じて再送できるように)保存しておく機能
• retention size: 最大何Mバイトまで保存するか
• retention time: 最大何分まで保存するか
51
Retetion – 実践
# Retentionを設定
$ bin/pulsar-admin namespaces set-retention -s 1M -t 1h my-
prop/standalone/my-ns
# 設定されたことを確認
$ bin/pulsar-admin namespaces get-retention my-prop/standalone/my-
ns
{
"retentionTimeInMinutes" : 60,
"retentionSizeInMB" : 1
}
# Cursorを戻す
$ bin/pulsar-admin persistent reset-cursor -s sub -t 1h
persistent://my-prop/standalone/my-ns/topic1
# statsを確認(msgBacklog=10に戻っている)
$ bin/pulsar-admin persistent stats persistent://my-
prop/standalone/my-ns/topic1
52
GeoReplication
53
GeoReplicationとは
Producer トピック
あるクラスタのトピックに送信したメッセージを他のクラスタに複製・配信
• Yahoo! JAPANではデータセンターごとにPulsarクラスタを構築
• Producerは自分と同じデータセンターのPulsarにメッセージを送ればいい
• Consumerは自分と同じデータセンターのPulsarからメッセージを受け取れる
Pulsar クラスタ A
Consumer
Consumer
Consumer
データセンターA
トピック Consumer
Consumer
Consumer
データセンターB
GeoReplication Pulsar クラスタ B
54
GeoReplication – 実践
Broker
Bookie
Local
ZooKeeper
west
Broker
Bookie
Local
ZooKeeper
east
Global
ZooKeeper
# pulsar-handson/georeplicationに移動してください
$ cd georeplication
# 2つのクラスタ(east, west)を起動
$ docker-compose up -d
55
GeoReplication – westを指定した場合
Producer
Consumer
Broker
Bookie
Local
ZooKeeper
west
Broker
Bookie
Local
ZooKeeper
east
Global
ZooKeeper
from west
my-prop/west/my-ns/topic1
$ bin/pulsar-client consume -s sub persistent://my-prop/west/my-ns/topic1
$ bin/pulsar-client produce -m 'from west' persistent://my-prop/west/my-ns/topic1
----- got message -----
from west
56
GeoReplication – globalを指定した場合
Producer
Consumer
Broker
Bookie
Local
ZooKeeper
west
Broker
Bookie
Local
ZooKeeper
east
Global
ZooKeeper
from west
my-prop/global/my-ns/topic1
$ bin/pulsar-client consume -s sub persistent://my-prop/global/my-ns/topic1
$ bin/pulsar-client consume -s sub persistent://my-prop/global/my-ns/topic1
$ bin/pulsar-client produce -m 'from west' persistent://my-prop/global/my-ns/topic1
# 両方のConsumerにメッセージが流れる
----- got message -----
from west
Consumer
from west
57
補足1 : Globalなネームスペースの作成
# レプリケーション先のクラスタを指定
$ bin/pulsar-admin namespaces set-clusters -c
‘west,east' my-prop/global/my-ns
set-clustersコマンドでレプリケーション先を予め指定する必要がある
58
補足2 : 選択的なレプリケーション
List<String> restrictReplicationTo = new ArrayList<>();
restrictReplicationTo.add("west");
restrictReplicationTo.add("east");
Messagemessage = MessageBuilder.create()
.setContent("my-message”.getBytes())
.setReplicationClusters(restrictReplicationTo)
.build();
producer.send(message);
メッセージごとにレプリケーション先を指定することも可能
59
認証認可
60
認証認可
my-prop
my-ns1
topic1
my-ns2
topic2
topic3
topic4
persistent://property/cluster/namespace/destination
サービス名など 用途など 用途の詳細など
スーパーユーザー
(Pulsar管理者)
プロパティ管理者
(Pulsar利用者)
プロパティを作成
adminRoleとして設定
ネームスペースを作成/設定変更
• produce/consumeを許可するロールの設定
• Backlog/Retentionのサイズなど
61
認証認可 – 実践
トピック
Producer Consumer
Consumer
user1のproduceと
consumeを許可
user1
Producer
role: user1 role: user1
role: user2 role: user2
# user1のproduce/consumeを許可
$ bin/pulsar-admin namespaces grant-permission --actions produce,consume
--role user1 my-prop/standalone/my-ns
62
まとめ
まとめ
63
まとめ
• 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
64
今後について
Pulsarコミュニティのイベントは今後も定期的に行っていく予定です。
またPulsarを使ってみての感想、事例なども募集しています。
ぜひJapan Pulsar User Groupにご参加ください!
https://japan-pulsar-user-group.connpass.com/
65
Appendix
66
// 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
67
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
68
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のサンプルコード - サブスクリプションタイプの指定

Contenu connexe

Tendances

Tendances (20)

アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介OpenStackを使用したGPU仮想化IaaS環境 事例紹介
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
自宅k8s/vSphere入門
自宅k8s/vSphere入門自宅k8s/vSphere入門
自宅k8s/vSphere入門
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
コンテナポータビリティの振り返りとハマった事例紹介
コンテナポータビリティの振り返りとハマった事例紹介コンテナポータビリティの振り返りとハマった事例紹介
コンテナポータビリティの振り返りとハマった事例紹介
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
 
ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観ML2/OVN アーキテクチャ概観
ML2/OVN アーキテクチャ概観
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
TiDBのトランザクション
TiDBのトランザクションTiDBのトランザクション
TiDBのトランザクション
 
Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版
 

Similaire à Pulsar Handson 20180226

Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
HommasSlide
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku alt
Shugo Numano
 

Similaire à Pulsar Handson 20180226 (20)

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタ
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
 
20150101勉強会 dokku alt
20150101勉強会 dokku alt20150101勉強会 dokku alt
20150101勉強会 dokku alt
 
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションKubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門
 

Dernier

Dernier (10)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Pulsar Handson 20180226

Notes de l'éditeur

  1. それでは時間になりましたので、セミナーを開始したいと思います。 皆さま、本日はApache Pulsarハンズオンにお越しいただきありがとうございます。 私はヤフー株式会社システム統括本部プラットフォーム開発本部の栗原望と申します。 本日の司会進行と発表を務めさせて頂きます。よろしくお願いします。
  2. 本日の主催はJapan Pulsar User Groupになります。 今回が初めてのイベントになりますが、今後も定期的にイベントを行う予定ですので、よろしければグループへの登録をお願いします。
  3. 本日ハンズオンを手伝うスタッフです。 スタッフの方、ちょっと手を上げてもらってよいでしょうか。 セミナー中何かわからないことなどあればこのメンバーにお声がけください。
  4. 本日のハンズオンではDockerを利用します。 資料はgithubにあるので詳しくはこちらを参照してください。 お使いのPCでdockerとdocker-composeコマンドを予め導入しておいてください。 また、Dockerイメージのpullに多少時間がかかりますので、あらかじめお願いします。
  5. 本日ご紹介するApache Pulsarの概要です。
  6. 本日のハンズオンのゴールです。
  7. もう少し詳しく説明します。 メッセージキューを使わなかったらどうなるか考えてみましょう。
  8. ここまででMQがどんなものかが何となくはわかって頂けたかと思います。 しかし、Pulsarを理解して頂くためには、さらにPub-Subメッセージングと呼ばれる概念を知って頂く必要があります。 購読ができるConsumerは必ずしも1つとは限りません。 複数のConsumerがトピックを購読していれば、その全てにメッセージを届ける事ができます。
  9. Pub-Subメッセージングをしない場合、1対1ならまだよいのですが、1対多や多対多になると組み合わせが大量になるため、複雑で管理が大変になってしまいます。
  10. これがPub-Subメッセージングで、比較的大規模なシステム間を連携させるときの緩衝材の役割を果たします。
  11. Pulsarのアーキテクチャの説明が終わった所で、次はYahoo! JAPANに置ける利用事例をご紹介したいと思います。
  12. これがYahoo! JAPANでの構成例になります。 東西にデータセンターがあり、それぞれにPulsarのクラスタを構築しています。 GeoReplicationの機能があるので一拠点に流れてきたメッセージはもう一方の拠点にも流すことができます。 またPulsarのクライアントライブラリはJava/C++/Pythonがあるのですが、それ以外の言語から使う場合はWebSocketのProxyを叩いてもらっています。 更にBrokerのメトリクス情報はPrometheusに収集され、Grafanaで可視化しています。 これによりどのサービスがどれくらいPublishしているなどを見ることができます。
  13. さきほどPulsarには3つのコンポーネントがあることを説明しました。 しかしちょっとした確認の際、すべてを起動するのは少し面倒です。 そのようなときのためにPulsarにはStandaloneというものが用意されています。 これはBroker/Bookie/Zookeeperが一つになったおためし版のコンポーネントです。 今からこれを起動してみましょう。
  14. ※キューを1つに
  15. Pulsarにおける認証認可について説明します。 まずPulsarの管理者であるスーパーユーザーがプロパティを作成します。 プロパティにはその管理者であるadminRoleを設定します。 プロパティのadminRoleはその下にネームスペースを作成することができます。 またそれらの設定を変更することができます。 例えばproduce/consumeを許可するロールの設定や、Backlog/Retentionのサイズなどです。
  16. 実際にトピックに対してproduce/consumeを許可するロールを設定してみましょう。