Inhaltsverzeichnis
- Kurzprofil
- Rahmendaten
- Zielgruppe
- Voraussetzungen
- Lernziele
- Inhalte
- Praxisübungen
- Technische Umgebung
- Checkliste für produktive Implementierungen
Kurzprofil
Der Workshop zeigt die praktische Nutzung von Apache Avro in Java-Projekten. Behandelt werden Generic, Specific und Reflect APIs, Code-Generierung, Serialisierungspfade, Teststrategien sowie Performance- und Robustheitsaspekte. Labs führen Schritt für Schritt durch den Aufbau einer kleinen Bibliothek, die Avro-Nachrichten und Avro-Dateien erzeugt, liest und evolutionär weiterentwickelt.
Rahmendaten
- Dauer: 2 Tage
- Niveau: Aufbau bis Fortgeschritten
- Format: Hands-on-Workshop mit Code Reviews
Zielgruppe
- Java-Entwicklung (Backend, Plattform, Data Services)
- Teams, die Datenverträge als Bibliothek/Artefakt bereitstellen
- Engineering Enablement und technische Product Owner
Voraussetzungen
- Java-Grundlagen (Build, Tests, Debugging)
- Grundverständnis von Avro-Schemas (Grundlagenseminar empfohlen)
Lernziele
- Avro APIs sicher anwenden: GenericRecord, SpecificRecord, Reflect
- Code-Generierung reproduzierbar in Build-Pipelines integrieren
- Serialisierung/Deserialisierung korrekt und performant implementieren
- Schema Evolution in Java-Clients praktisch umsetzen
- Test- und Observability-Patterns etablieren
Inhalte
Modul 1: API-Überblick und Datenrepräsentation
- Generic vs. Specific vs. Reflect: Einsatzkriterien
- Schema als Artefakt: Einbettung, Ressourcen, Versionen
- DatumReader/Writer, Encoder/Decoder, Binary vs. DataFile
Modul 2: Code-Generierung und Build-Integration
- Schema-Organisation im Repository
- Build-Konfiguration (Plugin/Task), Output-Verzeichnisse, CI-Reproduzierbarkeit
- Kompatibilitätschecks als Teil des Builds (Fail Fast)
Modul 3: Serialisierungspfade in Services und Libraries
- Serialisierung für Netzwerkpayloads (z. B. Message Bus, HTTP Body)
- Single-Object- und Container-Strategien
- Fehlerbehandlung: unbekannte Felder, Default Values, Typmismatches
Modul 4: Tests und Qualitätsmuster
- Roundtrip-Tests, Golden Files, Kompatibilitätsmatrix
- Property-basierte Tests für Schema-Invarianten
- Konventionen: Naming, Nullability, Logical Types
Modul 5: Performance und Robustheit
- Buffer-Reuse, Encoder-Caching, Garbage-Reduktion
- Kompression, Blockgrößen und deren Trade-offs
- Risiken untrusted data: Grenzen setzen (z. B. Größen, Rekursion, Defaults)
Praxisübungen
Lab 1: Avro-Klassen generieren und verwenden
- Schema-Datei definieren und in Projektstruktur ablegen.
- Code-Generierung konfigurieren und Build ausführen.
- SpecificRecord in einer kleinen Demo-Anwendung instanziieren.
- Serialisierung und Deserialisierung im Unit-Test verifizieren.
Lab 2: GenericRecord und schemazentrierte Verarbeitung
- GenericRecord mit Schema zur Laufzeit erzeugen.
- Serialisierung mit BinaryEncoder implementieren.
- Deserialisierung mit Reader-Schema durchführen.
- Fehlerfälle simulieren und kontrolliert behandeln.
Lab 3: Schema Evolution in Java-Clients
- Schema-Version v2 erstellen (kompatible Änderung).
- Producer mit v2 und Consumer mit v1 kombinieren und Verhalten prüfen.
- Alias-Strategie für Umbenennungen anwenden.
- Kompatibilitätsprüfung automatisieren und als Build-Gate skizzieren.
Lab 4: Performance-Messung und Optimierung
- Baseline-Messung für Serialisierung/Deserialisierung definieren.
- Encoder-/Decoder-Reuse implementieren und vergleichen.
- Kompression aktivieren und Wirkung auf Throughput/Latenz bewerten.
- Ergebnis als Tuning-Leitfaden dokumentieren.
Technische Umgebung
- Java (LTS), Build-Tool (Maven oder Gradle)
- IDE mit Debugger und Test-Runner
Checkliste für produktive Implementierungen
- Schema-Artefakte als eigene Versionseinheit behandeln (Release, Changelog).
- Kompatibilitätschecks in CI verpflichtend machen.
- Serialisierungsfehler kategorisieren und messbar machen (Metriken/Logs).
- Decoder/Encoder-Reuse und Buffering gezielt einsetzen.
- Grenzen für Eingabedaten definieren (z. B. Maximalgrößen).
