Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kafka vs Pulsar @KafkaMeetup_20180316

1,793 views

Published on

https://kafka-apache-jp.connpass.com/event/77889/

Published in: Technology
  • Be the first to comment

Kafka vs Pulsar @KafkaMeetup_20180316

  1. 1. Kafka vs Pulsar ヤフー株式会社 システム統括本部 栗原 望 2018/03/16
  2. 2. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 自己紹介 栗原 望 経歴: ▪ 2012/04 ヤフー株式会社に新卒入社 ▪ 2012/10 ユーザーの属性情報に関連する社内向けプラットフォームの開発 ▪ 2015/07 ヤフオクのBEシステム再構築 ▪ 2016/10 「Pulsar」を使った社内向けメッセージングプラットフォームの開発 ▪ 2017/06~ 「Pulsar」のコミッター 趣味: ▪ ぷよぷよテトリス ▪ ボードゲームいろいろ
  3. 3. 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とカブる部分が多いが違いは?
  4. 4. 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で複数言語をカバー
  5. 5. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5 他アプリケーションとの連携 Kafka • Storm • Spark • Flink • Flume • And more Pulsar • Storm • Spark • Heron Kafkaは様々なストリーム処理フレームワークと連携可能
  6. 6. 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を増やす際はデータの再配置が必要
  7. 7. 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管理者 プロパティ管理者 トピックを作成 プロパティを作成 管理者として 設定 ネームスペースを作成
  8. 8. 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
  9. 9. 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
  10. 10. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ0: KafkaClient ※事前にlocalhostでKafkaを起動済み
  11. 11. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ1: KafkaWrapperを使ったPulsarへの移行 ※事前にlocalhostでPulsarを起動済み
  12. 12. 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!
  13. 13. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 デモ2: Pulsar Functionsを使ったデータ加工 ※事前にlocalhostでPulsarを起動済み
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 Appendix
  18. 18. 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
  19. 19. 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の 米国およびその他の国における登録商標または商標です。
  20. 20. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20 BookKeeperのアーキテクチャ • 先行書き込みログ • ストレージに対する「操作」を先に書き込む • 永続化ストレージへの反映は後からバックグラウンドで • 途中で電源が落ちても「操作」を再開可能 • 容量より速度を重視したいので高速なSSDを使用 • 永続化ストレージ • メッセージを溜めておく • 速度より容量を重視したいので大容量なHDDを使用 先行書き込みログで速度を担保 永続化ストレージで容量を担保 先行書き込みログ (SSD) 永続化ストレージ (HDD) Bookie 書き込み キャッシュ 先行読み込み キャッシュ Write Read
  21. 21. 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
  22. 22. 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 メトリクス収集 + 可視化
  23. 23. 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
  24. 24. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 利用事例1 - コンテンツ入稿プラットフォーム • Yahoo! JAPANには外部のコンテンツプロバイダから様々なファイルが入稿される • 入稿サーバへのファイル転送を検知したら入稿ログをPulsarに流す • トピックを購読している各サービスがファイルを取得して処理する Producer Consumer トピック サービスA Pulsar コンテンツの入稿ログ をPulsarに流す ファイルを取得 Consumer サービスB Consumer サービスC 入稿サーバ コンテンツ プロバイダ 天気情報、地図情報、 ニュース etc. ログサーバ
  25. 25. Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 利用事例2 - Yahoo!メールの検索インデックス作成 • メールの検索インデックスの生成/修正といった時間のかかるジョブを非同期に 処理するために利用 • ProducerはPulsarにジョブをキューイング • ConsumerはPulsarからジョブを取り出して順番に処理 Producer Consumer Producer トピック ジョブを処理する ハンドラ メールBEサーバ メールBEサーバ Pulsar リクエスト ジョブを登録 忙しい時やジョブが 失敗した時は再登録 ジョブを 取り出して処理
  26. 26. 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

×