ジョブ内のKafkaとAVRO - Cloud - 8.0

Kafka

Version
Cloud
8.0
Language
日本語
Product
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Open Studio for Big Data
Talend Real-Time Big Data Platform
Module
Talend Studio
Content
ジョブデザインと開発 > サードパーティーシステム > メッセージングコンポーネント > Kafka
データガバナンス > サードパーティーシステム > メッセージングコンポーネント > Kafka
データクオリティとプレパレーション > サードパーティーシステム > メッセージングコンポーネント > Kafka
Talendジョブでは、AVROフォーマットのデータを(非)シリアライズするためにAVROが提供するアプローチに反映されているように、Kafkaコンポーネント(通常のKafkaコンポーネント)とAVROのKafkaコンポーネントは、AVROデータを異なる方法で処理します。
  • 通常のKafkaコンポーネントはJSON形式を読み書きします。KafkaがAVROデータを生成または消費する場合は、Standardジョブでスキーマレジストリーと共にProducerレコードとConsumerレコードを持つtKafkaInputtKafkaOutputを使用できます。
  • SparkフレームワークのKafkaコンポーネントはAVRO形式のデータを直接処理します。KafkaクラスターがAVROデータを生成し、消費する場合は、tKafkaInputAvroを使ってKafkaからデータを直接読み取り、tWriteAvroFieldsを使ってAVROデータをtKafkaOutputに送信します。

    ただし、これらのコンポーネントはavro-toolsライブラリーによって作成されたAVROデータを処理しません。これは、avro-toolsライブラリーとAVROのコンポーネントが、AVROの提供するアプローチと同じアプローチを使わないためです。

AVRO形式のデータを(逆)シリアライズするためにAVROが提供する2つのアプローチは次のとおりです。
  1. AVROファイルは、各ファイルに埋め込まれたAVROスキーマを使用して生成されます( org.apache.avro.file.{DataFileWriter/DataFileReader} )。avro-toolsライブラリーはこのアプローチを使います。
  2. AVROレコードは、各レコードにスキーマを埋め込むことなく生成されます(org.apache.avro.io.{BinaryEncoder/BinaryDecoder}を使用)。AVROのKafkaコンポーネントはこのアプローチを使います。

    この方法は、AVROでエンコードされたメッセージが常にKafkaトピックに書き込まれる場合に強く推奨されます。この方法では、すべてのメッセージにAVROスキーマを再び埋め込むためのオーバーヘッドが発生しないためです。AVROスキーマのサイズは比較的大きく、そのため、各メッセージにスキーマを埋め込むのは費用対効果が低い方法になります。他方、レコード(メッセージ)は通常小さいため、Spark Streamingを使ってデータをKafkaに読み書きする場合、これは他のアプローチに比べて大きな利点です。

2つのアプローチの出力を同じ読み書きの処理で混在させることはできません。