0Pricing
Advanced Spring Boot 4: Event-Driven Architecture (Kafka) · درس

Avro لتعريف المخططات

تعلّموا تعريف مخططات الأحداث باستخدام Apache Avro، وهو إطار عمل مدمج وفعّال لتسلسل البيانات

Avro لتعريف المخططات درس مجاني في Advanced Spring Boot 4: Event-Driven Architecture (Kafka) على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في 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: true or false.
  • 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. The items property specifies the type of elements.
  • map: For key-value pairs, where keys are always strings. The values property 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/7) وفتح باقي دورة 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/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Advanced Spring Boot 4: Event-Driven Architecture (Kafka)؟

لا تُشترط خبرة سابقة. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «Avro لتعريف المخططات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Advanced Spring Boot 4: Event-Driven Architecture (Kafka) هذا؟

نعم. كل درس في Advanced Spring Boot 4: Event-Driven Architecture (Kafka) يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أهمية إدارة المخططات
  2. Avro لتعريف المخططات
  3. دمج Spring Boot وSchema Registry
  4. تطور المخطط وأنماط التوافق
← العودة إلى Advanced Spring Boot 4: Event-Driven Architecture (Kafka)