0%

kafka生产者消息序列化

kafka消息序列化和反序列化

生产者需要用序列化器把对象转换成字节数组才能通过网络发送给Kafka集群。而在另一端,消费者需要用相应的反序列化器把从Kafka集群收到的字节数组转换成相应的对象才能做后续处理。

Serializer是Kafka提供的序列化接口:

1
2
3
4
default void configure(Map<String, ?> configs, boolean isKey) 
byte[] serialize(String topic, T data)
default byte[] serialize(String topic, Headers headers, T data)
default void close()

Deserializer是Kafka提供的反序列化接口:

1
2
3
4
default void configure(Map<String, ?> configs, boolean isKey) 
deserialize(String topic, byte[] data)
default T deserialize(String topic, Headers headers, byte[] data)
default void close()

序列化和反序列化接口中,serialize方法和deserialize方法分别用于执行序列化和反序列化操作。close方法一般是空的不需要重写,如果要实现该方法,必须确保此方法是幂等的,它可能会被调用多次.

生产者常用的序列化器有:StringSerializer、UUIDSerializer、ByteArraySerializer、ByteBufferSerializer、BytesSerializer、DoubleSerializer、FloatSerializer、IntegerSerializer、LongSerializer、ShortSerializer;消费者常用的反序列化器和上面的生产者常用序列化器一一对应。比如:StringDeserializer、UUIDDeserializer等等

当常用的无法满足需求时,可以使用Avro、JSON、Thrift、ProtoBuf、Protostuff等等通用的序列化工具来实现。Spring Kafka项目就提供了JsonSerializer和JsonDeserializer的实现。

扩展阅读

什么是序列化和反序列化