┐─ تحليل الملف ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ┌
│ المطور : مؤسسة 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 fastavro —
pip install fastavroللقراءة والكتابة السريعة - Apache Spark —
spark.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
| الميزة | Avro | Parquet | JSON |
|---|---|---|---|
| التخزين | قائم على الصفوف | عمودي | نصي |
| تطور المخطط | ✅ ممتاز | جيد | ❌ |
| الكتابة | ✅ سريع | بطيء | متوسط |
| الاستعلامات التحليلية | متوسط | ✅ ممتاز | بطيء |
| قابلية القراءة البشرية | ❌ ثنائي | ❌ ثنائي | ✅ |
| البث في 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)