---
title: "Parquet en Avro: de gebeurtenis tussen modules en het register dat superintelligentie leest"
url: "https://hurukan.com/nl/blog/parquet-en-avro-de-gebeurtenis-en-het-register"
description: "Een gebeurtenis reist tussen modules als een rij met een contract en rust in het register als kolommen. Waarom Avro het eerste draagt en Parquet het tweede."
---

# Parquet en Avro: de gebeurtenis tussen modules en het register dat superintelligentie leest

11 september 2026·5 min leestijd·Redactie

Een logistiek kantoor gezien van achter een operator aan een statafel: op het linkerscherm één abstract blauw-grijs formulier, op het rechterscherm een brede abstracte tabel van dunne kolommen, een dunne blauwe ledstrip langs de rand van het bureau, ochtendlicht door een hoog raam

Een goederenontvangst wordt bevestigd aan het dok. In dezelfde seconde moet de verkoopmodule weten dat de nalevering kan worden verzonden, moet financiën de factuurmatching starten en moet de voorraadmodule het voorraadniveau bijwerken. Elk van hen wil de hele ontvangst: leverancier, artikel, aantal, partij, wie bevestigde. Drie maanden later stelt de financiële agent een andere vraag: hoe vaak kwamen ontvangsten van deze leverancier de afgelopen twee jaar te kort aan. Hij wil twee kolommen uit een miljoen rijen, en hij wil ze in seconden.

