Kafka vs Pulsar
ヤフー株式会社 システム統括本部
栗原 望
2018/03/16
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2
自己紹介
栗原 望
経歴:
▪ 2012/04 ヤフー株式会社に新卒入社
▪ 2012/10 ユーザーの属性情報に関連する社内向けプラットフォームの開発
▪ 2015/07 ヤフオクのBEシステム再構築
▪ 2016/10 「Pulsar」を使った社内向けメッセージングプラットフォームの開発
▪ 2017/06~ 「Pulsar」のコミッター
趣味:
▪ ぷよぷよテトリス
▪ ボードゲームいろいろ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
Apache Pulsar
Yahoo! Inc.(現:Oath)で開発されたPub-Subメッセージングプラットフォーム
• 特徴
• 高速
• スケーラブル
• デュラブル
• マルチテナント
• ジオレプリケーション
• 歴史
• 2014秋 Yahoo! Inc. が開発
• 2016/09 OSSとして公開
• 2017/06 Apache Software Foundationに移管(Incubatorプロジェクト)
Kafkaとカブる部分が多いが違いは?
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4
クライアント
Kafka • Java
• And more (third-pirty)
Pulsar • Java
• C++
• Python
• WebSocket
• Kafkaはサードパーティ製のクライアントが豊富
• PulsarはWebSocket APIで複数言語をカバー
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5
他アプリケーションとの連携
Kafka • Storm
• Spark
• Flink
• Flume
• And more
Pulsar • Storm
• Spark
• Heron
Kafkaは様々なストリーム処理フレームワークと連携可能
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6
アーキテクチャ
Producer Consumer
Broker 1 Broker 2 Broker 3
Bookie1
Kafka Pulsar
Producer Consumer
Broker 1 Broker 2 Broker 3
Partition
(copy)
Partition
(lead)
Partition
(copy) Bookie2 Bookie3
B
A
C
B
A
C
B
A
C
A A
B
B
C C
• Brokerがデータを保持しない
• データがBookie全体に分散するので1台あたりの
容量はネックにならない
• BrokerとBookieを独立してスケールできる
• どちらを増やす際もデータの再配置は不要
• 負荷に応じて担当Brokerが自動的に移動
• 1パーティションのデータ容量 < Brokerの容量
• トピック数 * パーティション数のディレクトリが生成
されるが、大規模な場合そこがボトルネックになる可
能性がある
• Brokerを増やす際はデータの再配置が必要
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7
トピック構造
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
プロパティ
log-stream-for-log-b
ネームスペース トピック
Kafka
Pulsar
トピック名が階層化されていない
↓
トピックごとに設定が必要
トピック名が階層化されている
↓
管理を利用者側に委任しやすい
(マルチテナントにしやすい)
Kafka管理者
Pulsar管理者
プロパティ管理者
トピックを作成
プロパティを作成
管理者として
設定
ネームスペースを作成
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8
ベンチマーク
openmessaging-benchmark : メッセージシステムのベンチマーク標準化プロジェクト
Apache Pulsar Outperforms Apache Kafka by 2.5x on OpenMessaging Benchmark
openmessagingベンチマークテストにおいてPulsarがKafkaを上回ったとのこと
https://www.slideshare.net/merlimat/effectivelyonce-semantics-in-apache-pulsar
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
Kafka to Pulsar
KafkaWrapper
• KafkaProducer / KafkaConsumerのIFでPulsarを利用するためのアダプタ(Java)
• dependencyを変更するだけで(コードは変更することなく)KafkaからPulsarへの移行が可能
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kakfa-clients</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-kafka</artifactId>
<version>1.22.0-incubating</version>
</dependency>
Kafka
Pulsar
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
デモ0: KafkaClient
※事前にlocalhostでKafkaを起動済み
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
デモ1: KafkaWrapperを使ったPulsarへの移行
※事前にlocalhostでPulsarを起動済み
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
最近追加された機能: Pulsar Functions
• 入力トピックからデータを受け取り、何らかの処理を行って出力トピックに書き込む
• ちょっとした前処理やイベント処理を手軽に実現できる
Source SinkProducerConsumer
Pulsar Function Worker
F(x)
def process(input):
return input + ’!’
exclamation.py
hoge hoge!
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
デモ2: Pulsar Functionsを使ったデータ加工
※事前にlocalhostでPulsarを起動済み
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
まとめ
14
まとめ
▪ Pulsar
› スケーラブルなアーキテクチャ、マルチテナントに適したトピック構造
› サードパーティ製のライブラリの多さはまだまだKafkaが勝っている
› openmessaging-benchmarkにおいてKafkaを上回るパフォーマンス
› KafkaWrapperを使えばコード修正不要でKafkaからの移行が可能
› Pulsar Functionsでお手軽前処理
▪ ドキュメント、お問い合わせ
› 英語 : 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) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
Japan Pulsar User Group
Japan Pulsar User Groupにご参加ください!
https://japan-pulsar-user-group.connpass.com/
short URL: https://yahoo.jp/T2s7Up
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
参考文献
• Comparing Pulsar and Kafka: unified queuing and streaming
• Comparing Pulsar and Kafka: how a segment-based architecture delivers better
performance, scalability, and resilience
• How to migrate Apache Kafka applications to Apache Pulsar
• Introducing Pulsar Functions
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17
Appendix
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18
システム構成図 ■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
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
Apache BookKeeperとは?
• オープンソースの分散型ログストレージサービス
• データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性
• ノード数を増やせば容量と速度の向上が可能 → スケーラブル
A
Bookie2 Bookie3
D
C
A
B
D
B
C
Bookie1
データの複製数は自由に変更可能
Apache BookKeeperはApache Software Foundationの
米国およびその他の国における登録商標または商標です。
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
BookKeeperのアーキテクチャ
• 先行書き込みログ
• ストレージに対する「操作」を先に書き込む
• 永続化ストレージへの反映は後からバックグラウンドで
• 途中で電源が落ちても「操作」を再開可能
• 容量より速度を重視したいので高速なSSDを使用
• 永続化ストレージ
• メッセージを溜めておく
• 速度より容量を重視したいので大容量なHDDを使用
先行書き込みログで速度を担保
永続化ストレージで容量を担保
先行書き込みログ
(SSD)
永続化ストレージ
(HDD)
Bookie
書き込み
キャッシュ
先行読み込み
キャッシュ
Write
Read
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21
Pulsar導入の経緯
■背景
• Yahoo! JAPANには100程度のサービスが存在(ヤフオク、ショッピング、…)
• それぞれのサービスが個々にMQを構築すると
• 設備・運用コストが増大
• ナレッジが社内で分散
• 本来やりたいサービス開発に集中できない
→ サービス横断で利用可能な「社内プラットフォームとしてのMQ」を提供したい
■求められる要件
1. 高いパフォーマンス / スケーラビリティ
2. 堅牢なストレージ
3. 複数のサービスの同居(マルチテナント)
4. 複数のデータセンター間でのレプリケーション
→ Pulsarなら満たせる!
Producer Consumer
Producer Consumer
Producer Consumer
トピックA
トピックB
トピックC
サービスB
サービスC
サービスA
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
22
サーバー構成
サービスB
(Java)
サービスA
(Node.js)
西
Broker
Bookie ZK
WebSocket
Proxy
東
Broker
Bookie ZK
WebSocket
Proxy
GeoReplication
サービスC
(C++)
Prometheus
+
Grafana
メトリクス収集
+
可視化
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24
利用事例1 - コンテンツ入稿プラットフォーム
• Yahoo! JAPANには外部のコンテンツプロバイダから様々なファイルが入稿される
• 入稿サーバへのファイル転送を検知したら入稿ログをPulsarに流す
• トピックを購読している各サービスがファイルを取得して処理する
Producer
Consumer
トピック
サービスA
Pulsar
コンテンツの入稿ログ
をPulsarに流す
ファイルを取得
Consumer
サービスB
Consumer
サービスC
入稿サーバ
コンテンツ
プロバイダ
天気情報、地図情報、
ニュース etc.
ログサーバ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25
利用事例2 - Yahoo!メールの検索インデックス作成
• メールの検索インデックスの生成/修正といった時間のかかるジョブを非同期に
処理するために利用
• ProducerはPulsarにジョブをキューイング
• ConsumerはPulsarからジョブを取り出して順番に処理
Producer
Consumer
Producer
トピック
ジョブを処理する
ハンドラ
メールBEサーバ
メールBEサーバ
Pulsar
リクエスト
ジョブを登録
忙しい時やジョブが
失敗した時は再登録
ジョブを
取り出して処理
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26
openmessaging-benchmark
openmessaging-benchmark : メッセージシステムのベンチマーク標準化プロジェクト
# 実行例:
$bin/benchmark -d driver-pulsar/pulsar.yaml workloads/1-topic-1-partition-100b.yaml
[main] INFO - ----- Starting benchmark traffic ------
[main] INFO - Pub rate 51630.7 msg/s / 4.9 Mb/s | Cons rate 51582.4 msg/s / 4.9
Mb/s | Backlog: 0.5 K | Pub Latency (ms) avg: 3.8 - 50%: 3.5 - 99%: 7.3 - 99.9%:
22.3 - Max: 55.5

