🎯 Definicja

Apache Avro to system serializacji danych (format binarny), który przechowuje schemat (strukturę danych) razem z samymi danymi lub w zewnętrznym rejestrze. Jest standardem w ekosystemie streamingowym (Kafka).

🔑 Kluczowe punkty

  • Schema Evolution: Kluczowa cecha pozwalająca na zmianę struktury danych (np. dodanie pola) bez psucia istniejących konsumentów (Backward/Forward Compatibility).
  • Wydajność: Format binarny jest znacznie lżejszy i szybszy niż JSON.
  • Row-based: W przeciwieństwie do Parquet (kolumnowy), Avro jest zapisywany wierszami, co czyni go idealnym do przesyłania pojedynczych zdarzeń/komunikatów.

📚 Szczegółowe wyjaśnienie

W systemach Big Data “umowa” co do kształtu danych jest krytyczna. Avro wymusza tę umowę poprzez Schemat (zazwyczaj w formacie JSON). Producent wysyła dane zakodowane w Avro + ID schematu. Konsument pobiera schemat z Schema Registry i dekoduje dane. Dzięki temu nazwy pól (“firstName”, “lastName”) nie muszą być wysyłane z każdym rekordem (jak w JSON), co oszczędza pasmo.

Avro vs Parquet:

  • Avro: Zapis/Odczyt całego rekordu (Streaming, API).
  • Parquet: Zapis/Odczyt wybranych kolumn (Analityka, OLAP).

💡 Przykład zastosowania

System bankowy wysyła zdarzenie TransactionCreated na topic Kafki. Używa Avro, aby zapewnić, że pole amount jest zawsze typem Decimal, a nie String. Gdy bank doda pole currency w nowej wersji aplikacji, stare aplikacje nadal mogą czytać dane (ignorując nowe pole), dzięki regułom kompatybilności Avro.

📌 Źródła

👽 Brudnopis

  • Schemat w JSON: {"type": "record", "fields": [{"name":"id", "type":"int"}]}.
  • Kompresja: Snappy, Deflate.
  • Idealny partner dla Kafki.