Slide 1

Slide 1 text

アプリから集まるイベントデータの リアルタイムデータ処理⼊⾨ 2020/06/19 ⼤澤 勇⽃

Slide 2

Slide 2 text

2 ⾃⼰紹介 ⼤澤 勇⽃ クラスメソッド株式会社 CX事業本部 ⻄⽇本チーム サーバサイドエンジニア

Slide 3

Slide 3 text

3 これまでと今 ~2020年3⽉ 機械学習システム開発

Slide 4

Slide 4 text

4 これまでと今 ~2020年3⽉ 機械学習システム開発 機械学習やデータだけでは× アプリケーションが重要

Slide 5

Slide 5 text

5 これまでと今 ~2020年3⽉ 機械学習システム開発 2020年4⽉~ アプリケーション開発 機械学習やデータだけでは× アプリケーションが重要

Slide 6

Slide 6 text

6 アプリ × データ

Slide 7

Slide 7 text

7 アプリケーション × データ リアルタイムデータ処理って便利そう︕︕

Slide 8

Slide 8 text

8 アプリケーション × データ リアルタイムデータ処理って便利そう︕︕ けれども、かなり⾯倒な印象がある…

Slide 9

Slide 9 text

9 調べてみよう︕

Slide 10

Slide 10 text

10 調べてみよう︕ と⾔うのが今回の動機

Slide 11

Slide 11 text

11 今回の流れ • どう便利そうなのか • ⽤語と概念 • AWSでのリアルタイムデータ処理 • 活⽤例 • まとめ

Slide 12

Slide 12 text

12 リアルタイムデータ処理は どう便利そうなのか

Slide 13

Slide 13 text

13 レコメンドで考えてみる

Slide 14

Slide 14 text

14 レコメンドの構成例 ΞϓϦέʔγϣϯ "1* αʔόʔ Ϩίϝϯυ Πϕϯτ Πϕϯτ Ϩίϝϯυ ,JOFTJT %BUB 4USFBNT -BNCEB ,JOFTJT %BUB 'JSFIPTF 4 ੜσʔλ 1FSTPOBMJ[F Πϕϯτ Πϕϯτ Πϕϯτ $MPVE8BUDI &WFOU -BNCEB ఆظ࣮ߦ ιϦϡʔ γϣϯ࡞੒

Slide 15

Slide 15 text

15 特徴 • イベントを収集し、イベントを元にしたレコメンド が可能 • ユーザによる操作イベントがレコメンドに反映され るのはほぼリアルタイム • レコメンドエンジンを定期的に更新 • 全イベントデータを使ったモデルの再学習

Slide 16

Slide 16 text

16 多くのケースにおいて、リアルタイム 性を求められることはない

Slide 17

Slide 17 text

17 けれども、リアルタイムデータ処理によって… • 分析・アプリケーション改善の速度アップ • アプリケーションでの表現に利⽤するデータ 処理・更新の速度アップ • 新しい機能や表現が可能に

Slide 18

Slide 18 text

18 ユーザー体験の向上につながる そして、 アプリ利⽤者数の増加へ

Slide 19

Slide 19 text

19 ⾯倒かもしれないけど 試してみる価値はありそう…!

Slide 20

Slide 20 text

20 まずは不安を解消するために リアルタイムデータ処理を より具体化しよう!

Slide 21

Slide 21 text

21 ⽤語と概念

Slide 22

Slide 22 text

22 リアルタイムデータ処理とは リアルタイムにデータを処理すること

Slide 23

Slide 23 text

23 リアルタイムデータ処理とは リアルタイムにデータを処理すること ストリーム処理

Slide 24

Slide 24 text

24 データ処理の種類 • バッチ処理 • 塊として保存されてるデータへの処理 • 有限のデータに対する処理 • ストリーム処理 • 終わりなく流れてくるデータへの処理 • 無限のデータに対する処理

Slide 25

Slide 25 text

25 バッチ処理のイメージ σʔλ σʔλ ॲཧޙ ॲཧ

Slide 26

Slide 26 text

26 ストリーム処理のイメージ σʔλ σʔλ ॲཧޙ ॲཧ バッチ処理と異なり、流れてくるデータに終わりがない ->まとめて処理する場合には範囲を定める必要がある

Slide 27

Slide 27 text

27 ストリーム処理の要素(ストリームベース) イベントを⽣成する プロデューサーから データを取得し、 保持する ストリームから データを取得し 処理する ϓϩσϡʔαʔ ετϦʔϜ ϒϩʔΧʔ ίϯγϡʔϚʔ

Slide 28

Slide 28 text

28 ストリーム処理の要素(オペレーターベース) データを流す ソースからデータを 取得し、処理する 処理したデータが 流され、蓄積される ιʔε ετϦʔϜ ΦϖϨʔλʔ γϯΫ

Slide 29

Slide 29 text

29 代表的なソース • Apache Kafka • Amazon Kinesis Data Streams • Amazon Kinesis Data Firehose • Google Cloud PubSub

Slide 30

Slide 30 text

30 代表的なシンク • Apache Kafka • Elasticsearch • Amazon Kinesis Data Streams • Amazon Kinesis Data Firehose • Amazon S3 • Google Cloud PubSub

Slide 31

Slide 31 text

31 代表的なオペレータ • Map • 各レコード毎に処理する • Filter • 各レコード毎に内容に応じた絞り込みをする • Window • レコードの時間に応じて、ストリーム内のレ コードをグループ化する • 集計を⾏う他のオペレータと併⽤する

Slide 32

Slide 32 text

