スキーマ定義にAvroを使う
コンパクトで効率的なデータシリアライズフレームワークであるApache Avroを使って、イベントスキーマを定義する方法を学びます。
「スキーマ定義にAvroを使う」はCoddyKit上の無料Advanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
What is Apache Avro?
Welcome! In this lesson, we'll explore Apache Avro, a powerful data serialization system. It's widely used in event-driven architectures, especially with Kafka.
Avro helps define the structure of your data (events) using a schema. This schema acts like a blueprint, ensuring consistency and enabling seamless communication between different applications.
Why Use Avro Schemas?
Avro's schema-driven approach offers several benefits:
- Data Compactness: Avro serializes data efficiently, leading to smaller message sizes.
- Schema Evolution: It provides robust rules for how schemas can change over time without breaking old applications.
- Language Agnostic: Schemas are language-independent, allowing different programming languages to read and write the same data.
- Strong Typing: Ensures data types are consistent, reducing runtime errors.
Avro Schema Structure
Avro schemas are defined using JSON. Each schema describes a data structure, most commonly a record type.
Key elements of an Avro schema include:
type: The kind of schema (e.g., "record", "enum", "array").name: The name of the schema (e.g., "User", "Order").namespace: An optional string to qualify the name.fields: For record types, an array of field definitions.
Avro Primitive Types
Avro supports a set of basic, primitive data types:
null: No value.boolean:trueorfalse.int: 32-bit signed integer.long: 64-bit signed integer.float: Single precision (32-bit) floating-point number.double: Double precision (64-bit) floating-point number.bytes: Sequence of 8-bit unsigned bytes.string: Unicode character sequence.
Defining a Simple Record
Let's define a simple Avro record schema for a User. Each field needs a name and a type.
Here, id is an int and name is a string.
{
"type": "record",
"name": "User",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "id", "type": "int"},
{"name": "name", "type": "string"}
]
}Complex Type: Nested Records
You can define complex data structures by nesting records. For example, an Order record might contain a Customer record within one of its fields.
{
"type": "record",
"name": "Order",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "orderId", "type": "string"},
{"name": "customer", "type": {
"type": "record",
"name": "Customer",
"fields": [
{"name": "customerId", "type": "int"},
{"name": "email", "type": "string"}
]
}}
]
}Complex Types: Arrays and Maps
Avro also supports collection types:
array: For a list of items of the same type. Theitemsproperty specifies the type of elements.map: For key-value pairs, where keys are alwaysstrings. Thevaluesproperty specifies the type of values.
{
"type": "record",
"name": "Product",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "productId", "type": "string"},
{"name": "tags", "type": {"type": "array", "items": "string"}},
{"name": "attributes", "type": {"type": "map", "values": "string"}}
]
}Complex Type: Enums
An enum defines a fixed set of named values. This is useful for fields with a limited, predefined set of options.
The symbols property lists all allowed string values for the enum.
{
"type": "record",
"name": "Payment",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "transactionId", "type": "string"},
{"name": "status", "type": {
"type": "enum",
"name": "PaymentStatus",
"symbols": ["PENDING", "COMPLETED", "FAILED"]
}}
]
}Complex Type: Unions & Nullables
A union allows a field to be one of several specified types. This is crucial for defining optional or nullable fields.
To make a field nullable, you define its type as a union of "null" and its actual type, e.g., ["null", "string"]. The first type in the union is often the default if not explicitly set.
{
"type": "record",
"name": "LogEntry",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "timestamp", "type": "long"},
{"name": "message", "type": "string"},
{"name": "userId", "type": ["null", "string"], "default": null}
]
}Setting Default Field Values
You can specify a default value for a field. This is particularly important for schema evolution, as it ensures that older data (without the new field) can still be read without error, using the default value.
The default value must be a valid instance of the field's type.
{
"type": "record",
"name": "Settings",
"namespace": "com.coddykit.avro",
"fields": [
{"name": "theme", "type": "string", "default": "dark"},
{"name": "notificationsEnabled", "type": "boolean", "default": true}
]
}Avro Schema Question
Consider an Avro record for an event. We need a field named comment that can contain a string but is optional (can be null) and defaults to null if not provided.
Avro Definition Recap
Great job! You've learned the fundamentals of defining schemas with Apache Avro.
- Avro schemas are JSON-based blueprints for your data.
- They support primitive types (int, string, etc.) and complex types (records, arrays, maps, enums, unions).
- Unions are key for defining nullable or optional fields.
- Default values are crucial for backward compatibility and schema evolution.
Next, we'll see how to integrate these schemas with Spring Boot and Schema Registry.
よくある質問
「スキーマ定義にAvroを使う」レッスンは無料ですか?
はい。「スキーマ定義にAvroを使う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースには全4レッスンが含まれています。
「スキーマ定義にAvroを使う」で何を学びますか?
コンパクトで効率的なデータシリアライズフレームワークであるApache Avroを使って、イベントスキーマを定義する方法を学びます。 ブラウザで直接実行するハンズオンコードでAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Advanced Spring Boot 4: Event-Driven Architecture (Kafka)を始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「スキーマ定義にAvroを使う」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンでコードを書いて実行できますか?
はい。すべてのAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- スキーマ管理の重要性
- スキーマ定義にAvroを使う
- Spring BootとSchema Registryの統合
- スキーマ進化と互換性モード