Kafka vs Pulsar @KafkaMeetup_20180316

  • 1.
    Kafka vs Pulsar ヤフー株式会社システム統括本部 栗原 望 2018/03/16
  • 2.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 自己紹介 栗原 望 経歴: ▪ 2012/04 ヤフー株式会社に新卒入社 ▪ 2012/10 ユーザーの属性情報に関連する社内向けプラットフォームの開発 ▪ 2015/07 ヤフオクのBEシステム再構築 ▪ 2016/10 「Pulsar」を使った社内向けメッセージングプラットフォームの開発 ▪ 2017/06~ 「Pulsar」のコミッター 趣味: ▪ ぷよぷよテトリス ▪ ボードゲームいろいろ
  • 3.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3 Apache Pulsar Yahoo! Inc.(現:Oath)で開発されたPub-Subメッセージングプラットフォーム • 特徴 • 高速 • スケーラブル • デュラブル • マルチテナント • ジオレプリケーション • 歴史 • 2014秋 Yahoo! Inc. が開発 • 2016/09 OSSとして公開 • 2017/06 Apache Software Foundationに移管(Incubatorプロジェクト) Kafkaとカブる部分が多いが違いは?
  • 4.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4 クライアント Kafka • Java • And more (third-pirty) Pulsar • Java • C++ • Python • WebSocket • Kafkaはサードパーティ製のクライアントが豊富 • PulsarはWebSocket APIで複数言語をカバー
  • 5.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5 他アプリケーションとの連携 Kafka • Storm • Spark • Flink • Flume • And more Pulsar • Storm • Spark • Heron Kafkaは様々なストリーム処理フレームワークと連携可能
  • 6.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6 アーキテクチャ Producer Consumer Broker 1 Broker 2 Broker 3 Bookie1 Kafka Pulsar Producer Consumer Broker 1 Broker 2 Broker 3 Partition (copy) Partition (lead) Partition (copy) Bookie2 Bookie3 B A C B A C B A C A A B B C C • Brokerがデータを保持しない • データがBookie全体に分散するので1台あたりの 容量はネックにならない • BrokerとBookieを独立してスケールできる • どちらを増やす際もデータの再配置は不要 • 負荷に応じて担当Brokerが自動的に移動 • 1パーティションのデータ容量 < Brokerの容量 • トピック数 * パーティション数のディレクトリが生成 されるが、大規模な場合そこがボトルネックになる可 能性がある • Brokerを増やす際はデータの再配置が必要
  • 7.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7 トピック構造 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 プロパティ log-stream-for-log-b ネームスペース トピック Kafka Pulsar トピック名が階層化されていない ↓ トピックごとに設定が必要 トピック名が階層化されている ↓ 管理を利用者側に委任しやすい (マルチテナントにしやすい) Kafka管理者 Pulsar管理者 プロパティ管理者 トピックを作成 プロパティを作成 管理者として 設定 ネームスペースを作成
  • 8.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8 ベンチマーク openmessaging-benchmark : メッセージシステムのベンチマーク標準化プロジェクト Apache Pulsar Outperforms Apache Kafka by 2.5x on OpenMessaging Benchmark openmessagingベンチマークテストにおいてPulsarがKafkaを上回ったとのこと https://www.slideshare.net/merlimat/effectivelyonce-semantics-in-apache-pulsar
  • 9.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Kafka to Pulsar KafkaWrapper • KafkaProducer / KafkaConsumerのIFでPulsarを利用するためのアダプタ(Java) • dependencyを変更するだけで(コードは変更することなく)KafkaからPulsarへの移行が可能 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kakfa-clients</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client-kafka</artifactId> <version>1.22.0-incubating</version> </dependency> Kafka Pulsar
  • 10.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ0: KafkaClient ※事前にlocalhostでKafkaを起動済み
  • 11.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ1: KafkaWrapperを使ったPulsarへの移行 ※事前にlocalhostでPulsarを起動済み
  • 12.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 最近追加された機能: Pulsar Functions • 入力トピックからデータを受け取り、何らかの処理を行って出力トピックに書き込む • ちょっとした前処理やイベント処理を手軽に実現できる Source SinkProducerConsumer Pulsar Function Worker F(x) def process(input): return input + ’!’ exclamation.py hoge hoge!
  • 13.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ2: Pulsar Functionsを使ったデータ加工 ※事前にlocalhostでPulsarを起動済み
  • 14.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 まとめ 14 まとめ ▪ Pulsar › スケーラブルなアーキテクチャ、マルチテナントに適したトピック構造 › サードパーティ製のライブラリの多さはまだまだKafkaが勝っている › openmessaging-benchmarkにおいてKafkaを上回るパフォーマンス › KafkaWrapperを使えばコード修正不要でKafkaからの移行が可能 › Pulsar Functionsでお手軽前処理 ▪ ドキュメント、お問い合わせ › 英語 : 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/ › メール : [email protected]
  • 15.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Japan Pulsar User Group Japan Pulsar User Groupにご参加ください! https://japan-pulsar-user-group.connpass.com/ short URL: https://yahoo.jp/T2s7Up
  • 16.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 参考文献 • Comparing Pulsar and Kafka: unified queuing and streaming • Comparing Pulsar and Kafka: how a segment-based architecture delivers better performance, scalability, and resilience • How to migrate Apache Kafka applications to Apache Pulsar • Introducing Pulsar Functions
  • 17.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 Appendix
  • 18.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18 システム構成図 ■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
  • 19.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19 Apache BookKeeperとは? • オープンソースの分散型ログストレージサービス • データを複製し複数のノード(Bookie)に分散して保存 → 強い耐障害性 • ノード数を増やせば容量と速度の向上が可能 → スケーラブル A Bookie2 Bookie3 D C A B D B C Bookie1 データの複製数は自由に変更可能 Apache BookKeeperはApache Software Foundationの 米国およびその他の国における登録商標または商標です。
  • 20.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20 BookKeeperのアーキテクチャ • 先行書き込みログ • ストレージに対する「操作」を先に書き込む • 永続化ストレージへの反映は後からバックグラウンドで • 途中で電源が落ちても「操作」を再開可能 • 容量より速度を重視したいので高速なSSDを使用 • 永続化ストレージ • メッセージを溜めておく • 速度より容量を重視したいので大容量なHDDを使用 先行書き込みログで速度を担保 永続化ストレージで容量を担保 先行書き込みログ (SSD) 永続化ストレージ (HDD) Bookie 書き込み キャッシュ 先行読み込み キャッシュ Write Read
  • 21.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22 サーバー構成 サービスB (Java) サービスA (Node.js) 西 Broker Bookie ZK WebSocket Proxy 東 Broker Bookie ZK WebSocket Proxy GeoReplication サービスC (C++) Prometheus + Grafana メトリクス収集 + 可視化
  • 23.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 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.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 利用事例1 - コンテンツ入稿プラットフォーム • Yahoo! JAPANには外部のコンテンツプロバイダから様々なファイルが入稿される • 入稿サーバへのファイル転送を検知したら入稿ログをPulsarに流す • トピックを購読している各サービスがファイルを取得して処理する Producer Consumer トピック サービスA Pulsar コンテンツの入稿ログ をPulsarに流す ファイルを取得 Consumer サービスB Consumer サービスC 入稿サーバ コンテンツ プロバイダ 天気情報、地図情報、 ニュース etc. ログサーバ
  • 25.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 利用事例2 - Yahoo!メールの検索インデックス作成 • メールの検索インデックスの生成/修正といった時間のかかるジョブを非同期に 処理するために利用 • ProducerはPulsarにジョブをキューイング • ConsumerはPulsarからジョブを取り出して順番に処理 Producer Consumer Producer トピック ジョブを処理する ハンドラ メールBEサーバ メールBEサーバ Pulsar リクエスト ジョブを登録 忙しい時やジョブが 失敗した時は再登録 ジョブを 取り出して処理
  • 26.
    Copyright (C) 2018Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26 openmessaging-benchmark openmessaging-benchmark : メッセージシステムのベンチマーク標準化プロジェクト # 実行例: $bin/benchmark -d driver-pulsar/pulsar.yaml workloads/1-topic-1-partition-100b.yaml [main] INFO - ----- Starting benchmark traffic ------ [main] INFO - Pub rate 51630.7 msg/s / 4.9 Mb/s | Cons rate 51582.4 msg/s / 4.9 Mb/s | Backlog: 0.5 K | Pub Latency (ms) avg: 3.8 - 50%: 3.5 - 99%: 7.3 - 99.9%: 22.3 - Max: 55.5

Editor's Notes

  • #4 本日ご紹介するApache Pulsarの概要です。
  • #16 本日の主催はJapan Pulsar User Groupになります。 今回が初めてのイベントになりますが、今後も定期的にイベントを行う予定ですので、よろしければグループへの登録をお願いします。
  • #23 これがYahoo! JAPANでの構成例になります。 東西にデータセンターがあり、それぞれにPulsarのクラスタを構築しています。 GeoReplicationの機能があるので一拠点に流れてきたメッセージはもう一方の拠点にも流すことができます。 またPulsarのクライアントライブラリはJava/C++/Pythonがあるのですが、それ以外の言語から使う場合はWebSocketのProxyを叩いてもらっています。 更にBrokerのメトリクス情報はPrometheusに収集され、Grafanaで可視化しています。 これによりどのサービスがどれくらいPublishしているなどを見ることができます。