Parquet czy Avro? Kontrakt między systemami i koszt odpowiedzi

Dystrybutor ma ERP, system magazynowy i sklep internetowy. Co noc zadanie eksportuje zamówienia z ERP do CSV, magazyn je importuje, a analityk ładuje ten sam plik do bazy raportowej. W pewien piątek sklep dodaje pole z rabatem. Eksport rośnie o jedną kolumnę, import do magazynu pada w sobotę, a poniedziałkowy raport marży powstaje z danych z czwartku. Nikt nie zrobił nic złego. Dane po prostu nie miały ani kontraktu, ani układu dopasowanego do któregokolwiek z tych zadań.
Dwa formaty plików, które najczęściej proponuje się jako lekarstwo, odpowiadają na dwa różne pytania. Avro odpowiada: „czy następny system przeczyta to, co zapisał poprzedni, także po zmianie”. Parquet odpowiada: „jak mało zapytanie musi przeczytać, żeby zwrócić wynik”. System enterprise klasy AI-native potrzebuje obu odpowiedzi, a większość kłopotów bierze się z zadawania jednemu formatowi pytania drugiego. O tym, jak oba formaty plików leżą pod formatami tabel i bazami operacyjnymi, jest przewodnik serii; ten tekst jest o wyborze między nimi.
Dwa układy, dwa zadania
Apache Avro zapisuje rekordy jeden za drugim, każdy w całości, w zwartym kodowaniu binarnym, które nie przenosi nazw pól w danych. Schemat jest dokumentem JSON i podróżuje z danymi: w nagłówku pliku kontenerowego Avro albo jako identyfikator, gdy pojedyncze rekordy płyną przez Kafkę i rejestr schematów. Aktualne wydanie to 1.12.2 (sprawdzono 21.10.2026). Zapis jednego zdarzenia kosztuje jeden rekord; odczyt jednego zdarzenia kosztuje jeden rekord.
Apache Parquet zapisuje wszystkie wartości jednej kolumny obok siebie. Plik dzieli się na grupy wierszy, każda grupa na kawałek na kolumnę, każdy kawałek na strony, a stopka trzyma schemat i statystyki każdego kawałka. Zapytanie o dwie kolumny z czterdziestu czyta dwie kolumny z czterdziestu i pomija całe grupy wierszy, których minimum i maksimum wykluczają filtr. Specyfikacja formatu ma wersję 2.14.0 (wrzesień 2026, sprawdzono 21.10.2026). Zapis jednego zdarzenia oznacza przepisanie pliku; odczyt miliona zdarzeń po dwie kolumny jest tani.
| Apache Avro | Apache Parquet | |
|---|---|---|
| Układ | wiersz po wierszu | kolumna po kolumnie |
| Naturalna jednostka | jedno zdarzenie, jeden rekord | jedna tabela, jeden skan |
| Typowy zapis | ciągły, pojedyncze rekordy | paczki, całe pliki |
| Typowy odczyt | cały rekord | kilka kolumn z wielu wierszy |
| Schemat | JSON, z danymi albo w rejestrze | w stopce pliku |
| Zmiana schematu | formalne reguły rozwiązywania czytelnik–pisarz | po stronie formatu tabeli i silnika |
| Gdzie żyje | tematy Kafki, integracje, dzienniki zdarzeń | tabele lakehouse, hurtownie, trening modeli |
Gdzie liczy się kontrakt
Między systemami ryzykiem nie jest szybkość. Ryzykiem jest to, że producent zmieni komunikat, a
konsument, któremu nikt nie powiedział, wywróci się w weekend. Specyfikacja Avro określa, jak czytelnik
z jednym schematem rozwiązuje dane zapisane innym: pola dopasowuje się po nazwie, pole brakujące po
stronie czytelnika jest ignorowane, pole brakujące po stronie pisarza przyjmuje wartość domyślną
czytelnika albo kończy się błędem, a dozwolona jest zamknięta lista promocji typów, na przykład int
na long. Rejestr schematów, taki jak
rejestr Confluent,
zamienia te reguły w bramkę: producent nie zarejestruje schematu, który złamałby konsumentów według
polityki zgodności wybranej przez właściciela.
To kontrakt w prawniczym sensie tego słowa. Pole z rabatem ze sceny otwierającej dostaje wartość domyślną, rejestr przyjmuje je jako zgodne wstecz, konsument w magazynie czyta dalej bez tego pola aż do własnego wydania, a raport marży podejmuje je wtedy, gdy strona analityczna jest gotowa. Zmiana zachodzi raz, w miejscu, w którym ktoś za nią odpowiada.
Parquet nie ma tu odpowiednika. Może przenieść to samo zdarzenie, ale plik Parquet zapisywany co kilka sekund przez strumień daje tysiące małych plików, każdy z własną stopką, a układ, który czyni skan tanim, staje się tym, co czyni go wolnym. Parquet jest dla danych, które przestały się ruszać.
Gdzie liczy się koszt odpowiedzi
Gdy zdarzenia już wylądowały, pytania się zmieniają. Marża po kanałach i grupach produktów za kwartał. Odsetek zwrotów po partiach dostawcy. Cechy dla modelu popytu z dwóch lat wysyłek. Te pytania dotykają milionów wierszy i garści kolumn, a w silniku chmurowym płaci się za przeczytane bajty i czas ich czytania.
To zadanie Parquet. Przycinanie kolumn sprawia, że silnik pobiera tylko kolumny, o które zapytano. Statystyki w stopce, indeks stron i filtry Blooma pozwalają pominąć grupy wierszy, strony i pliki, w których odpowiedzi być nie może. Kodowanie słownikowe i ciągów, a po nim kodek taki jak ZSTD albo Snappy, zmniejszają to, co zostało; decyzjom o układzie, które za tym stoją, poświęcony jest profil Parquet. Ten sam raport uruchomiony na plikach Avro czyta każdy bajt każdego rekordu, bo układ wierszowy nie daje silnikowi niczego do pominięcia.
Infografika
Który format do których danych
Wiele wierszy, mało kolumnJeden rekord naraz
Dane płynąDane leżą
Przekazanie i to, co dodaje AI SDLC
W praktyce architektura to przekazanie: Avro w strumieniu, Parquet w spoczynku, a format tabeli, taki jak Apache Iceberg albo Delta Lake, decyduje, które pliki Parquet składają się na tabelę w danej chwili. Decyzją, która kosztuje najwięcej, jest opóźnienie tego przekazania. Zapis do tabeli co kilka sekund daje świeższe dane i rachunek za kompaktowanie; zapis co kilka minut daje większe pliki i krótkie opóźnienie, którego większość raportów nigdy nie zauważy. Które decyzje w firmie naprawdę zmieniają się w ciągu minuty, to pytanie do właściciela procesu, nie do inżyniera.
Dwie rzeczy zmieniają się, gdy potoki budują agenci kodujący, a całość traktuje się jak oprogramowanie z cyklem życia. Po pierwsze, kontrakt powstaje przed kodem: schemat Avro, jego wartości domyślne i polityka zgodności są specyfikacją, a agent generuje z niej producentów, konsumentów i testy zgodności, nie odwrotnie. Po drugie, samo przekazanie dostaje własny zestaw testów: liczności i sumy tych samych zdarzeń czytane z tematu i z tabeli Parquet, kontrola, czy opóźnienie mieści się w uzgodnionej granicy, i kontrola, czy nie narasta zaległość małych plików. Agenci dobrze piszą i uruchamiają takie testy. Zatwierdzenie zmiany schematu, która usuwa pole, albo przesunięcie granicy opóźnienia z minut na sekundy zostaje przy osobie, którą można o to później zapytać.
Jak wygląda dobry wynik
Schemat każdego zdarzenia, które przekracza granicę systemu, jest w rejestrze z nazwanym właścicielem i polityką zgodności. Dodanie pola jest rutynowym wydaniem, nie incydentem. Raporty i modele czytają tabele Parquet, a liczba bajtów skanowanych na raport jest znana i maleje, a nie nieznana i rośnie. Istnieje dokładnie jedna ścieżka ze strumienia do tabeli, z podanym opóźnieniem, a liczba małych plików jest monitorowana. Gdy ktoś zaproponuje JSON „dla prostoty”, zespół potrafi pokazać, ile brak schematu kosztował ostatnim razem.
Nasza część
W inżynierii danych AI projektujemy to przekazanie najpierw dla jednego istotnego przepływu: kontrakty zdarzeń w Avro, tabele docelowe w Parquet pod otwartym formatem tabeli, testy porównujące obie strony i agentów, które utrzymują potoki w formie. Nie odsprzedajemy platform. Więcej o predictes na stronie głównej.
- Apache Parquet
- Apache Avro
- kontrakty zdarzeń
- koszt analityki