تخطي إلى المحتوى

لا يمكن تحويل هذا النوع من الملفات في المتصفح.

┐─ تحليل الملف ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
المطور : مؤسسة Apache للبرمجيات
الفئة : بيانات
نوع MIME : application/avro
بايتات : 4F626A01
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

ما هو ملف Avro؟

Apache Avro هو إطار تسلسل بيانات أنشأه Hadoop Doug Cutting لمشروع Apache Hadoop، أُطلق عام 2009. يُخزِّن البيانات بصيغة ثنائية مدمجة مع مخططها (schema) المكتوب بـ JSON مضمناً في رأس الملف. هذا يجعل ملفات Avro “واصفة لنفسها” — أي يمكن قراءتها دون الحاجة إلى مخطط خارجي.

ميزة تطور المخطط (Schema Evolution) هي ما يُميّز Avro: يمكن إضافة حقول جديدة أو حذف قديمة دون كسر الأنظمة التي تقرأ البيانات القديمة، ما يجعله مثالياً لأنظمة البيانات الكبيرة ذات المخططات المتطورة.

كيفية فتح ملفات Avro

  • avro-tools (Java) — الأداة الرسمية: java -jar avro-tools.jar tojson file.avro
  • Python fastavropip install fastavro للقراءة والكتابة السريعة
  • Apache Sparkspark.read.format("avro").load("file.avro") للمعالجة الموزعة
  • DuckDB — قراءة Avro عبر إضافة (قيد التطوير)
  • Kafka confluent-avro — لقراءة رسائل Avro من Kafka

المواصفات التقنية

الخاصيةالقيمة
البايتات السحرية4F 62 6A 01 (Obj + version)
نوع التخزينقائم على الصفوف
الترميزثنائي (افتراضي) أو JSON
المخططJSON مضمن في رأس الملف
الضغطSnappy، Deflate، bzip2، xz
تطور المخطط✅ متوافق للأمام وللخلف
أنواع البياناتnull، boolean، int، long، float، double، string، bytes، record، array، map، union

الاستخدامات الشائعة

  • Apache Kafka: صيغة التسلسل الأكثر شيوعاً في منظومة Kafka، مع Confluent Schema Registry لإدارة المخططات
  • خطوط أنابيب Hadoop وSpark: تسلسل بيانات الإدخال والإخراج في مهام MapReduce وSpark
  • تبادل البيانات بين الخدمات الصغيرة (Microservices): تطور المخطط يُسهِّل تحديث الخدمات بشكل مستقل
  • تحديد مصادر الأحداث (Event Sourcing): تسجيل الأحداث بصيغة موحدة مع تتبع تغييرات المخطط
  • ETL في البيانات الضخمة: صيغة وسيطة فعّالة بين مصادر البيانات ومستودعاتها

Avro مقابل Parquet مقابل JSON

الميزةAvroParquetJSON
التخزينقائم على الصفوفعمودينصي
تطور المخطط✅ ممتازجيد
الكتابة✅ سريعبطيءمتوسط
الاستعلامات التحليليةمتوسط✅ ممتازبطيء
قابلية القراءة البشرية❌ ثنائي❌ ثنائي
البث في Kafka✅ مثاليغير مناسبيُستخدم

قراءة Avro بـ Python

import fastavro

# قراءة ملف Avro
with open("data.avro", "rb") as f:
    reader = fastavro.reader(f)
    schema = reader.writer_schema
    for record in reader:
        print(record)

# كتابة ملف Avro
schema = {
    "type": "record",
    "name": "User",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "name", "type": "string"}
    ]
}
records = [{"id": 1, "name": "أحمد"}]
with open("output.avro", "wb") as f:
    fastavro.writer(f, schema, records)