LongSerializer 和 Serdes.LongSerde 之间的 Kafka 序列化差异

Kafka serialization difference between LongSerializer and Serdes.LongSerde

我们正在编写一个发布到 Kafka 的新应用程序,我们需要将消息的键序列化为一个 long 值。在检查 Kafka 文档的序列化时,似乎有两个长序列化器 类 作为 LongSerializer 和 Serdes.LongSerde。我们尝试搜索两者之间差异的参考资料,但找不到任何 link 来解释差异。如果有人可以让我们知道/分享一个 link 来解释它们之间的区别,我们将不胜感激。或者它们是一样的吗?

序列化程序文档的主要 link:https://kafka.apache.org/11/javadoc/org/apache/kafka/common/serialization/package-frame.html

长序列化器:https://kafka.apache.org/11/javadoc/org/apache/kafka/common/serialization/LongSerializer.html

Serdes.LongSerde: https://kafka.apache.org/11/javadoc/org/apache/kafka/common/serialization/Serdes.LongSerde.html

谢谢。

如您所知,对于 Kafka(代理),消息是字节数组(键、值)。

KafkaProducer、KafkaConsumer 和 KafkaStreams 需要知道如何写入和读取消息——将它们从 POJO 转换为字节数组,反之亦然。

为此目的,使用了 org.apache.kafka.common.serialization.Serializerorg.apache.kafka.common.serialization.Deserializer。 KafkaProducer 使用 Serializer - 将 KeyValue 转换为字节数组,KafkaConsumer 使用 Deserializer 将字节数组转换为 KeyValue. KafkaStreams 应用程序同时执行写入和读取操作(to/from 主题),并且 org.apache.kafka.common.serialization.Serdes 是 - 它是 SerializerDeserializer 的某种包装器。

在你的例子中:

  • LongSerializer 是一个 class,应该用于将 Long 转换为字节数组
  • LongSerde 是一个 class,应该在 Kafka Streams 应用程序中用于读取和写入 Long(在底层它使用 LongSerializerLongDeserializer

补充阅读: