Blog

Highlights der neuen Apache Avro 1.9.0 Version

Aktualisiert Oktober 21, 2025
3 Minuten

Seit der letzten Veröffentlichung von Apache Avro 1.8.2 am 31. Mai 2017. Zwei Jahre später freue ich mich, die Veröffentlichung von Apache Avro 1.9.0 ankündigen zu können.

Avro ist ein Framework für Remote-Prozeduraufrufe und Datenserialisierung, das im Rahmen des Hadoop-Projekts von Apache entwickelt wurde. Es verwendet JSON zur Definition von Datentypen und Protokollen und serialisiert Daten in einem kompakten Binärformat. Wenn Sie mit Avro noch nicht vertraut sind, empfehle ich Ihnen die Erklärung von Dennis Vriend bei Binx.io zur Einführung in Avro.

Über 272 Jira-Tickets wurden gelöst und 844 PRs sind seit 1.8.2 enthalten. Ich möchte auf einige wichtige Änderungen hinweisen.

Verwerfen Sie Joda-Time zu Gunsten von Java8 JSR310

Vor Avro 1.9 wurde die Joda-Zeitbibliothek für die Handhabung der logischen Datums(zeit)werte verwendet. Aber seit der Einführung von Java8 wurde der Java Specification Request (JSR) 310 aufgenommen, der die Handhabung von Datum und Uhrzeit nativ stark verbessert. Avro wird nun standardmäßig mit Java 8 erstellt. Um den Abkündigungsprozess zu beschleunigen, sind die JSR310 Datumsangaben standardmäßig aktiviert, was zu einigen Regressionsproblemen führen kann, wenn Sie von <1.9 aktualisieren.


  org.apache.avro
  avro-maven-plugin
  1.9.0
  
    
      generate-sources
      
        schema
      
      
        ${project.basedir}/src/main/avro/
        ${project.basedir}/src/main/java/
        joda
      
    
  

Es ist möglich, zur Joda-Zeit zurückzukehren, indem Sie die Konfiguration wie oben beschrieben einstellen. Bitte beachten Sie, dass dies die Kompatibilität nicht beeinträchtigt, da es sich nur auf den logischen Typ auswirkt. Der physische Typ ist im Falle eines Datums immer noch Sekunden seit Epoche.

Wechsel von Jackson 1.x zu 2.9

Das Schema von Avro ist in JSON kodiert. Das Lesen des JSON wird von der beliebten Java-Bibliothek Jackson übernommen. Das alte Codehaus Jackson 1.x wurde durch das Jackson 2.9 von FasterXML ersetzt. Es ist wichtig, Jackson immer auf dem neuesten Stand zu halten, da es anfällig für Sicherheitsprobleme ist. Das liegt nicht an einem schlechten Design oder so, sondern an der Natur der Bibliothek, die beliebige Eingaben aus ungeprüften Quellen lesen kann.

Wir haben nicht nur Jackson auf die neueste Version aktualisiert, sondern auch Jackson-Klassen aus der öffentlichen API entfernt. Dies könnte eine Ursache für fehlerhafte API-Änderungen beim Upgrade sein. Wenn Sie ein Feld standardmäßig auf Null setzen möchten (was für die Schemaentwicklung wichtig ist), mussten Sie bisher Jacksons NullNode übergeben:

importieren org.codehaus.jackson.node.NullNode;

neu Schema.Feld(Name, Schema, doc, NullNode.getInstance());

Dies wurde durch JsonProperties von Avro ersetzt:

importieren org.apache.avro.JsonProperties;

neu Schema.Feld(Name, Schema, doc, JsonProperties.NULL_VALUE);

Unterstützung für ZStandard Kompression

Seit Avro 1.9 gibt es Unterstützung für die ZStandard-Komprimierung von Facebook. Zstandard ist ein Echtzeit-Komprimierungsalgorithmus, der hohe Komprimierungsraten bietet. Er bietet eine breite Palette von Komprimierungs-/Geschwindigkeitskompromissen und wird durch einen sehr schnellen Decoder unterstützt. Seien Sie vorsichtig, wenn Sie mit der ZStandard-Komprimierung schreiben, dann müssen Sie sie auch mit Avro 1.9+ lesen.

Unterstützung für Hadoop 1.x entfernen

Wenn Sie noch mit Hadoop 1.x arbeiten, müssen Sie ein Upgrade durchführen, um Avro 1.9+ zu verwenden. Apache Avro MapReduce ist mit Hadoop 3 kompiliert und getestet, wird aber (noch) nicht offiziell unterstützt.

Avro ist jetzt schlanker

Mehrere Abhängigkeiten wurden entfernt: guava, paranamer, commons-codec und commons-logging, was den Fußabdruck von Avro verkleinert und die Möglichkeit von Kollisionen mit anderen Bibliotheken im Klassenpfad verringert.

Java 11 Unterstützung

Apache Avro wird mit Java 11 kompiliert und getestet, um Kompatibilität zu gewährleisten. Java8 wird offiziell bis März 2022 unterstützt, aber es ist eine gute Praxis, bereits jetzt die Kompatibilität mit der neuen EOL-Version von Java zu prüfen.

Contact

Let’s discuss how we can support your journey.