flink使用kryo支持自定义的序列化器

背景

这里所说的序列化器不是指实现TypeSerializer的状态序列化器,而是指flink在使用KryoSerializer序列化器时遇到kryo无法序列化的类型时,通过往kryo中注册某个序列化器类来让kryo可以序列化某个类的实例,所以这里严格意义上应该是说,怎么让Kryo支持某种自定义的类实例

Kryo序列化

我们知道flink当遇到Generic Type时,它自身内置的TypeSerializer序列化器没法序列化这些类,所以他会把这些类的处理工作都交给Kryo,也就是KryoSerializer,一般来说,Kryo是一个很强大的序列化器,他几乎可以序列化所有一般的类,但是也有一些类,比如Protobuf/Thrift等类,他是没法序列化和反序列化的,所以当你的实现类是使用了PB或者Thrift框架生成的类,抑或是Guava等集合框架类,你需要告诉Kryo如何序列化/反序列化这些类,只需要执行如下操作即可:

env.getConfig().registerTypeWithKryoSerializer(MyCustomType.class, MyCustomSerializer.class);env.getConfig().addDefaultKryoSerializer(MyCustomType.class, TBaseSerializer.class);kryo.register( Collections.singletonMap( "", "" ).getClass(), new CollectionsSingletonMapSerializer() );kryo.register( LocalDate.class, new JodaLocalDateSerializer() );

这样就可以解决Kryo遇到自定义的类时无法序列化和反序列化的问题了

彩蛋:

kryo支持绝大部分自定义类的序列化,比如Roaring64NavigableMap类,但是Kryo不会调用Roaring64NavigableMap中已有的Serializer/DeSerializer方法对Roaring64NavigableMap进行序列化和反序列化,而是对立面的字段比如long[],String[]等分别进行序列化,也就是说这种序列化/反序列化对比Roaring64NavigableMap已经提供的已有Serializer/DeSerializer方法效率和容量都要低好几倍,如果这里是一个大的性能问题,你如何做呢?

附:
kryo支持的特殊的serializer实现
https://github.com/magro/kryo-serializers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript学习记录

一、TS开发环境的搭建 1、下载并安装node.js 2、使用npm全局安装typeScript 进入命令行输入:npm i -g typescript 3、创建一个ts文件 4、使用tsc对ts文件进行编译 进入命令行进入ts文件所在目录执行命令:tsc 文件名.ts 二、TS基本变量 1、类型声…

ChatGPT:使用FastJSON库关闭JSON引用检测的方法

ChatGPT&#xff1a;使用FastJSON库关闭JSON引用检测的方法 下面我将输入一个方法&#xff0c;请你记住&#xff1a; ChatGPT&#xff1a; 好的&#xff0c;请输入方法。 RequestMapping("/getLianZhengLabels") public String getLianZhengLabels() {HashMap<St…

Kubernetes(K8s):未来云原生应用的引擎

文章目录 Kubernetes的核心概念和架构为什么K8s是构建云原生应用的首选工具&#xff1f;云原生应用的好处和挑战容器编排的重要性&#xff1a;Docker和KubernetesKubernetes生态系统&#xff1a;核心组件和附加工具实际应用&#xff1a;企业如何在生产环境中使用K8s未来展望&am…

rust trait对象

在拥有继承的语言中&#xff0c;可以定义一个名为shape的基类&#xff0c;该类上有一个draw方法。其他的类比如Button、SelectBox继承shape。它们各自覆盖draw方法。调用这些子类的draw方法时&#xff0c;就可以把它们统一当作shape来使用。不过Rust并没有继承&#xff0c;如果…

做一个贪吃蛇小游戏happy一下

