Slide 1

Slide 1 text

1 GCPでStreamなデータパイプライン作った {“id”: “@shoe116”, “team”: “Data Platform”}

Slide 2

Slide 2 text

2 mercariのlog収集の歴史とマイクロサービス化 GCPでStreamなデータパイプライン作った GCPで作ったStreamなデータパイプラインの概要 AvroとDataFlowを使ったETL処理 今日のまとめ 02 03 04 01

Slide 3

Slide 3 text

3 - Mercari Data Platform - Stream/Batch Pipeline Developer - Scala, Python, Java, Go, etc - Apache Beam, Kafka, Storm, Hive, Hadoop… Shu Suzuki @shoe116

Slide 4

Slide 4 text

4 指定された区間(data sources - data sinks)で データパイプライン? 信頼性のあるデータ処理やデータ転送を 安定的に提供する仕組み 2. 3. 1. 今回は「本番環境のlogを、DWH等の分析環境に届ける」ことを 主眼にしたデータパイプラインについて話します。

Slide 5

Slide 5 text

5 Mercariのlog収集の歴史と マイクロサービス化

Slide 6

Slide 6 text

6 既存のlog収集の仕組み モノリスのWebアプリケーションのlogをfluentdで伝搬しbatch処理

Slide 7

Slide 7 text

7 マイクロサービスのアーキテクチャ データパイプライン的に言うと、data-sourceが不特定多数になる ??

Slide 8

Slide 8 text

8 GCPで作った Streamなデータパイプラインの概要

Slide 9

Slide 9 text

9 メッセージ志向ミドルウェア(G製Kafka) 使っているGCPのサービス Beamで記述できる処理エンジン(G製Flink) Cloud Dataflow Cloud Pub/Sub Cloud Storage マルチリージョナルなオブジェクトストレージ BigQuery 大量データ向けのG製DWH、GCSからも読める。

Slide 10

Slide 10 text

10 新しい Stream データパイプライン 各MSのRamp TopicからDataHubへ集約、GCSとBigQueryへStore

Slide 11

Slide 11 text

11 各MSごとに設けられたデータの投入口 各Cloud Pub/SubのTopicの役割 Rampsのデータを1つのTopicに集約したTopic Raw DataHub Ramps 構造化されたSchema付きAvroが流れるTopic Structured DataHub

Slide 12

Slide 12 text

12 Raw DataHubのデータを出力するGCS bucket 各データストアの役割 Structurd Datahubのデータを出力するGCS bucket Structured DataLake Raw DataLake Structured DataHubのデータを出力するBig Query DWH

Slide 13

Slide 13 text

13 AvroとDataflowを使ったETL処理

Slide 14

Slide 14 text

14 DataHub Avro format {"type": "record", "name": "DataHubAvro", "namespace": "com.mercari.data.model.v3", "fields": [{ {"name": "uuid", "type": "string"}, {"name": "timestamp", "type": { "type": "long", "logicalType": "timestamp-micros" }}, {"name": "topic_name", "type": "string"}, {"name": "service_name", "type": "string"}, {"name": "log_name", "type": "string"}, {"name": "content_type", "type": ["null", "string"], "default": null}, {"name": "user_agent", "type": ["null", "string"], "default": null}, {"name": "payload","type": "bytes"} ]} } パイプラインの共通フォーマット Avroを採用した理由 - AvroはそのままGCSに書ける - AvroはそのままBQに書ける - Avro fileはBQから直接読める DataHub Avro に含まれるもの - パイプラインのdestination - Schemaの引き当て情報 - データ本体

Slide 15

Slide 15 text

15 Map処理でRampsからデータを読む Ramps -> Raw DataHubのETL 共通のDataHub Avro formatに変換 全レコードをRaw DataHubにwrite T L E

Slide 16

Slide 16 text

16 Raw DataHubからデータを読む Raw DataHub -> Structured DataHub のETL DataHub Avroのpayloadのbyte[]を、 構造化されたAvroに変換する T L E 全レコードをStructured DataHubにwrite

Slide 17

Slide 17 text

17 サービスのMS化に伴いパイプラインも進化が求められる 今日のまとめ 不特定多数のdata sourceを想定して設計、開発中 Google Cloud Pratformの各サービスとAvroを利用 We are hiring! 02 03 04 01 https://mercari.workable.com/jobs/765272