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.5k
アプリから集まるイベントデータのリアルタイム処理入門
tandfy
June 19, 2020
Tweet
Share
More Decks by tandfy
See All by tandfy
Amazon SageMakerの最新アップデートの紹介
tandfy
1
890
Amazon Personalizeではじめるレコメンドサービス
tandfy
0
1.1k
DeepRacerで学ぶ機械学習 1.1
tandfy
0
990
DeepRacerで始める機械学習
tandfy
1
1.7k
DeepRacerでまなぶ強化学習
tandfy
1
1.4k
Amazon SageMakerではじめる物体検出
tandfy
1
1k
Other Decks in Programming
See All in Programming
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
330
童醫院敏捷轉型的實踐經驗
cclai999
0
180
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.2k
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
420
関数型まつりレポート for JuliaTokai #22
antimon2
0
150
Select API from Kotlin Coroutine
jmatsu
1
190
WindowInsetsだってテストしたい
ryunen344
1
190
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
340
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
250
ReadMoreTextView
fornewid
1
460
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
150
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
310
Featured
See All Featured
Speed Design
sergeychernyshev
32
1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
GraphQLとの向き合い方2022年版
quramy
47
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The World Runs on Bad Software
bkeepers
PRO
69
11k
A designer walks into a library…
pauljervisheath
206
24k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
Embracing the Ebb and Flow
colly
86
4.7k
Rails Girls Zürich Keynote
gr2m
94
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
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