美文网首页全栈工程师修炼指南
都在用 Kafka ! 消息队列序列化怎么处理

都在用 Kafka ! 消息队列序列化怎么处理

作者: 码农架构 | 来源:发表于2021-01-25 11:30 被阅读0次

关注 <码农架构> 技术社区分享
专注于系统架构、高可用、高性能、高并发类技术分享

生产者需要用序列化器(Serializer)把对象转换成字节数组才能通过网络发送给Kafka。而在对侧,消费者需要用反序列化器(Deserializer)把从 Kafka 中收到的字节数组转换成相应的对象。

先参考下面代码实现一个简单的客户端。

为了方便,消息的 key 和 value 都使用了字符串,对应程序中的序列化器也使用了客户端自带的 org.apache.kafka.common.serialization.StringSerializer,除了用于 String 类型的序列化器,还有 ByteArray、ByteBuffer、Bytes、Double、Integer、Long 这几种类型,它们都实现了 org.apache.kafka.common.serialization.Serializer 接口,此接口有3个方法:

configure() 方法用来配置当前类,serialize() 方法用来执行序列化操作。而 close() 方法用来关闭当前的序列化器,一般情况下 close() 是一个空方法,如果实现了此方法,则必须确保此方法的幂等性,因为这个方法很可能会被 KafkaProducer 调用多次。

生产者使用的序列化器和消费者使用的反序列化器是需要一一对应的,如果生产者使用了某种序列化器,比如 StringSerializer,而消费者使用了另一种序列化器,比如 IntegerSerializer,那么是无法解析出想要的数据的

下面就以 StringSerializer 为例来看看 Serializer 接口中的3个方法的使用方法,StringSerializer 类的具体实现如代码

首先是 configure() 方法,这个方法是在创建 KafkaProducer 实例的时候调用的,主要用来确定编码类型,不过一般客户端对于 key.serializer.encoding、value.serializer. encoding 和 serializer.encoding 这几个参数都不会配置,在 KafkaProducer 的参数集合(ProducerConfig)里也没有这几个参数(它们可以看作用户自定义的参数),所以一般情况下 encoding 的值就为默认的“UTF-8”。serialize() 方法非常直观,就是将 String 类型转为 byte[] 类型。

如果 Kafka 客户端提供的几种序列化器都无法满足应用需求,则可以选择使用如 Avro、JSON、Thrift、ProtoBuf 和 Protostuff 等通用的序列化工具来实现,或者使用自定义类型的序列化器来实现。下面就以一个简单的例子来介绍自定义类型的使用方法

假设我们要发送的消息都是 Company 对象,这个 Company 的定义很简单,只有名称 name 和地址 address,示例代码参考如下

下面我们再来看一下 Company 对应的序列化器 CompanySerializer,示例代码如代码

如何使用自定义的序列化器 CompanySerializer 呢?只需将 KafkaProducer 的 value.serializer 参数设置为 CompanySerializer 类的全限定名即可。假如我们要发送一个 Company 对象到 Kafka,关键代码如代码

注意,示例中消息的 key 对应的序列化器还是 StringSerializer,这个并没有改动。其实 key.serializer 和 value.serializer 并没有太大的区别

公众号:码农架构

关注 <码农架构> 技术社区分享
专注于系统架构、高可用、高性能、高并发类技术分享

相关文章

  • 都在用 Kafka ! 消息队列序列化怎么处理

    关注 <码农架构[https://t.1yb.co/fGWz]> 技术社区分享专注于系统架构、高可用、高性能、高并...

  • Kafka基本原理和搭建

    Kafka 官方网站:http://kafka.apache.org/quickstart消息队列&分布式流处理 ...

  • Kafka 概述

    Kafka 能用来干嘛? 消息队列 实时数据处理, 流式处理(一般结合storm) 日志聚合等 Kafka 架构 ...

  • Kafka,Mq和Redis作为消息队列使用时的差异有哪些

    Kafka kafka是个日志处理缓冲组件,在大数据信息处理中使用。和传统的消息队列相比较简化了队列结构和功能,以...

  • Kafka

    Kafka 一、什么是Kafka Kafka是一个分布式的基于发布/订阅模式的消息队列,强悍的消息处理能力,主要应...

  • 项目笔记5-KafKa

    目前最好的异步消息队列处理器 阻塞队列 写一个生产者消费者模式,使用阻塞队列 Kafka入门 消息持久化:消息永久...

  • kafka入门

    什么是消息队列? 存储数据的队列,借助消息队列可以做到异步、解耦、削峰。 kafka是消息队列模型是怎么样的? P...

  • 面试官:消息队列这些我必问

    消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? kafka,ac...

  • 面试官:消息队列这些我必问

    消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? kafka,ac...

  • 如果面试官再问你消息队列,就把这篇甩给他!

    消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? kafka,ac...

网友评论

    本文标题:都在用 Kafka ! 消息队列序列化怎么处理

    本文链接:https://www.haomeiwen.com/subject/iwmbzktx.html