Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,303 views

Published on

#hcj2016 Hadoop / Spark Conference Japan 2016 LT資料

Published in: Engineering

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

  1. 1. スキーマつきストリーム データ処理基盤、 Confluent Platformとは? 2016/02/08 Kimura Sotaro(@kimutansk) https://www.flickr.com/photos/nanoprobe67/5761031999/
  2. 2. アジェンダ 1. Kafkaを組織で使うと何が困る? 2. Confluent Platformとは? 3. どんな構成になっているの? 4. どうスキーマを定義できる? 5. まとめ:導入するとどう使えるの? 1
  3. 3. 1. Kafkaを組織で使うと何が困る? • 元々のKafkaのモチベーション 2 https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
  4. 4. https://www.flickr.com/photos/kenyee/2817511001/
  5. 5. 1. Kafkaを組織で使うと何が困る? • 元々のKafkaのモチベーション 4 https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying Kafka
  6. 6. 1. Kafkaを組織で使うと何が困る? • Kafkaを使うことで、データのHubが一元化 5 Log Log Log Log Log Log Log Log Log Log Log 共通的に 使用
  7. 7. 1. Kafkaを組織で使うと何が困る? 1. Kafkaに組織内で公開して投入可能にすると…? 6 Log Log Log Log Log Log Log Log Log Log Log 共通的に 使用 Log Log
  8. 8. 1. Kafkaを組織で使うと何が困る? 1. Kafkaに組織内で公開して投入可能にすると…? 7 Log Log Log Log Log Log Log Log Log Log Log 共通的に 使用 Log Log Log Log
  9. 9. 1. Kafkaを組織で使うと何が困る? 1. Kafkaに組織内で公開して投入可能にすると…? 8 Log Log Log Log Log Log Log Log Log Log Log 共通的に 使用 Log Log Log Log 違う形式のログが 投入されてしまう!
  10. 10. 1. Kafkaを組織で使うと何が困る? 2. KafkaクラスタをVersion Upすると…? 9 Log Log Log Log Log Log Log Log Log Log Log 共通的に 使用 Log Log
  11. 11. 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
  12. 12. 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
  13. 13. 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 クライアントは一部 しか提供されない!
  14. 14. 1. Kafkaを組織で使うと何が困る? 1. 形式に則らないログが投入されてしまう! • 利用側で変なデータが混ざってエラー発生! • Topic内で違う形式のログが混ざって流れる! 2. Kafka Version Up時クライアント提供されない! • Kafkaとのやり取りは独自プロトコル • Java / C++ のクライアントを入れるのは効率悪い 13
  15. 15. 1. Kafkaを組織で使うと何が困る? 1. 形式に則らないログが投入されてしまう! • 利用側で変なデータが混ざってエラー発生! • Topic内で違う形式のログが混ざって流れる! 2. Kafka Version Up時クライアント提供されない! • Kafkaとのやり取りは独自プロトコル • Java / C++ のクライアントを入れるのは効率悪い 14 これらの「困ること」に対応するために開発されているのが Cofluent Platform
  16. 16. 2. Confluent Platformとは? 1. 毎秒大量のデータが到達する環境を整備して 管理可能とするストリームデータ処理基盤 • Kafkaをコアとしておいている • LinkedinのKafka開発チームがスピンアウトして開発 2. 組織内でデータを統一的に扱うETLバックエンド を構築することを目指して開発 • ドキュメントにガイドラインとして構築時の サーバスペック、移行時のアドバイスなどもある 15
  17. 17. 3. どんな構成になっているの? • Confluent Platformの構成 16 http://docs.confluent.io/2.0.0/platform.html
  18. 18. 3. どんな構成になっているの? • Confluent Platformの構成 17 http://docs.confluent.io/2.0.0/platform.html Kafkaをコアにおいている Kafkaユーザは容易に段階的に導入可能
  19. 19. 3. どんな構成になっているの? • Confluent Platformの構成 18 http://docs.confluent.io/2.0.0/platform.html JDBC Connector DBのデータを取得しTopicに投入
  20. 20. 3. どんな構成になっているの? • Confluent Platformの構成 19 http://docs.confluent.io/2.0.0/platform.html HDFS Connector Topicのデータを変換してHDFSに投入
  21. 21. 3. どんな構成になっているの? • Confluent Platformの構成 20 http://docs.confluent.io/2.0.0/platform.html C/C++ library: librdkafka Producer / Consumerに対応したネイティブライブラリ
  22. 22. 3. どんな構成になっているの? • Confluent Platformの構成 21 http://docs.confluent.io/2.0.0/platform.html Proactive Support メトリクスを収集、SaaSへ送信する機構
  23. 23. 3. どんな構成になっているの? • Confluent Platformの構成 22 http://docs.confluent.io/2.0.0/platform.html Schema Registry Topic中のデータスキーマを管理、検証
  24. 24. 3. どんな構成になっているの? • Confluent Platformの構成 23 http://docs.confluent.io/2.0.0/platform.html Rest Proxy Kafkaの基本的な機能とスキーマ機能を利用可能なRest API
  25. 25. 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");
  26. 26. 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
  27. 27. 4. どうスキーマを定義できる? • 下記の3つの互換性定義を保持し、使い分け可能 • スキーマ更新時に検証が行われる。 1. 後方互換(Backword Compatibility) – 古い形式のデータを新しいスキーマで読める。 2. 前方互換(Forward Compatibility) – 新しい形式のデータを古いスキーマで読める。 3. 完全互換(Full Compatibility) – 後方互換、かつ前方互換の場合 26
  28. 28. 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”} ] }
  29. 29. 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”} ] } 存在しないカラムを デフォルトとして読むことで 古いデータを新しいスキーマで読める!
  30. 30. 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
  31. 31. Enjoy Confluent Platform! https://www.flickr.com/photos/nanoprobe67/5746249953/

×