【生产者篇】Serializer分析和源码解读.md

1、序列化作用

序列化主要是用来解决数据在网络中传输的问题. 在网络中传输的数据必须全是字节。

生产者需要用序列化器( Serializer )把对象转换成字节数组才能通过网络发送给Kafka ,消费者需要用反序列化器( Deserializer )把从Kafka 中收到的字节数组转换成相应的
对象。在入门demo中使用的是org. apache.kafka. common. serialization. StringSerializer ,因为消息类型就是String,除了StringSerializer ,Kafka也提供了其他基本类型的内置序列化反序列化器

2、Kafka内置序列化器和反序列化器:

在这里插入图片描述

Serializer ,Deserializer 分别是序列化和反序列化的顶层接口
ExtendedDeserializer ,ExtendedSerializer 是增强类,通过一个内部类Wrapper对具体的实现类进行增强,可以访问header
其他实现类就是Kafka中对基本数据类型和引用类型内置的序列化和反序列化器
Serde就是Serializer和Deserializer结合

Java类型 序列化 反序列化
int IntegerSerializer IntegerDeserializer
long LongSerializer LongDeserializer
double DoubleSerializer DoubleDeserializer
byte BytesSerializer BytesDeserializer
byte ByteArraySerializer ByteArrayDeserializer
byte ByteBufferSerializer ByteBufferDeserializer
String StringSerializer StringDeserializer
3、序列化器使用配置

序列化使用:只需要在配置中按照

prop.put("XXX序列化器","序列化器的全类名");格式进行配置

注意:生产者使用的序列化器和消费者使用的反序列化器是需要一一对应的,才能正确的编解码。

在入门demo中key和value的序列化和反序列化配置分别是:

pro.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer")
pro.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");

pro.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
pro.put("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
4、序列化器的初始化时机

在KafKaProducer的实例化中进行初始化,具体在KafKaProducer的核心构造方法中,分别读取value.serializer和key.serializer配置的Class名字,利用反射创建对象,然后包装成ExtendedSerializer

        if (keySerializer == null) {
   
            /**
             * 读取序列化器
             *
             *config.getConfiguredInstance
             (ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,Serializer.class))
             * 就是通过配置值获取一个 Serializer的接口实例,
             ensureExtended就是对这个实例进行增强,
             */
            this.keySerializer 
                = ensureExtended
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值