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的串行器接口

  1. public interface Serializer extends Closeable {
    void configure(Map<String, ?> var1, boolean var2);
    byte[] serialize(String var1, T var2);
    void close();
    }

6.与Kafka的解串器接口

  1. 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)。
  1. 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 + ")";
    }
    }
  1. 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() {
    }
    }
  1. 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

  1. props.put("value.serializer", "com.knoldus.serializers.UserSerializer");

那么,制作人将是:

  1. 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();
    }

现在,我们再次需要为反序列化器注册此属性:

  1. props.put("value.deserializer", "com.knoldus.deserializer.UserDeserializer");

因此,消费者将:

  1. 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序列化和反序列化与示例的更多相关文章

  1. 6. kafka序列化和反序列化

    https://blog.csdn.net/weixin_33690963/article/details/91698279 kafka序列化: 生产者在将消息传入kafka之前需要将其序列化成byt ...

  2. [转载]Java序列化与反序列化

    [转载]Java序列化与反序列化 来源: https://www.cnblogs.com/anitinaj/p/9253921.html 序列化和反序列化作为Java里一个较为基础的知识点,那你能说一 ...

  3. java 序列化和反序列化的底层实现原理

    出处:序列化和反序列化的底层实现原理是什么? 一.基本概念1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过 ...

  4. .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)

    序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...

  5. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  6. Python开发基础-Day19继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 def __init__(self,name,year,mon,day): self.name = nam ...

  7. python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例

    继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...

  8. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

  9. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

随机推荐

  1. hdu1171&&P2000——母函数

    hdu1171 题意:有 $n$ 种设施,每种有价值 $v_i$ 和数量 $m_i$,求一种方案使得分成价值尽可能相近的两组.($n \leq 50, v_i \leq 50, m_i \leq 10 ...

  2. 51nod1423 最大二“货”

    [传送门] 单调栈其实就是个后缀$max/min$,这道题可以维护一个单调递减的单调栈,pop元素的时候,能pop掉的元素就是第二大,当前元素为第一大.遇到第一个不能pop掉的时候当前元素就是第二大, ...

  3. java正则表达式——规则表

    常用正则规则: 构造 匹配 字符 \\ 反斜线字符 \r 回车符 ('\u000D') \n 新行(换行)符 ('\u000A') 字符类 [abc] a.b 或 c [^abc] 任何字符,除了 a ...

  4. EFK项目操作(待完善)

    Environment:{ 三台服务器均安装 kafka  zookeeper filebeat logstash kibana } 一.首先安装zookeeper,kafka,让机器有 leader ...

  5. LOJ P10011 愤怒的牛 题解

    每日一题 day36 打卡 Analysis 非常水的二分模板,就直接二分答案,用贪心策略check就好了 #include<iostream> #include<cstdio> ...

  6. nexus 3.17.0 做为golang 的包管理工具

    nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...

  7. 石子合并(NOI1995)题解

    题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  8. 洛谷 P2312 解方程 题解

    P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...

  9. Alpha总体规划 & 任务分解

    目录 Alpha阶段项目目标 任务拆解和优先级 总体规划 Alpha-1任务分配 Alpha-2任务分配 Alpha阶段项目目标 初步实现北航社团小程序: 北航社团小程序基础功能(优先级中的高两级,即 ...

  10. Linux安装问题解决

    首先安装VM,之后下载centos7.5 安装好vm后运行时无法执行操作 提示 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 此主机支持 Intel VT-x,但 I ...