6. kafka序列化和反序列化
https://blog.csdn.net/weixin_33690963/article/details/91698279
kafka序列化: 生产者在将消息传入kafka之前需要将其序列化成byte, 如原来消息的value是Thrift 的一个struct类型,需先将其自定义序列化.
kafka反序列化: 消费者从kafka中获取数据之后需将拿到的数据反序列化, 才能进行相关的业务逻辑处理.
一 . 相关函数:
ConsumerRecords API:
ConsumerRecord API用于从Kafka集群接收记录。 此API由主题名称,分区号(从中接收记录)和指向Kafka分区中的记录的偏移量组成。ConsumerRecord类用于创建具有特定主题名称,分区计数和< key,value>的消费者记录。 对。 它有以下签名。
public ConsumerRecord(string topic,int partition, long offset,K key, V value)
主题 - 从Kafka集群接收的使用者记录的主题名称。
分区 - 主题的分区。
键 - 记录的键,如果没有键存在null将被返回。
值 - 记录内容。
ConsumerRecords API充当ConsumerRecord的容器。 此API用于保存特定主题的每个分区的ConsumerRecord列表。 它的构造器定义如下。
public ConsumerRecords(java.util.Map<TopicPartition,java.util.List <Consumer-Record>K,V>>> records)
- TopicPartition - 返回特定主题的分区地图。
- 记录 - ConsumerRecord的返回列表。
二. 序列化
1. 传统的序列化

很明显这种序列化有一个问题,虽然能满足append的存储模式,但无法从中读取第n个对象,每次得从第一个开始读。
kafka作为一种C-S架构,C端需要和S端进行通信,批量向S端传送序列化的对象,达到batch.size(8K)或者时间达到linger.ms(5ms)向server端传送数据,据此推断C端和S端的通信应该使用的是长连接,而不会是每次传送数据打开一个socket,并且还支持压缩,高效稳定的通信和存储是这类软件必备的特质之一。
2. 事务提交



可以看出key和value都被序列化为byte[],每跳过length个byte就是跳过了一组key-value,因此可以根据这个进行寻找第offset个key-value
如何将一个Object序列化为byte[] ,很明显需将Object的所有字段进行序列化,进而最终转化为基本数据类型和String等的序列化。

以下是将Double进行序列化和反序列化


相比较而言使用kafka的序列化,一个Double占用8个字节,
而使用writeDouble进行序列化则占用了14个字节

而使用writeObject进行序列化则占用了84个字节。务必请慎用,占用大量字节,进而占内存和带宽。。。

也许序列化的本质就是将对象转换为可识别的字节流。
有时会想为什么不这样存储?
key1
value1
key2
value2
key3
value3
首先这种存储面临一个问题, 换行回车符号需进行转义存储。二是这种存储和读取高效么,一行一行进行处理。仅仅是推测,具体实现是不是这样没有考究。一行一行的读取无非是一个一个字节的读取,读到\n便是一行,这种读取方式应该不是很高明。
三. 实战
https://www.jianshu.com/p/35a432bcb006
https://www.jianshu.com/p/85c66aa52e52
6. kafka序列化和反序列化的更多相关文章
- Kafka序列化和反序列化与示例
1. 卡夫卡序列化和反序列化 今天,在这篇Kafka SerDe文章中,我们将学习使用Kafka创建自定义序列化器和反序列化器的概念.此外,我们将了解序列化在Kafka中的工作原理以及为什么需要序列 ...
- 对象序列化与反序列化local class incompatible
无论eclipse还是idea(默认关闭序列化提示,需手动打开),都可以自动生成相应的序列号,分为两类1L,XXXL. 当然如果不指定,系统也会自动生成,但是存在隐性风险 ,不同的编译器对同一个对象可 ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- Java 序列化与反序列化
1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...
- C#中怎样实现序列化和反序列化
我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...
- Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- XPatchLib 对象增量数据序列化及反序列化器 For .Net
在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...
- c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...
随机推荐
- docker 在 centos7.* 上的部署及问题解决
最近尝试搭建docker 环境,其实个人是比较喜欢“菜鸟学习系列”的知识的,怎奈它的讲解是以Ubuntu为主的,最后找到一个搭建学习系列,感觉写的很好,主要是页面风格清晰明了,遂决定按照此教程学习搭建 ...
- css height:100%和height:auto的区别
css height:100%和height:auto的区别 height:auto,是指根据块内内容自动调节高度.height:100%,是指其相对父块高度而定义的高度,也就是按照离它最近且有定义高 ...
- Spring之27:BeanDefinitionRegistry
关于BeanDefinition见<Spring之Ⅰ:BeanDefinition> BeanDefinitionRegistry的类图: BeanDefinition 的注册接口,如 R ...
- Python 解LeetCode:394 Decode String
题目描述:按照规定,把字符串解码,具体示例见题目链接 思路:使用两个栈分别存储数字和字母 注意1: 数字是多位的话,要处理后入数字栈 注意2: 出栈时过程中产生的组合后的字符串要继续入字母栈 注意3: ...
- struts笔记1
框架:所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的精力放到业务需求的分析和理解上面 SHH:strust spring hibernate; SSM:springmvc sp ...
- Word 自动图文集使用方法
1. 自动图文集简介 使用自动图文集当你在文档中输入你所需的模板名称后,就能立刻变出该内容出来. 1.1 效果演示 1:个人简历 如下图所示,在Word文档中输入了"个人简历"后, ...
- Linux上安装pstree命令(-bash: pstree: command not found)
一.pstree命令的安装 1.在 Mac OS上 brew install pstree 2.在 Fedora/Red Hat/CentOS yum -y install psmisc 3.在 Ub ...
- Vue自定义指令和自定义过滤器
一.自定义指令: 自定义指令分为两种:全局自定义指令和局部自定义指令 全局指令指所有组件都可以使用,局部指令是只有在当前组件中才可以使用. 如,我们现在有个需求,当一个输入框获取焦点时,显示出一个di ...
- php json_encode() 中文保留
这几天遇到了一个问题 给java传json的时候 没有处理中文 那边拿数据的时候说不是中文的 需要转一下 方法: 实际应用中,当有中文字符时,当直接使用json_encode() 函数会使汉字不 ...
- js实现CheckBox全选或者不全选
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...