Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリから集まるイベントデータのリアルタイム処理入門
Search
tandfy
June 19, 2020
Programming
0
1.4k
アプリから集まるイベントデータのリアルタイム処理入門
tandfy
June 19, 2020
Tweet
Share
More Decks by tandfy
See All by tandfy
Amazon SageMakerの最新アップデートの紹介
tandfy
1
850
Amazon Personalizeではじめるレコメンドサービス
tandfy
0
1k
DeepRacerで学ぶ機械学習 1.1
tandfy
0
930
DeepRacerで始める機械学習
tandfy
1
1.6k
DeepRacerでまなぶ強化学習
tandfy
1
1.3k
Amazon SageMakerではじめる物体検出
tandfy
1
990
Other Decks in Programming
See All in Programming
Piniaの現状と今後
waka292
5
1.5k
Nuxtベースの「WXT」でChrome拡張を作成する | Vue Fes 2024 ランチセッション
moshi1121
1
520
Dev ContainersとGitHub Codespacesの素敵な関係
ymd65536
1
130
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
Golang と Erlang
taiyow
8
1.9k
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
23k
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
140
RailsのPull requestsのレビューの時に私が考えていること
yahonda
5
1.7k
PagerDuty を軸にした On-Call 構築と運用課題の解決 / PagerDuty Japan Community Meetup 4
horimislime
1
110
推し活の ハイトラフィックに立ち向かう Railsとアーキテクチャ - Kaigi on Rails 2024
falcon8823
6
2.2k
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.3k
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
Featured
See All Featured
Building an army of robots
kneath
302
42k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Navigating Team Friction
lara
183
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Making Projects Easy
brettharned
115
5.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Speed Design
sergeychernyshev
24
570
A designer walks into a library…
pauljervisheath
202
24k
Transcript
アプリから集まるイベントデータの リアルタイムデータ処理⼊⾨ 2020/06/19 ⼤澤 勇⽃
2 ⾃⼰紹介 ⼤澤 勇⽃ クラスメソッド株式会社 CX事業本部 ⻄⽇本チーム サーバサイドエンジニア
3 これまでと今 ~2020年3⽉ 機械学習システム開発
4 これまでと今 ~2020年3⽉ 機械学習システム開発 機械学習やデータだけでは× アプリケーションが重要
5 これまでと今 ~2020年3⽉ 機械学習システム開発 2020年4⽉~ アプリケーション開発 機械学習やデータだけでは× アプリケーションが重要
6 アプリ × データ
7 アプリケーション × データ リアルタイムデータ処理って便利そう︕︕
8 アプリケーション × データ リアルタイムデータ処理って便利そう︕︕ けれども、かなり⾯倒な印象がある…
9 調べてみよう︕
10 調べてみよう︕ と⾔うのが今回の動機
11 今回の流れ • どう便利そうなのか • ⽤語と概念 • AWSでのリアルタイムデータ処理 • 活⽤例
• まとめ
12 リアルタイムデータ処理は どう便利そうなのか
13 レコメンドで考えてみる
14 レコメンドの構成例 ΞϓϦέʔγϣϯ "1* αʔόʔ Ϩίϝϯυ Πϕϯτ Πϕϯτ Ϩίϝϯυ ,JOFTJT
%BUB 4USFBNT -BNCEB ,JOFTJT %BUB 'JSFIPTF 4 ੜσʔλ 1FSTPOBMJ[F Πϕϯτ Πϕϯτ Πϕϯτ $MPVE8BUDI &WFOU -BNCEB ఆظ࣮ߦ ιϦϡʔ γϣϯ࡞
15 特徴 • イベントを収集し、イベントを元にしたレコメンド が可能 • ユーザによる操作イベントがレコメンドに反映され るのはほぼリアルタイム • レコメンドエンジンを定期的に更新
• 全イベントデータを使ったモデルの再学習
16 多くのケースにおいて、リアルタイム 性を求められることはない
17 けれども、リアルタイムデータ処理によって… • 分析・アプリケーション改善の速度アップ • アプリケーションでの表現に利⽤するデータ 処理・更新の速度アップ • 新しい機能や表現が可能に
18 ユーザー体験の向上につながる そして、 アプリ利⽤者数の増加へ
19 ⾯倒かもしれないけど 試してみる価値はありそう…!
20 まずは不安を解消するために リアルタイムデータ処理を より具体化しよう!
21 ⽤語と概念
22 リアルタイムデータ処理とは リアルタイムにデータを処理すること
23 リアルタイムデータ処理とは リアルタイムにデータを処理すること ストリーム処理
24 データ処理の種類 • バッチ処理 • 塊として保存されてるデータへの処理 • 有限のデータに対する処理 • ストリーム処理
• 終わりなく流れてくるデータへの処理 • 無限のデータに対する処理
25 バッチ処理のイメージ σʔλ σʔλ ॲཧޙ ॲཧ
26 ストリーム処理のイメージ σʔλ σʔλ ॲཧޙ ॲཧ バッチ処理と異なり、流れてくるデータに終わりがない ->まとめて処理する場合には範囲を定める必要がある
27 ストリーム処理の要素(ストリームベース) イベントを⽣成する プロデューサーから データを取得し、 保持する ストリームから データを取得し 処理する ϓϩσϡʔαʔ
ετϦʔϜ ϒϩʔΧʔ ίϯγϡʔϚʔ
28 ストリーム処理の要素(オペレーターベース) データを流す ソースからデータを 取得し、処理する 処理したデータが 流され、蓄積される ιʔε ετϦʔϜ ΦϖϨʔλʔ
γϯΫ
29 代表的なソース • Apache Kafka • Amazon Kinesis Data Streams
• Amazon Kinesis Data Firehose • Google Cloud PubSub
30 代表的なシンク • Apache Kafka • Elasticsearch • Amazon Kinesis
Data Streams • Amazon Kinesis Data Firehose • Amazon S3 • Google Cloud PubSub
31 代表的なオペレータ • Map • 各レコード毎に処理する • Filter • 各レコード毎に内容に応じた絞り込みをする
• Window • レコードの時間に応じて、ストリーム内のレ コードをグループ化する • 集計を⾏う他のオペレータと併⽤する
32 オペレータの種類 • ステートレス • レコード毎に処理する • 例: Map, Filter
• ステートフル • レコードの内容をもとに複数のレコードをグ ループ化して、処理する • 例: Window
33 ステートレス γϯΫ ΦϖϨʔλʔ ιʔε
34 ステートフル ιʔε γϯΫ ΦϖϨʔλʔ
35 ストリーム処理における3種類の時間 • イベント時間(Event Time) • イベントが実際に発⽣した時間 • 注⼊時間(Ingestion Time)
• ソースに読み込まれた(注⼊された)時間 • 処理時間(Processing Time) • オペレータで処理された時間
36 3種類の時間のイメージ ϓϩσϡʔαʔ ετϦʔϜ Πϕϯτ࣌ؒ ΦϖϨʔλʔ ೖ࣌ؒ Πϕϯτ Πϕϯτ ॲཧ࣌ؒ
37 気になった⽤語 • 透かし、ウォーターマーク(Watermark) • ウィンドウ処理時の最⼤遅延時間 • 遅延: 注⼊時間 -
イベント時間 • 注⼊時間の遅れをどれだけ考慮するか • チェックポイント • どこまで処理したかの記録
38 レコードの処理回数の保証 • Exactly once • 各レコードは必ず⼀回だけ処理される • At least
once • 各レコードは少なくとも⼀回は処理される • At most once • 各レコードは最⼤⼀回は処理される
39 レコードの処理回数の保証 • Exactly once • 各レコードは必ず⼀回だけ処理される • At least
once • 各レコードは少なくとも⼀回は処理される • At most once • 各レコードは最⼤⼀回は処理される プラットフォームや処理によって違うため 要件に応じて確認が必要
40 どんな感じで実現できるのか ⾒てみよう!
41 AWS での リアルタイムデータ処理
42 Kinesis Data Streams ϓϩσϡʔαʔ ίϯγϡʔϚʔ ετϦʔϜ ,JOFTJT %BUB4USFBNT
43 Kinesis Data Firehose ετϦʔϜ ίϯγϡʔϚʔ ετϦʔϜ ΦϖϨʔλʔ ετϦʔϜ ίϯγϡʔϚʔ
ετϦʔϜ ΦϖϨʔλʔ ϓϩσϡʔαʔ γϯΫ 43FETIJGU &MBTUJDTFBSDI4FSWJDF 4QMVOL ,JOFTJT %BUB'JSFIPTF ϓϩσϡʔαʔ γϯΫ 43FETIJGU &MBTUJDTFBSDI4FSWJDF 4QMVOL ,JOFTJT %BUB'JSFIPTF -BNCEB
44 Kinesis Data Analytics ΦϖϨʔλʔ ιʔε ετϦʔϜ ,JOFTJT γϯΫ ,JOFTJT
%BUB"OBMZUJDT
45 Glue (Spark Streaming ジョブタイプ) ΦϖϨʔλʔ ιʔε ετϦʔϜ ,JOFTJT,BGLB γϯΫ
(MVF 4QBSL4USFBNJOH
46 活⽤例
47 レコメンド(再掲) ΞϓϦέʔγϣϯ "1* αʔόʔ Ϩίϝϯυ Πϕϯτ Πϕϯτ Ϩίϝϯυ ,JOFTJT
%BUB 4USFBNT -BNCEB ,JOFTJT %BUB 'JSFIPTF 4 ੜσʔλ 1FSTPOBMJ[F Πϕϯτ Πϕϯτ Πϕϯτ $MPVE8BUDI &WFOU -BNCEB ఆظ࣮ߦ ιϦϡʔ γϣϯ࡞
48 可視化アプリ ΞϓϦέʔγϣϯ "1* αʔόʔ Πϕϯτ ΞϓϦ ूܭσʔλ Πϕϯτ Πϕϯτ
%# αʔόʔ ΞϓϦ ूܭσʔλ ,JOFTJT %BUB4USFBNT -BNCEB
49 分析 ΞϓϦέʔγϣϯ Πϕϯτ Πϕϯτ ,JOFTJT %BUB 'JSFIPTF #* ूܭ
σʔλ 3FETIJGU
50 分析 データ処理版 ΞϓϦέʔγϣϯ Πϕϯτ Πϕϯτ ,JOFTJT %BUB 'JSFIPTF Ճूܭ
σʔλ ,JOFTJT %BUB "OBMZUJDT ,JOFTJT %BUB 'JSFIPTF Ճूܭ σʔλ 3FETIJGU 4 ੜσʔλ #* ूܭ σʔλ
51 リアルタイムデータ処理 理解深まったでしょうか…?
52 まとめ リアルタイムデータ処理を活⽤して、ユーザー体験の向 上、そして、アプリ利⽤者を増加へ… • リアルタイムデータ処理 -> ストリーム処理 • ストリーム処理には独特な⽤語や概念が多い
• サービスを活⽤してストリーム処理を少しでも楽に • ->Kinesisファミリー+α
None