Kafka序列化和反序列化与示例
1. 卡夫卡序列化和反序列化
今天,在这篇Kafka SerDe文章中,我们将学习使用Kafka创建自定义序列化器和反序列化器的概念。此外,我们将了解序列化在Kafka中的工作原理以及为什么需要序列化。与此同时,我们将看到 Kafka序列化器示例和Kafka解串器示例。此外,这个Kafka序列化和反序列化教程为我们提供了 Kafka字符串序列化器和 Kafka 对象序列化器的知识。
基本上,Apache Kafka提供了我们可以轻松发布以及订阅记录流的功能。因此,我们可以灵活地创建自己的自定义序列化器以及解串器,这有助于使用它传输不同的数据类型。 那么,让我们开始Kafka序列化和反序列化
Kafka-序列化和反序列化(Kafka SerDe)
2. Apache Kafka SerDe
但是,为了传输而将对象转换为字节流的过程就是我们所说的序列化。虽然,Apache Kafka存储以及在队列中传输这些字节数组。
阅读Apache Kafka用例| Kafka应用程序
然而,序列化的反面是反序列化。在这里,我们将数组的字节转换为我们想要的数据类型。但是,请确保Kafka仅为少数数据类型提供序列化程序和反序列化程序,例如
- 串
- 长
- 双
- 整数
- 字节
3.为什么在Kafka中使用Custom Serializer和Deserializer?
基本上,为了准备从生产者传递到代理的消息,我们使用序列化器。换句话说,在将整个消息传输到代理之前,让生产者知道如何将消息转换为字节数组,我们使用序列化器。类似地,要将字节数组转换回对象,我们使用消费者的反序列化器。
4. Kafka SerDe的实施
实现org.apache.kafka.common.serialization.Serializer接口以创建序列化程序类非常重要。Ans,对于反序列化器类,重要的是实现org.apache.kafka.common.serialization.Deserializer接口。
让我们来讨论Apache Kafka架构及其基本概念
Kafka序列化和反序列化接口有3种方法:
Kafka序列化和反序列化的实现方法
一个。配置
在配置启动时,我们调用Configure方法。
湾 序列化/反序列化
出于Kafka序列化和反序列化的目的,我们使用此方法。
C。关
在关闭Kafka会话时,我们使用Close方法。
阅读如何创建Kafka客户端
5.与Kafka的串行器接口
public interface Serializer extends Closeable {
void configure(Map<String, ?> var1, boolean var2);
byte[] serialize(String var1, T var2);
void close();
}
6.与Kafka的解串器接口
public interface Deserializer extends Closeable {
void configure(Map<String, ?> var1, boolean var2);
T deserialize(String var1, byte[] var2);
void close();
}
7. Serializer和Deserializer的示例
这里的依赖关系是:
让我们来探讨卡夫卡的优缺点
- 卡夫卡(0.10.1.1)。
- FasterXML Jackson(2.8.6)。
user.java:
public class User {
private String firstname;
private int age;
public User() {
}
public User(String firstname, int age) {
this.firstname = firstname;
this.age = age;
}
public String getfirstName() {
return this.firstname;
}
public int getAge() {
return this.age;
}
@Override public String toString() {
return "User(" + firstname + ", " + age + ")";
}
}
userserializer.java:
public class UserSerializer implements Serializer {
@Override public void configure(Map<String, ?> map, boolean b) {
}
@Override public byte[] serialize(String arg0, User arg1) {
byte[] retVal = null;
ObjectMapper objectMapper = new ObjectMapper();
try {
retVal = objectMapper.writeValueAsString(arg1).getBytes();
} catch (Exception e) {
e.printStackTrace();
}
return retVal;
}
@Override public void close() {
}
}
Userdeserializer.java:
public class UserDeserializer implements Deserializer {
@Override public void close() {
}
@Override public void configure(Map<String, ?> arg0, boolean arg1) {
}
@Override
public User deserialize(String arg0, byte[] arg1) {
ObjectMapper mapper = new ObjectMapper();
User user = null;
try {
user = mapper.readValue(arg1, User.class);
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
}
此外,为了使用上面的序列化程序,我们必须使用此属性进行注册:
使用命令学习Apache Kafka Operations
props.put("value.serializer", "com.knoldus.serializers.UserSerializer");
那么,制作人将是:
try (Producer<String, User> producer = new KafkaProducer<>(props)) {
producer.send(new ProducerRecord<String, User>("MyTopic", user));
System.out.println("Message " + user.toString() + " sent !!");
} catch (Exception e) {
e.printStackTrace();
}
现在,我们再次需要为反序列化器注册此属性:
props.put("value.deserializer", "com.knoldus.deserializer.UserDeserializer");
因此,消费者将:
try (KafkaConsumer<String, User> consumer = new KafkaConsumer<>(props)) {
consumer.subscribe(Collections.singletonList(topic));
while (true) {
ConsumerRecords<String, User> messages = consumer.poll();
for (ConsumerRecord<String, User> message : messages) {
System.out.println("Message received " + message.value().toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
所以,这就是Kafka序列化和反序列化。希望您喜欢并理解我们对Kafka的自定义序列化器和反序列化器的解释。
让我们修改Apache Kafka Workflow | Kafka Pub-Sub Messaging
8.结论
因此,在这个Kafka序列化和反序列化教程中,我们学会了创建一个自定义的Kafka SerDe示例。此外,我们看到了对Kafka的串行器和解串器的需求。与此同时,我们学习了Kafka序列化和反序列化的实现方法
Kafka序列化和反序列化与示例的更多相关文章
- 6. kafka序列化和反序列化
https://blog.csdn.net/weixin_33690963/article/details/91698279 kafka序列化: 生产者在将消息传入kafka之前需要将其序列化成byt ...
- [转载]Java序列化与反序列化
[转载]Java序列化与反序列化 来源: https://www.cnblogs.com/anitinaj/p/9253921.html 序列化和反序列化作为Java里一个较为基础的知识点,那你能说一 ...
- java 序列化和反序列化的底层实现原理
出处:序列化和反序列化的底层实现原理是什么? 一.基本概念1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过 ...
- .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...
- Jackson序列化和反序列化Json数据完整示例
Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...
- Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...
- python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
随机推荐
- LeetCode 685. Redundant Connection II
原题链接在这里:https://leetcode.com/problems/redundant-connection-ii/ 题目: In this problem, a rooted tree is ...
- js傻瓜式制作电子时钟
js傻瓜式制作电子时间 使用到的知识点 setInterval函数 构建函数new Date if判断 demo: //css样式请自行设置 <span id="timer" ...
- prisma 已经支持mongodb了
好久没有关注prisma 的版本迭代了,记得在去年12月份左右的时候,mongodb 在github 上还只是一个草案, 官方文档也没有相关的详细介绍,今天留意了下,居然已经支持了,还是很给力的(my ...
- Linux 重启 PHP-FPM 命令
1. 停止命令 pkill php-fpm 2.重启或启动命令 php-fpm -R
- Linux 系统管理——磁盘管理及文件系统实例
1.为主机新增两块30GB的SCSI硬盘 2.划分3个主分区,各5GB,剩余空间作为扩展分区 3.在扩展分区中建立2个逻辑分区,容量分别为2GB.10GB 4.将第一个逻辑分区的类型改为swap 5. ...
- vue 把后端返回的图片和url链接生成的二维码用canvas 合成一张图片
H5 页面在做某个活动的时候,有两种分享方式,一种是链接分享,一种是图片分享. 链接分享的话,如果是在微信里,就可引导用户利用微信浏览器自带的分享,根据sdk设置分享标题简介链接缩略图即可. 图片分享 ...
- 数据分析师(Data Analyst),数据工程师(Data Engineer),数据科学家(Data Scientist)的区别
数据分析师(Data Analyst):负责从数据中提取出有用的信息,以帮助公司形成业务决策.工作内容包括:对数据进行提取,清洗,分析(用描述统计量,趋势分析,多维度分析,假设检验等统计常用方法对数据 ...
- js无限轮播算法中干掉if判断
无限轮播在网页应用中经常见到,这其中算法各有千秋,在学习算法分析一书中发现自增取余方法可以干掉一些不必要的if判断,具体代码如下: var arr= [1,2,3,4,5,6,7,8]; var in ...
- 「ZJOI2019」麻将
传送门 Solution 对于条件一:记录一个\(cnt\)表示牌个数\(≥2\)的个数 设\(dp_{i,0/1,j,k}\)表示考虑了\(1...i\),当前是否有对子,以\(i-1\),\(i ...
- rust猜数游戏代码
use std::io; use rand::Rng; use std::cmp::Ordering; fn main() { println!("Guess the number!&quo ...