直接Vue上代码 <template><div><div>贪吃蛇</div><canvas id"canvas" width"400" height"400"></canvas></div> </template><script> export default {data() {return {ctx: null,inter…

Android 遍历界面所有的View

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、实践四、 推荐阅读 一、导读 我们…

结构型设计模式——组合模式

摘要 组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合。 一、组合模式的意图 将对象组合成树形结构来表示“整体/部分”层次关系&#xff0c;允许用户以相同的方式处理单独…

AVL Cruise 2020.1 安装教程

文章目录 安装包安装破解 安装包 链接&#xff1a;https://pan.baidu.com/s/1GxbeDj_SyvKFyPeTsstvTQ?pwd6666 提取码&#xff1a;6666 安装 安装文件&#xff1a; 双击setup.exe&#xff1a; 一直netx&#xff0c;中间要修改两次路径&#xff0c;第一次是安装位置&#xf…

Flume最简单使用

文章目录 一、简介1、定义2、基础架构 二、快速入门1、解压Flume2、案例一&#xff1a;监控端口号3、案例二&#xff1a;将空目录下文件 三、Flume进阶1、Flume事务2、Flume Agent内部原理3、案例一&#xff1a;监控日志4、案例二&#xff1a;多路复用和拦截器适应4.1 原理4.2 …

二进制十六机制CRC总和异或等工具类

package com.dc.util;import org.apache.http.util.TextUtils; import java.nio.ByteBuffer; import

LCP 06. 拿硬币/2582. 递枕头[java]

LCP 06. 拿硬币 - 力扣&#xff08;LeetCode&#xff09; 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示例 1&#xff1a; 输入&#xff1a;[4,2,1…

Linux部署elk日志监控系统

目录 一、简介 二、部署elasticsearch 2.1 安装jdk11&#xff08;jdk版本>11&#xff09; 2.2 下载安装包 2.3 授权elk用户 2.4 配置elasticsearch.yml 2.5 启动elasticsearch 三、部署logstash 3.1 启动测试 3.2 可能出现的报错 3.3 指定配置文件启动logstash 3.4 安装El…

Ubuntu 设置开机自动执行脚本

1. 建立service文件 sudo vim /etc/systemd/system/redis-server.service2. redis service文件 [Unit] DescriptionAdvanced key-value store Afternetwork.target Documentationhttp://redis.io/documentation, man:redis-server(1)[Service] Typenotify ExecStart/usr/bin/…

MySQL数据库管理

一、sql语句&#xff1a; SQL语句用于维护管理数据库&#xff0c;包括数据查询、数据更新、访问控制、对象管理等功能。 二、SQL语言分类&#xff1a; DDL&#xff1a;数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 DML&#xff1a;数据操纵语言&a…

Win/Mac版Scitools Understand教育版申请

这里写目录标题 前言教育版申请流程教育账号申请 前言 上篇文章为大家介绍了Scitools Understand软件&#xff0c;通过领取的反馈来看有很多朋友都想用这个软件&#xff0c;但是我的网盘里只存了windows的pojie版&#xff0c;没有mac版的&#xff0c;我没有去网上找相关的资源…

js中的类型转换

原文地址 JavaScript 中有两种类型转换&#xff1a;隐式类型转换&#xff08;强制类型转换&#xff09;和显式类型转换。类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。 隐式类型转换&#xff08;强制类型转换&#xff09;&#xff1a; 隐式类型转换是 Java…

Numpy入门

文章目录 1. Ndarray的5种重要属性2. Ndarray的7种创建方法3. 类型转换和等比/差数列4. Numpy的8种内置方法5. Numpy 数学运算 主要内容 Ndarray的5种重要属性 nd.ndim Ndarray的维度nd.shape Ndarray的行列数nd.size Ndarray的元素数nd.dtype Ndarray元素类型nd.itemsize Nda…

变量、常量以及与其他语言的差异 - Go语言从入门到实战

知识点 源码文件以_test结尾&#xff1a;xxx_test.go测试方法名以Test开头&#xff1a;func TestXXX(t *testing.T){…} 利用单元测试来写代码段&#xff0c;保存之后会自动运行程序返回结果&#xff0c;可以快速实践得到反馈。 编写测试程序 接下来练习一下&#xff0c;怎…

Unity下tga和png格式图片打包成AB包大小和加载速度测试

测试素材 测试素材&#xff0c;一张tga格式&#xff0c;一张png格式&#xff0c;他们的图像尺寸一样都是8K图。 两张图在AssetBundles里显示 Tga格式的图明显大很多&#xff0c;我们打包成ab包看看。 在PC 打包后看&#xff0c;明显大小一样&#xff0c;我们进行ab包加载&am…

传统订货方式和网上企业APP订货方式的差别|网站搭建|小程序开发

传统订货方式和网上企业APP订货方式的差别|网站搭建|小程序开发 1、管货品&#xff1a;实时关注热销和滞销商品的库存订货系统&#xff1a;采购单一键生成入库单&#xff0c;便捷的实现从采购到仓库到销售一体化的进销存管理。 传统模式&#xff1a;进销存管理难&#xff1a;…