32 オペレータの種類 • ステートレス • レコード毎に処理する • 例: Map, Filter • ステートフル • レコードの内容をもとに複数のレコードをグ ループ化して、処理する • 例: Window

Slide 33

Slide 33 text

33 ステートレス γϯΫ ΦϖϨʔλʔ ιʔε

Slide 34

Slide 34 text

34 ステートフル ιʔε γϯΫ ΦϖϨʔλʔ

Slide 35

Slide 35 text

35 ストリーム処理における3種類の時間 • イベント時間(Event Time) • イベントが実際に発⽣した時間 • 注⼊時間(Ingestion Time) • ソースに読み込まれた(注⼊された)時間 • 処理時間(Processing Time) • オペレータで処理された時間

Slide 36

Slide 36 text

36 3種類の時間のイメージ ϓϩσϡʔαʔ ετϦʔϜ Πϕϯτ࣌ؒ ΦϖϨʔλʔ ஫ೖ࣌ؒ Πϕϯτ Πϕϯτ ॲཧ࣌ؒ

Slide 37

Slide 37 text

37 気になった⽤語 • 透かし、ウォーターマーク(Watermark) • ウィンドウ処理時の最⼤遅延時間 • 遅延: 注⼊時間 - イベント時間 • 注⼊時間の遅れをどれだけ考慮するか • チェックポイント • どこまで処理したかの記録

Slide 38

Slide 38 text

38 レコードの処理回数の保証 • Exactly once • 各レコードは必ず⼀回だけ処理される • At least once • 各レコードは少なくとも⼀回は処理される • At most once • 各レコードは最⼤⼀回は処理される

Slide 39

Slide 39 text

39 レコードの処理回数の保証 • Exactly once • 各レコードは必ず⼀回だけ処理される • At least once • 各レコードは少なくとも⼀回は処理される • At most once • 各レコードは最⼤⼀回は処理される プラットフォームや処理によって違うため 要件に応じて確認が必要

Slide 40

Slide 40 text

40 どんな感じで実現できるのか ⾒てみよう!

Slide 41

Slide 41 text

41 AWS での リアルタイムデータ処理

Slide 42

Slide 42 text

42 Kinesis Data Streams ϓϩσϡʔαʔ ίϯγϡʔϚʔ ετϦʔϜ ,JOFTJT %BUB4USFBNT

Slide 43

Slide 43 text

43 Kinesis Data Firehose ετϦʔϜ ίϯγϡʔϚʔ ετϦʔϜ ΦϖϨʔλʔ ετϦʔϜ ίϯγϡʔϚʔ ετϦʔϜ ΦϖϨʔλʔ ϓϩσϡʔαʔ γϯΫ 43FETIJGU &MBTUJDTFBSDI4FSWJDF 4QMVOL ,JOFTJT %BUB'JSFIPTF ϓϩσϡʔαʔ γϯΫ 43FETIJGU &MBTUJDTFBSDI4FSWJDF 4QMVOL ,JOFTJT %BUB'JSFIPTF -BNCEB

Slide 44

Slide 44 text

44 Kinesis Data Analytics ΦϖϨʔλʔ ιʔε ετϦʔϜ ,JOFTJT γϯΫ ,JOFTJT %BUB"OBMZUJDT

Slide 45

Slide 45 text

45 Glue (Spark Streaming ジョブタイプ) ΦϖϨʔλʔ ιʔε ετϦʔϜ ,JOFTJT,BGLB γϯΫ (MVF 4QBSL4USFBNJOH

Slide 46

Slide 46 text

46 活⽤例

Slide 47

Slide 47 text

47 レコメンド(再掲) ΞϓϦέʔγϣϯ "1* αʔόʔ Ϩίϝϯυ Πϕϯτ Πϕϯτ Ϩίϝϯυ ,JOFTJT %BUB 4USFBNT -BNCEB ,JOFTJT %BUB 'JSFIPTF 4 ੜσʔλ 1FSTPOBMJ[F Πϕϯτ Πϕϯτ Πϕϯτ $MPVE8BUDI &WFOU -BNCEB ఆظ࣮ߦ ιϦϡʔ γϣϯ࡞੒

Slide 48

Slide 48 text

48 可視化アプリ ΞϓϦέʔγϣϯ "1* αʔόʔ Πϕϯτ ΞϓϦ ूܭσʔλ Πϕϯτ Πϕϯτ %# αʔόʔ ΞϓϦ ूܭσʔλ ,JOFTJT %BUB4USFBNT -BNCEB

Slide 49

Slide 49 text

49 分析 ΞϓϦέʔγϣϯ Πϕϯτ Πϕϯτ ,JOFTJT %BUB 'JSFIPTF #* ूܭ σʔλ 3FETIJGU

Slide 50

Slide 50 text

50 分析 データ処理版 ΞϓϦέʔγϣϯ Πϕϯτ Πϕϯτ ,JOFTJT %BUB 'JSFIPTF Ճ޻ूܭ σʔλ ,JOFTJT %BUB "OBMZUJDT ,JOFTJT %BUB 'JSFIPTF Ճ޻ूܭ σʔλ 3FETIJGU 4 ੜσʔλ #* ूܭ σʔλ

Slide 51

Slide 51 text

51 リアルタイムデータ処理 理解深まったでしょうか…?

Slide 52

Slide 52 text

52 まとめ リアルタイムデータ処理を活⽤して、ユーザー体験の向 上、そして、アプリ利⽤者を増加へ… • リアルタイムデータ処理 -> ストリーム処理 • ストリーム処理には独特な⽤語や概念が多い • サービスを活⽤してストリーム処理を少しでも楽に • ->Kinesisファミリー+α

Slide 53

Slide 53 text

No content