Avro使用详解

在Kafka中使用Avro编码消息 文章目录Avro简介Avro使用方法添加依赖Jar包定义模式解析模式并将记录转byte[] Avro简介 Avro 是一个数据序列化的系统,它可以将数据结构或对象转化成便于存储或传输的格式。Avro设计之初就用来支持数据密集型应用,适合于远程或本地大规模数据的存储和交换。Avro支持多种语言实现,主要有C, C++, C#, Java, PHP, Python, and Ruby等。 Avro使用... 阅读详情

Avro简介

Avro是一个数据序列化工具,用语言无关的模式定义,Avro支持二进制编码和JSON编码两种序列化方式。序列化方法为深度优先,从左到右遍历。

Avro数据类型

类型描述示例
null空值null
boolean二进制值“boolean”
int32位整数“int”
long64位证书“long”
float32位浮点数“float”
double64位浮点数“double”
bytes字节序列“bytes”
string字符序列“string”
array排序数组,对象类型一致{“type”:“array”,“items”:“long”}
map键值对,键是字符串{“type”:“map”,“values”:“string”}
record任意类型字段集合{“type”:“record”,“name”:“WeatherRecord”,“doc”:“Weather file”,“fileds”:[{“name”,“year”,“type”:“int”}]}}
enum枚举类型{“type”:“enum”,“name”:“cutlery”,“doc”,:file",“symbols”:[“KNIFE”,“FORK”]}

数据类型Java映射

Avro类型JAVA通用映射特殊映射
intint-
longlong-
floatfloat-
doubledouble-
bytesjava.nio.bytebuffer字节数组
string字符序列“string”
array排序数组,对象类型一致{“type”:“array”,“items”:“long”}
map键值对,键是字符串{“type”:“map”,“values”:“string”}
record任意类型字段集合{“type”:“record”,“name”:“WeatherRecord”,“doc”:“Weather file”,“fileds”:[{“name”,“year”,“type”:“int”},{“name”,“temperature”,“type”:“int”}]}}
enum枚举类型{“type”:“enum”,“name”:“cutlery”,“doc”,:file",“symbols”:[“KNIFE”,“FORK”]}

Avro使用

Avro依赖模式(scehma)实现,模式用JSON格式定义。其中类型分为:

示例

{
	"namespace": "com.test.avro",
	"type":"record",
	"name":"Student",
	"fields":[
		{"name":"name","type":"string"},
		{"name":"age","type":"int"},
		{"name":"sex","type":"string"}
	]
}

可以将模式理解为java的类,类中属性有各种类型。

Avro使用实例

在eclipse新建一个file,名为student.avsc。
加上上述的schema内容
在这里插入图片描述
下载avto-tool.1.6.0.jar包

<dependency>
     <groupId>org.apache.avro</groupId>
     <artifactId>avro-tools</artifactId>
     <version>1.6.0</version>
   </dependency>

使用java -jar avro-tools-1.6.0.jar compile schema C:\Users\123\Desktop\student.avsc Student
命令编译。
在这里插入图片描述
看到生成Student文件夹目录为:Student/com/test/avro/Student.java
生成的java文件内容为:
在这里插入图片描述
由avro-tool提供的方法通过读取schema的内容生成Student类。

以上是通过手动操作生成,以下通过avro-tool包,进行序列化及反序列化实现如下:


import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumReader;
import org.apache.avro.specific.SpecificDatumWriter;

import java.io.File;
import java.io.IOException;

public class AvroDemo {
    public static void main(String[] args) throws Exception {
        Student student1 = new Student();
        student1.setAge(3);
        student1.setName("Arway");
        student1.setSex("boy");
        Student student2 = new Student();
        student2.setAge(7);
        student2.setName("Ben");
        student2.setSex("boy");


        //新建Students.avsc文件
        File file = new File("C:\\Users\\123\\Desktop\\Students.avsc");
        DatumWriter<Student> StudentDatumWriter = new SpecificDatumWriter<Student>(Student.class);
        DataFileWriter<Student> dataFileWriter = new DataFileWriter<Student>(StudentDatumWriter);
        try {
            //写入Students.avsc文件
            dataFileWriter.create(student1.getSchema(), file);
            dataFileWriter.append(student1);
            dataFileWriter.append(student2);
            dataFileWriter.close();
        } catch (IOException e) {
        }
        // 反序列化Student
        DatumReader<Student> StudentDatumReader = new SpecificDatumReader<Student>(Student.class);
        DataFileReader<Student> dataFileReader = null;

        try {
            //读取Students.avsc文件生成Student对象
            dataFileReader = new DataFileReader<Student>(file, StudentDatumReader);
        } catch (IOException e) {
        }
        Student Student = null;
        try {
            while (dataFileReader.hasNext()) {
                Student = dataFileReader.next(Student);
                System.out.println(Student);
            }
        } catch (IOException e) {
        }
    }
}
机器学习预测材料性能:从特征工程到SHAP可解释性分析 机器学习在材料科学中的应用,核心在于将复杂的材料性能预测问题转化为数据驱动的建模任务。其基本原理是通过算法从历史数据中学习特征与目标属性之间的映射关系。这项技术的价值在于能够大幅加速新材料的发现与设计周期,降低传统“试错法”的高昂成本。在工程实践中,它广泛应用于预测如形成能、带隙、弹性模量以及居里温度等关键材料性能。具体到磁性材料领域,居里温度的准确预测对于永磁体和自旋电子器件设计至关重要。本项目深入探讨了如何利用特征工程从材料成分与结构中构建有效描述符,并借助SHAP这一可解释性工具,揭示模型决策背后的物 阅读详情

相关推荐

开源代码分享(29)-基于拉丁超立方抽样的风光场景生成和削减

作为分层抽样方法的一 种,拉丁超立方抽样具有良好的抽样精度和效率[14]。本文使用多场景方法来描述可再生能源(风电、光伏)的不确定性。以风电功率为例,首先假定风电功率服从正态分布 N(μ, δ 2 ),μ 为预测值的期望值,δ 为其波动的百分比。接着,采用拉丁超立方抽样[21]生成大量服从概率分布约束的风电出力场景,并采用考虑 Kantorovich 距离[22]的场景削减技术处理该场景,进行场景削减。最后,导出具有相应概率的削减之后的场景。

配电网和matlab的博客 923

avro格式详解

【Avro介绍】Apache Avro是hadoop中的一个子项目,也是一个数据序列化系统,其数据最终以二进制格式,采用行式存储的方式进行存储。Avro提供了:丰富的数据结构可压缩、快速的二进制数据格式一个用来存储持久化数据的容器文件远程过程调用与动态语言的简单集成,代码生成不需要读取或写入数据文件,也不需要使用或实现RPC协议。代码生成是一种可选的优化,只值得在静态类型语言中实现。基于以上这些优...

hncscwc的博客 6276

使用Dify打造视频生成工作流:从提示词到视频的完整指南

Dify作为开源LLM应用开发平台,通过可视化工作流编排实现从文本到视频的端到端生成,将创意周期从天级缩短至分钟级。核心流程包括提示词工程、视频API调用、存储分发和结果反馈。

牛奶夹心巧克力 3432

Apache Avro 入门教程

Apache Avro 是一个数据序列化系统,它结合了动态类型系统和高效的二进制数据格式。Avro 文件是自描述的,这意味着它们包含了元数据(包括数据的结构),允许在不同的编程语言之间轻松地读写数据。此外,Avro 还支持远程过程调用(RPC)框架,使得跨网络的数据交换更为便捷。 ## 2. 项目快速启动 ### 安装 Avro 工具 首先,你需要在你的开发环境中安装 Avro 工具。如果你...

gitblog_00777的博客 1103

大疆航线文件解析指南:5分钟搞懂KMZ里的template.kml和waylines.wpml区别

本文深入解析大疆无人机航线文件KMZ中template.kml与waylines.wpml的核心区别。template.kml是定义任务框架和全局参数的可编辑模板,而waylines.wpml是包含精确执行指令的最终文件。理解两者差异对于高效规划航线、批量生成任务及进行二次开发至关重要。

sun99的博客 866

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1271

Avro介绍

Avro介绍 Apache Avro是一个数据序列化系统。 Avro所提供的属性: 1.丰富的数据结构2.使用快速的压缩二进制数据格式3.提供容器文件用于持久化数据4.远程过程调用RPC5.简单的动态语言结合功能,Avro 和动态语言结合后,读写数据文件和使...

asdzxc4567的博客 840

RuoYi项目适配达梦数据库(二)

RuoYi项目,代码生成模块的达梦数据库适配。

邢慧鹏的博客 1万+

avro的使用详解

一、avro的介绍 1、概括 avro是一个数据序列化系统,它提供 丰富的数据结构 快速可压缩的二进制数据形式 存储持久数据的文件容器 远程过程调用RPC 简单的动态语言结合功能 2、类型 二、avro在hadoop的使用 1、模式确定 例如:{&quot;namespace&quot;: &quot;example.avro&quot;, &quot;type&quot;: &quot;r

yancychas的博客 1万+

使用ClickHouse JDBC官方驱动,踩坑无数

这个问题我在网上查原因说是由于Zookeeper压力过大,表变成只读状态,导致ClickHouse插入数据失败。写入数据频率过高。Zookeeper中的集群节点挂掉。而我们项目出现这个问题的原因是第一个:写入数据频率过高。但是在网上搜资料的过程中,我又发现了另外一个问题:我们项目用了JDBC驱动,但ClickHouse官方并不推荐。。证实了官网确实不建议使用驱动:而应该改成驱动,并且推荐使用0.3.2以上的版本:于是,后面几天开始了ClickHouse的JDBC驱动升级之旅。

2万+

tsmc12: m0po max length问题(H384.M0_PO.L.1)

手动调整可以挪cell,制造上下两个row相对的至少一个site的空间,通过插普通filler来解决,这里需要注意的是,tsmc12有via0的规则,需要让via0落在via0 grid上。在pt eco之后会有一些m0po max length问题出现,大部分问题都可以通过替换decap来解决,少部分由于局部density过高,需要手动调整。更多学习内容请关注「拾陆楼」知识星球。#ICC2中替换decap的参考脚本。

m0_61544122的博客 790

flink sql client 连接kafka解析avro数据 (avro ArrayIndexOutOfBoundsException 解决办法)

flink sql 连接kafka解析avro数据flink sql 连接kafka解析avro数据查看avro的schema写flink sql 报错正确的flink sql注意的点如何确定flink sql是用map array row flink sql 连接kafka解析avro数据 因为工作需要,需要写FlinkSqlClient解析avro数据,但是网上例子很少,最后在看到一位老哥用debug方式排查问题,我这里也用了相同方式,才找到问题所在 。 查看avro的schema { "type"

xjxjin的博客 4276

虚拟网络的“隐形盾”:C#如何用代码把DDoS踢出门?

本文分享了如何用C#防御DDoS攻击的实战经验。通过三种核心防御策略:1)基于IP的速率限制中间件,使用滑动时间窗口算法控制请求流量;2)自动IP封禁服务,通过特征检测识别恶意IP并加入黑名单;3)优化数据库连接池和HTTP客户端连接池,合理配置资源参数。文中提供了详细的C#代码实现,包括限流中间件、IP封禁服务和连接池优化方案,并分享了生产环境中的调优经验,如配合Redis实现分布式限流、使用fail2ban自动封禁等技巧,帮助开发者构建更健壮的防御体系。

墨夶的博客 329

SpringBoot 整合 Avro 与 Kafka

优质博文:IT-BLOG-CN【需求】:生产者发送数据至 kafka 序列化使用 Avro,消费者通过 Avro 进行反序列化,并将数据通过 MyBatisPlus 存入数据库。【1】Apache Avro 1.8;【2】Spring Kafka 1.2;【3】Spring Boot 1.5;【4】Maven 3.5; 二、Avro 文件 【1】Avro 依赖于由使用JSON定义的原始类型组成的架构。对于此示例,我们将使用Apache Avro入门指南中的“用户”模式,如下所示。该模式存储在src / ma

程序猿进阶 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

avro使用详解

一、avro的介绍 1、概括 avro是一个数据序列化系统,它提供 丰富的数据结构 快速可压缩的二进制数据形式 存储持久数据的文件容器 远程过程调用RPC 简单的动态语言结合功能 2、类型 二、avro在hadoop的使用 1、模式确定 例如:{"namespace": "example.avro", "type": "record", "name...

hellozhxy的博客 8368

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Avro:使用Avro MapReduce进行排序

在MapReduce作业中,框架保证Reducer收到的key是有序的。利用这一点,我们可以对Avro文件进行排序。假设我们有如下的Schema:{"namespace": "me.lin.avro.mapreduce", "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"},

Spring , Hadoop, Spark , BI , ML 2240

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

什么是Avro?Hadoop首选串行化系统——Avro简介及详细使用

        本篇博客,Alice为大家介绍的是Hadoop中作为首选串行化系统的Avro。 文章目录简介特点Avro数据类型和模式Avro基本类型Avro复杂类型Avro数据序列化/反序列化方法1 使用编译的方式序列化反序列化方法2 不使用编译的方式序列化反序列化 简介    &n...

大数据梦想家 9170

【AVRO】详解 AVRO 格式

本文对 avro 的格式定义、编码方式、以及实际存储的文件格式进行了详细说明,最后也以一个实际例子进行了对照说明。另外, 在官网中还涉及 rpc 的使用、mapreduce 的使用,这里就没有展开说明,有兴趣的可移步官网进行查阅。

Data · Model · Agent · Repeat 5951

flume avro java_flume之Avro Source和Avro Sink

一、Avro Souce介绍Flume主要的RPC Source是Avro SourceAvro Source被设计为高扩展的RPC服务器端,能从其他的Flume Agent的Avro Sink或者使用Flume的SDK发送数据的客户端应用,接受数据到一个Flume Agent中。Avro Source的可扩展性结合Channel担当了缓冲器的角色,使得Flume Agent能够处理重要的负载峰值...

weixin_34388311的博客 958

java 读取avro 文件,在Java中使用Spark读取Avro

Can somebody share example of reading avro using java in spark?Found scala examples but no luck with java.Here is the code snippet which is part of code but running into compilation issues with the me...

weixin_34567079的博客 310

如何使用Avro文件

本文介绍了如何使用ApacheSqoop实用程序将数据从Oracle数据库传输到S3。数据将以Avro数据格式存储。 数据传输采用了以下技术: Apache Sqoop 1.4.7 Oracle 12c Amazon EMR 5.16.0(Hadoop发行版2.8.4) Sqoop命令以Avro格式存储数据 ApacheSqoop1.4.7支持Avro数据文件。要以Avro格式存储数据,...

Tybyqi的博客 1568

AVRO

AVRO是Apache提供的一套序列化和RPC的机制 AVRO早期是为Hadoop设计的一套序列化系统,后来将AVRO独立出来。 序列化 1.序列化的目的:数据的存储和传输。 2.序列化的衡量标准: a.序列化的时间及占用的CPU。 b.序列化之后产生的数据量。 c.序列化机制能否跨平台跨语言。 AVIO考虑到了跨语言传输的问题,采用了json格式。 maven工程依赖如下 ...

压缩疯雷的博客 724

MapReduce中使用Avro

原文地址:https://itweknow.cn/detail?id=71 ,欢迎大家访问。 上篇文章我们简要介绍了一下Avro是啥,以及其几种数据类型。那么通过这篇文章我们一起来实践一下Avro在MapReduce中的使用。 前提条件 一个maven项目 Hadoop集群,如果你还没有安装的话,请戳这里,查看之前的文章。 说明 本篇文章是一个简单的用例,使用的例子是一个txt文件中存储了...

playing_the_fool的博客 438

avro入门之rpc

关于avro的rpc入门使用,官方给的资料实在是太少了,这个链接https://github.com/phunt/avro-rpc-quickstart有具体说明 现在对在java下使用总结如下: 我这里没有使用maven,直接在项目中加入使用到的jar包有:avro-1.7.7.jar、avro-tools-1.7.7.jar、 jackson-core-asl-1.8.8.jar、jack

shb19891的专栏 2892

Avro配置使用

Apache Avro是一种高效的二进制序列化系统,广泛应用于大数据和分布式通信场景。它采用JSON格式的Schema定义数据结构,支持多语言(Java/Python等)并具有优秀的兼容性。Avro通过Schema驱动实现自动代码生成,提供高性能的二进制序列化方案。文章详细介绍了Avro的安装配置、Schema定义方法、序列化/反序列化操作,以及复杂类型支持。同时对比了Avro与其他序列化方案的特点,并给出Kafka集成、Schema演进兼容性等实践建议。

onlymscn的博客 1546

使用Avro

一直听说avro不同于thrift,在hadoop,hbase广泛使用,逐渐替代了原来thrift的使用,就很好奇它有什么好处. 今天抽时间玩了一下,和大家分享下. 目前版本是1.7.6,其schema使用JSON,在RPC中客户端与服务器端在handshake时交换schema信息,而其rpc可以是http方式,也可以是netty2方式. 与thrift,protocol buffer区别

jollyjumper的专栏 7878
上一篇: flume HttpSource使用
下一篇: flume AvroSource和AvroSink使用
SW_LCC
博客等级 码龄11年 4粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值