スキーマつきストリーム データ処理基盤、 confluent platformとは?

31
スキーマつきストリーム データ処理基盤、 Confluent Platformとは? 2016/02/08 Kimura Sotaro(@kimutansk) https://www.flickr.com/photos/nanoprobe67/5761031999/

Upload: -

Post on 16-Apr-2017

543 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

スキーマつきストリームデータ処理基盤、

Confluent Platformとは?

2016/02/08 Kimura Sotaro(@kimutansk)

https://www.flickr.com/photos/nanoprobe67/5761031999/

Page 2: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

アジェンダ

1. Kafkaを組織で使うと何が困る?

2. Confluent Platformとは?

3. どんな構成になっているの?

4. どうスキーマを定義できる?

5. まとめ:導入するとどう使えるの?

1

Page 3: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

• 元々のKafkaのモチベーション

2

https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

Page 4: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

https://www.flickr.com/photos/kenyee/2817511001/

Page 5: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

• 元々のKafkaのモチベーション

4

https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

Kafka

Page 6: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

• Kafkaを使うことで、データのHubが一元化

5

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Page 7: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

1. Kafkaに組織内で公開して投入可能にすると…?

6

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Page 8: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

1. Kafkaに組織内で公開して投入可能にすると…?

7

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Log

Log

Page 9: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

1. Kafkaに組織内で公開して投入可能にすると…?

8

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Log

Log

違う形式のログが 投入されてしまう!

Page 10: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

2. KafkaクラスタをVersion Upすると…?

9

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Page 11: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

2. KafkaクラスタをVersion Upすると…?

10

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Congratulations ! Kafka Cluster Version updated!

Ver 0.8.2 > Ver 0.9.0

Page 12: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

2. KafkaクラスタをVersion Upすると…?

11

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Congratulations ! Kafka Cluster Version updated!

Ver 0.8.2 > Ver 0.9.0

Page 13: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

2. KafkaクラスタをVersion Upすると…?

12

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Congratulations ! Kafka Cluster Version updated!

Ver 0.8.2 > Ver 0.9.0

クライアントは一部しか提供されない!

Page 14: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

1. 形式に則らないログが投入されてしまう!

• 利用側で変なデータが混ざってエラー発生!

• Topic内で違う形式のログが混ざって流れる!

2. Kafka Version Up時クライアント提供されない!

• Kafkaとのやり取りは独自プロトコル

• Java / C++ のクライアントを入れるのは効率悪い

13

Page 15: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

1. Kafkaを組織で使うと何が困る?

1. 形式に則らないログが投入されてしまう!

• 利用側で変なデータが混ざってエラー発生!

• Topic内で違う形式のログが混ざって流れる!

2. Kafka Version Up時クライアント提供されない!

• Kafkaとのやり取りは独自プロトコル

• Java / C++ のクライアントを入れるのは効率悪い

14

これらの「困ること」に対応するために開発されているのが

Cofluent Platform

Page 16: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

2. Confluent Platformとは?

1. 毎秒大量のデータが到達する環境を整備して 管理可能とするストリームデータ処理基盤

• Kafkaをコアとしておいている

• LinkedinのKafka開発チームがスピンアウトして開発

2. 組織内でデータを統一的に扱うETLバックエンド を構築することを目指して開発

• ドキュメントにガイドラインとして構築時の サーバスペック、移行時のアドバイスなどもある

15

Page 17: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

16

http://docs.confluent.io/2.0.0/platform.html

Page 18: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

17

http://docs.confluent.io/2.0.0/platform.html

Kafkaをコアにおいている Kafkaユーザは容易に段階的に導入可能

Page 19: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

18

http://docs.confluent.io/2.0.0/platform.html

JDBC Connector DBのデータを取得しTopicに投入

Page 20: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

19

http://docs.confluent.io/2.0.0/platform.html

HDFS Connector Topicのデータを変換してHDFSに投入

Page 21: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

20

http://docs.confluent.io/2.0.0/platform.html

C/C++ library: librdkafka Producer / Consumerに対応したネイティブライブラリ

Page 22: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

21

http://docs.confluent.io/2.0.0/platform.html

Proactive Support メトリクスを収集、SaaSへ送信する機構

Page 23: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

22

