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

Preview:

Citation preview

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

Confluent Platformとは?

2016/02/08 Kimura Sotaro(@kimutansk)

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

アジェンダ

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

2. Confluent Platformとは?

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

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

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

1

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

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

2

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

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

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

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

4

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

Kafka

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

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

5

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

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

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

6

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

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

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

7

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Log

Log

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

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

8

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

Log

Log

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

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

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

9

Log

Log

Log

Log Log

Log

Log Log Log

Log

Log

共通的に 使用

Log

Log

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

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

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

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

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

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

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

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

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

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

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

13

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

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

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

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

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

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

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

14

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

Cofluent Platform

2. Confluent Platformとは?

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

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

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

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

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

15

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

• Confluent Platformの構成

16

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

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

• Confluent Platformの構成

17

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

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

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

• Confluent Platformの構成

18

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

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

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

• Confluent Platformの構成

19

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

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

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

• Confluent Platformの構成

20

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

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

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

• Confluent Platformの構成

21

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

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

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

• Confluent Platformの構成

22

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

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

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

• Confluent Platformの構成

23

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

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

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");

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

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

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

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

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

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

26

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”}

]

}

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”}

]

}

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

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

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

Enjoy Confluent Platform!

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

Recommended