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
1k
DeepRacerで始める機械学習
tandfy
1
1.7k
DeepRacerでまなぶ強化学習
tandfy
1
1.4k
Amazon SageMakerではじめる物体検出
tandfy
1
1.1k
Other Decks in Programming
See All in Programming
ソフトウェアテスト徹底指南書の紹介
goyoki
1
110
令和最新版手のひらコンピュータ
koba789
14
8k
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
140
自作OSでDOOMを動かしてみた
zakki0925224
1
1.4k
ゲームの物理
fadis
5
1.5k
兎に角、コードレビュー
mitohato14
0
150
AI OCR API on Lambdaを Datadogで可視化してみた
nealle
0
180
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
490
Constant integer division faster than compiler-generated code
herumi
2
690
AIレビュアーをスケールさせるには / Scaling AI Reviewers
technuma
2
230
CSC305 Summer Lecture 05
javiergs
PRO
0
110
ライブ配信サービスの インフラのジレンマ -マルチクラウドに至ったワケ-
mirrativ
2
260
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Documentation Writing (for coders)
carmenintech
73
5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Automating Front-end Workflow
addyosmani
1370
200k
Navigating Team Friction
lara
189
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Embracing the Ebb and Flow
colly
87
4.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
GraphQLとの向き合い方2022年版
quramy
49
14k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
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