http://docs.confluent.io/2.0.0/platform.html

Schema Registry Topic中のデータスキーマを管理、検証

Page 24: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Confluent Platformの構成

23

http://docs.confluent.io/2.0.0/platform.html

Rest Proxy Kafkaの基本的な機能とスキーマ機能を利用可能なRest API

Page 25: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

3. どんな構成になっているの?

• Kafkaを組織で使いやすくするには下記2機能が大きい 1. Schema Registry

– Topicのデータスキーマを保持し、管理

– スキーマのバージョン間互換性の確認が可能

2. Rest Proxy – Kafkaへのアクセス(主にメッセージ投入)をRest APIを通して実行可能

– JVM言語 / C++ 以外からKafkaを利用しやすくする

– Schema Registryとの連携も提供

• 既存のKafka利用アプリケーション(JVM言語)では 設定を追加することでスキーマ管理 / 検証が可能

24

Properties props = new Properties();

props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,

io.confluent.kafka.serializers.KafkaAvroSerializer.class);

props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,

io.confluent.kafka.serializers.KafkaAvroSerializer.class);

props.put("schema.registry.url", "http://localhost:8081");

Page 26: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

4. どうスキーマを定義できる?

• JSON形式のAvro Schemaで定義

25

{"namespace": "example.avro",

"type": "record",

"name": "user",

"fields": [

{"name": "name", "type": "string"},

{"name": “age", "type": “int"},

{"name": "favorite_number", "type": "int“}

]

}

name age favorite_number

Andy 25 7

Bob 27 666

Page 27: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

4. どうスキーマを定義できる?

• 下記の3つの互換性定義を保持し、使い分け可能 • スキーマ更新時に検証が行われる。

1. 後方互換(Backword Compatibility) – 古い形式のデータを新しいスキーマで読める。

2. 前方互換(Forward Compatibility) – 新しい形式のデータを古いスキーマで読める。

3. 完全互換(Full Compatibility) – 後方互換、かつ前方互換の場合

26

Page 28: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

4. どうスキーマを定義できる?

• 例えば、後方互換とは・・・

27

name age favorite_number favorite_color

Andy 25 7 (null)

Bob 27 666 (null)

Charly 32 13 violet

{"namespace": "example.avro",

"type": "record",

"name": "user",

"fields": [

{"name": "name", "type": "string"},

{"name": “age", "type": “int"},

{"name": "favorite_number", "type": "int“},

{"name": "favorite_color", "type": “string“, “default”: “green”}

]

}

Page 29: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

4. どうスキーマを定義できる?

• 例えば、後方互換とは・・・

28

name age favorite_number favorite_color

Andy 25 7 (null)

Bob 27 666 (null)

Charly 32 13 violet

{"namespace": "example.avro",

"type": "record",

"name": "user",

"fields": [

{"name": "name", "type": "string"},

{"name": “age", "type": “int"},

{"name": "favorite_number", "type": "int“},

{"name": "favorite_color", "type": “string“, “default”: “green”}

]

}

存在しないカラムを デフォルトとして読むことで

古いデータを新しいスキーマで読める!

Page 30: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

5. まとめ:導入するとどう使えるの?

• Confluent Platform導入で出来るようになること 1. KafkaのあるTopicに入っているデータ形式の明確な管理

– 現在投入中のスキーマを見ることで形式がわかる

– スキーマ更新時の互換性確保で影響範囲を明確化可能

2. KafkaをRest APIでライトに使用可能 – Kafkaの独自プロトコルに追従しなくても様々な言語から使用可能

– 投入時、スキーマ検証とシリアライズも併せて実施

– 但しConsumerは現状性能が低いのでお勧めしません。 実質Producer側のみ。

3. 既存の(JVM系)Kafkaアプリケーションは設定追加で対応 – 例ではコードだが、 実際はプロパティファイルへの追記で対応可能

• 他副次効果 – Kafka保存時にAvro形式にシリアライズされるため容量削減

– Schema Registryをスキーマ管理場所につかって SparkのRDD > DataFrame > Parquet変換に使用。

29

Page 31: スキーマつきストリーム データ処理基盤、 Confluent Platformとは?

Enjoy Confluent Platform!

https://www.flickr.com/photos/nanoprobe67/5746249953/