Dat zijn twee verschillende vormen van hetzelfde feit. De eerste is een rij die reist. De tweede is een kolom die rust. Een bedrijfsbesturingssysteem moet beide opslaan, en het is een fout ze op dezelfde manier op te slaan. In de [laag Data](https://hurukan.com/nl/system/data) van Hurukan, die in aanbouw is, is het ontwerp dat een gebeurtenis tussen modules wordt gedragen door Apache Avro, en dat het register dat superintelligentie leest is ingedeeld in Apache Parquet. Deze tekst legt uit waarom die scheiding er is en wat elke kant ervoor betaalt.

## Twee vragen, twee indelingen

Een bestandsformaat bepaalt hoe één bestand zijn bytes rangschikt: of de records na elkaar liggen of alle waarden van één veld bij elkaar, hoe ze zijn gecomprimeerd, en waar de beschrijving van hun typen staat.

**Rij-indeling.** Elk record wordt in zijn geheel geschreven: elk veld van deze ontvangst, dan elk veld van de volgende. Eén record schrijven is goedkoop, één record lezen is goedkoop, en alleen het aantal lezen over een miljoen ontvangsten betekent ook alle andere velden lezen, want die staan in de weg.

**Kolomindeling.** Alle aantallen liggen bij elkaar, alle leveranciersidentificatoren liggen bij elkaar. Een vraag over twee velden raakt twee smalle stroken van het bestand en slaat de rest over. Eén record schrijven is onhandig, want een bestand moet worden gesloten voordat iemand het kan lezen, dus kolommen worden in batches geschreven.

Avro is de rij-indeling met een schema dat met de data meereist. Parquet is de kolomindeling met statistieken waardoor een lezer kan overslaan wat hij niet nodig heeft. Geen van beide weet van de ander, en geen van beide weet of het bij een tabel hoort; dat is het werk van een tabelformaat erboven, beschreven in [de actuele toestand en het register](https://hurukan.com/nl/blog/de-actuele-toestand-en-het-register-twee-geheugens).

## De gebeurtenis: een rij met een contract

Wanneer de ontvangst de voorraadmodule verlaat, is ze een bericht. Elke module die het leest moet het eens zijn over wat de velden betekenen, en die overeenkomst moet de dag overleven waarop iemand een veld toevoegt. [Avro](https://avro.apache.org/docs/1.12.0/specification/) draagt die overeenkomst mee met het bericht: het schema is JSON, het record is een compacte binaire rij, en de specificatie legt vast hoe een lezer met één versie van het schema een record oplost dat met een andere is geschreven. Een veld dat de lezer niet kent wordt overgeslagen. Een veld dat de lezer verwacht en de schrijver niet stuurde, krijgt de standaardwaarde uit het schema van de lezer, of het lezen mislukt en zegt dat. De huidige release is 1.12.2 ([projectblog](https://avro.apache.org/blog/), gecontroleerd op 21 oktober 2026).

In een systeem waarin agents modules uitbreiden, is die oplossingsregel het verschil tussen een veilige wijziging en een wijziging die een module om drie uur ‘s nachts stillegt. Hoe een schemawijziging via voorstel, compatibiliteitscontrole en goedkeuring verloopt, is het onderwerp van [Apache Avro: het contract tussen modules](https://hurukan.com/nl/blog/apache-avro-het-contract-tussen-modules).

De gebeurtenis blijft geen gebeurtenis. Zodra ze is geaccepteerd door de modules die haar nodig hebben, wordt dezelfde ontvangst in het register geschreven, en van daaruit wordt ze op een heel andere manier gelezen.

## Het register: kolommen die superintelligentie leest

Superintelligentie vraagt niet om één ontvangst. Ze vraagt om een patroon over alle ontvangsten van één leverancier, alle orders in één kwartaal, elke afwijking op één artikelrevisie. Dat zijn vragen over enkele velden over veel rijen, en daarvoor is [Parquet](https://parquet.apache.org/docs/file-format/) gebouwd: een bestand is verdeeld in rijgroepen, elke rijgroep in één blok per kolom, elk blok in pagina’s, met een voettekst die beschrijft waar alles staat. Een lezer vraagt twee kolommen en krijgt twee kolommen. Elke rijgroep draagt minimum- en maximumwaarden, zodat hele stukken van het bestand worden overgeslagen wanneer de vraag over één leverancier gaat. De formaatspecificatie staat op versie 2.14.0 ([projectblog](https://parquet.apache.org/blog/), gecontroleerd op 21 oktober 2026).

Het punt voor een soeverein systeem is kosten. Het register leeft op de infrastructuur die het bedrijf kiest, en elke vraag die superintelligentie stelt wordt betaald in gelezen bytes en processortijd op die infrastructuur. Een register dat in kolommen is ingedeeld, met woordenboeken is gecomprimeerd en gesorteerd op de velden waarop de meeste vragen filteren, is een register dat het bedrijf zich kan veroorloven zo vaak door zijn agents te laten lezen als nodig is. Hoe de indeling binnen één bestand die kosten bepaalt, staat in [Apache Parquet: hoe het register is ingedeeld](https://hurukan.com/nl/blog/apache-parquet-hoe-het-register-is-ingedeeld).

## Waar de scheiding wordt bepaald

Het feit is

Vorm

Formaat in de laag Data

Onderweg tussen modules of binnenkomend via een connector

één heel record, nu

Avro, onder een geregistreerd schema

In rust in het register, gelezen door agents en mensen

veel records, enkele velden

Parquet, binnen een tabelformaat

Eén voor één binnenkomend maar later in bulk gelezen

beide, na elkaar

Avro in, gebatcht naar Parquet

De derde rij is waar het meeste engineeringwerk zit. Gebeurtenissen komen één voor één binnen; Parquet wil batches. Iets moet een minuut of een uur aan gebeurtenissen verzamelen, ze als één bestand schrijven en de tabel vertellen welk bestand nieuw is. Doe dat te vaak en het register wordt een hoop piepkleine bestanden die traag leest. Doe het te zelden en de agent die de ontvangsten van vandaag nodig heeft, leest het register van gisteren. Het interval is een beslissing over welke vragen vers moeten zijn, en het is een beslissing voor een mens, geen standaardinstelling.

## Wat een agent hier mag veranderen, en wat niet

Agents breiden Hurukan uit, en de laag Data is geen uitzondering. Een agent kan een nieuw veld op de ontvangstgebeurtenis voorstellen, de batchtaak schrijven die gebeurtenissen in het register zet, of voorstellen een tabel op leverancier te sorteren omdat de vragen van de afgelopen maand daarop filterden. Elk daarvan is een voorstel met de redenering erbij, en elk wordt vastgelegd.

Twee dingen blijven bij mensen. Het contract zelf: een wijziging van een gebeurtenisschema is een wijziging van de overeenkomst tussen modules, en de eigenaar van de ontvangende module keurt die goed. En de vorm van het register: hoe lang gebeurtenissen worden bewaard, welke velden het register verlaten bij een wisverzoek, en hoe vaak de batches sluiten. Die bepalen kosten en verplichtingen, en een agent tekent voor geen van beide.

## Een test die u vandaag kunt doen

Neem één feit dat vandaag tussen twee systemen in uw bedrijf beweegt, een orderbevestiging of een goederenontvangst. Schrijf drie dingen op: waar de veldenlijst is gedefinieerd, wie zou worden geïnformeerd als er een veld bijkomt, en waar hetzelfde feit later in bulk wordt gelezen voor een rapport.

Als de veldenlijst op twee plekken is gedefinieerd, bestaat het contract nog niet. Als niemand zou worden geïnformeerd, breekt het volgende toegevoegde veld stilletjes iets. Als het bulk lezen gebeurt tegen dezelfde opslag die de gebeurtenissen ontvangt, delen de twee vormen één indeling, en een van beide betaalt daarvoor. De pagina [laag Data](https://hurukan.com/nl/system/data) beschrijft waar elke vorm hoort te leven; het [Hurukan-overzicht](https://hurukan.com/nl) toont de lagen eromheen.

-   Apache Parquet
-   Apache Avro
-   gebeurteniscontracten
-   het register
-   laag Data

## Lees verder

-   [Een identiteit voor mensen en agents: wie wat mag doen](https://hurukan.com/nl/blog/een-identiteit-voor-mensen-en-agents)
-   [De actuele toestand en het register: twee geheugens van een bedrijfsbesturingssysteem](https://hurukan.com/nl/blog/de-actuele-toestand-en-het-register-twee-geheugens)