321 Views
June 02, 16
スライド概要
Apache Kafka Meetup Japan #1 http://connpass.com/event/32293/ 発表資料
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
ストリーム処理プラットフォーム におけるKafka導入事例 ヤフー株式会社 データ&サイエンスソリューション統括本部 データプラットフォーム本部 森谷 大輔 http://www.yahoo.co.jp/
自己紹介 氏名 • • 森谷 大輔 業務 • • • 社内ストリーム処理PFの構築保守運用 ストリームなアプリケーションの開発 Kafka歴 • • 2012年9月〜now(3.5年くらい) Special Thanks • • 梁 浩軒 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2
Agenda • • • • Kafka導入経緯 構成、周辺OSS、機能 ユースケース 反省点、課題と感じているところ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3
Agenda • • • • Kafka導入経緯 構成、周辺OSS、機能 ユースケース 反省点、課題と感じているところ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4
Yahoo! JAPAN のストリーム処理プラットフォーム • 様々なデータソースをリアルタイムに各サービスに提供、 サービスの価値に貢献 アプリログ ソーシャルログ Weblog IoT Photo by insidetwit https://www.flickr.com/photos/insidetwit/ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5
企画のきっかけ 今この瞬間が最も意味を持つ、鮮度が重要なデータ • • • 貯めて結果を出す、では遅いケースがある やってきたデータを逐次処理して、結果を逐次返すプラッ トフォームを作ろう! ユースケースのパターン 異常検知 ウィンドウ集計 オンライン機械学習 ETL Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6
Kafka, Stormの導入 2012年度初頭、開発着手 • • Kafka, Storm 採用 (2012年9月) • • • わい、チームに配属される 「入ったらもう Kafka だった」 「Kafka ってなんだ」 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7
Kafka 採用理由 LinkedInで実績がある Stormと相性が良い 高可用性 Hadoopとも連携できる とりあえずデータを投げればサービスをまたがって再利用 可能 • • • • • • consumer group と offset という素晴らしい概念 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8
Storm 採用理由 • • • • 他OSSと比較してコミュニティが活発だった Twitterで実績がある http://storm.apache.org/ 高可用性 at least once Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9
プラットフォームの構築 載せるアプリケーションの開発と並行しながら構築 当時Web上には ほとんど 日本語のドキュメントがなかった • • • • 知りうる限り一つしかなかった 2012年上半期開発完了、本番稼働 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10
Agenda • • • • Kafka導入経緯 構成、周辺OSS、機能 ユースケース 反省点、課題と感じているところ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11
大まかな構成と周辺OSS Distributed Message Queue Distributed Real-time Computation Search Engine Service API Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12
Packet Kafkaを流れるデータは全て Packet という共通フォーマットで MessagePack形式でシリアライズされている 送信メッセージにメタ情報を付与 • • • • • シリアライズ時(≒ produce時)のタイムスタンプ等 メッセージは文字列かバイト列 PFが提供しているライブラリを使えばユーザは基本的にはシリア ライズ形式を意識する必要がないようにしている Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13
ストリーム処理結果の格納オプション 実績 • • • • Cassandra, MySQL, 内製検索エンジン Kafkaの時点でデータの重複は発生するので、アプリケーションに 重複を除去する機構を入れるか、そもそも若干の重複は許容される ユースケースでなければならない その点KVSは相性が良い Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14
BatchConsumer • リアルタイムで読み進めているconsumer groupとは別に、過去分 を同じように処理したいという要望が結構ある 「昨日の18時から20時までのデータ、offsetは普通に読み進め ちゃったんだけど検索エンジンに反映できなかったからやり直した い」 • • ユーザからの要望は基本時間指定となる ストリームアプリケーションのロジックをそのまま再利用したい • Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15
BatchConsumer BatchConsumerなる抽象クラスを用意 • • • • ユーザはBatchConsumerを継承して処理内容を実装したクラスを作る 引数にZooKeeperとtopicと開始・終了のタイムスタンプを指定して BatchConsumeを発火 オプションで流量調整やスレッド数等が指定できる Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16
BatchConsumer シンプルなSimpleConsumerを使って実装している • • ※人間にとってシンプルとは言ってない • 特定のpartitionについてタイムスタンプを指定すると大雑把なオフセットが返って くるgetOffsetsBeforeメソッド その時間のメッセージが属するセグメントの、一個前の先頭のオフセットを返す謎 仕様(少なくとも0.8.1.1までは) • • • • 余計なセグメントを読むと時間がかかるため頑張って回避している 対象メッセージが入っているセグメントが特定できれば後はそのセグメントの最小オフ セットからPacketのタイムスタンプが対象時間帯に入るまで読み捨て、時間帯に入った ら処理し、外れた瞬間に処理を終える パーティション内のメッセージは時系列順である前提のもと Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17
監視・可視化 監視項目 • broker死活 トピックの流入量(トピックによって敏感度が違う) エンドツーエンドのレイテンシ • • • • 定期的にoffset.reset=largestでオフセットをコミットせずにconsumeして計測している • 様々な変更が入る中で、重要な指標を簡単にチェックするツールが欲しくなった • Elasticsearch + Kibana 採用 トピック毎指標を可視化 • • • • JMXからログ数等のメトリクス推移 エンドツーエンドのレイテンシ推移 一部重要なトピックは全ログ投入 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18
Agenda • • • • Kafka導入経緯 構成、周辺OSS、機能 ユースケース 反省点、課題と感じているところ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19
ユースケース:リアルタイム検索 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20
リアルタイム検索の課題 • • • リアルタイム検索をよりリアルタイムに システムを堅牢にしたい 新機能の追加を容易にしたい Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21
リアルタイム検索 処理内容 リアルタイム検索用データの解析 • • • 機械学習: 感情分析(ポジティブ・ネガティブ) 検索エンジン用データに加工 • • • • テキスト解析(言語、特徴語など抽出) メトリクス(RT、Likeなど)解析 500ミリ秒間隔で検索エンジンに投入 電車の遅延を早く検知してユーザのスマデバにプッシュ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22
感情分析について http://research-lab.yahoo.co.jp/nlp/20140912_post.html Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23
Agenda • • • • Kafka導入経緯 構成、周辺OSS、機能 ユースケース 反省点、課題と感じているところ Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24
Kafka バージョンアップ 0.7系 → 0.8系 producerもconsumerもユーザの自由な方法で繋げるようにしていた • いろ いろな 素のJava ライブラリ サービス Java以外の ライブラリ client 下位互換性無し • • クラスタを2重化して全てのproducer, consumerを書き換えて切り替えた • 重大な反省点となる • 「ユーザが不便だと感じない程度に制限」したい Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25
監視について思うこと 最初は損失も重複も許容 • • ビッグデータだしストリームだし とはもう言えなくなっている • • • 少なくとも検知はしたい 現在はproducerの件数とconsumerの件数突き合わせまでできていない エンドツーエンドで全トピック全量consumeし続けて突き合わせ、 レイテンシチェックするのが一番望ましい • • 少なくともbrokerとしての義務を果たしていると自信を持てるようになる Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26
まとめ KafkaとStormをベースにしたストリームデータ利活用プ ラットフォーム • • • • • • • Hadoopへ保存 共通フォーマットでシリアライズ 処理結果の格納オプションとしてCassandra等 時間帯を指定して再実行するBatchConsumer 指標可視化にはElasticsearchとKibana リアルタイム検索ではテキスト解析、機械学習、異常検知 で利用 Copyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27