【问题标题】:Spring Kafka JsonSerializer usageSpring Kafka JsonSerializer 使用
【发布时间】:2016-11-01 21:18:34
【问题描述】:

我正在尝试按照此处的说明进行操作:

http://docs.spring.io/spring-kafka/docs/1.1.1.RELEASE/reference/htmlsingle/#_serialization_deserialization_and_message_conversion

设置一个 KafkaTemplate 可以序列化和发送我拥有的一些简单的 Java POJO。但我发现文档含糊不清,尤其是这一部分:

为此,Spring for Apache Kafka 还提供 基于 Jackson 的 JsonSerializer/JsonDeserializer 实现 JSON 处理器。当 JsonSerializer 非常简单并且可以 将任何 Java 对象写为 JSON byte[]

...

虽然 Serializer/Deserializer API 从 低级的 Kafka Consumer 和 Producer 视角,还不够 消息传递级别,其中 KafkaTemplate 和 @KafkaListener 位于 当下。

...

MessageConverter 可以是 直接通过注入到 KafkaTemplate 实例中 AbstractKafkaListenerContainerFactory bean 定义 @KafkaListener.containerFactory() 属性

所以我的问题是:

  • 我的 KafkaTemplate 是什么类型的?是KafkaTemplate<String, Object>吗?还是KafkaTemplate<String, String>
  • 什么是我的 序列化器类?是StringSerializer,还是JsonSerializer
  • 做 我在创建 KafkaTemplate bean 时使用kafkaTemplate.setMessageConverter(new StringJsonMessageConverter())

如果这些是愚蠢的问题,我深表歉意 - 我试图了解设置它的正确方法,而不是“破解它直到它有点工作”。

【问题讨论】:

  • 我使用的是 kakfa 库中的 Producer 和 Consumer。因此,在创建这些时,我使用 kafka 库中的键和值序列化器作为 (StringSerializer)。我阅读了几个博客来使用 StringSerializer。在插入队列时将 json 转换为字符串,在阅读消息后反之亦然)。

标签: java spring serialization apache-kafka spring-kafka


【解决方案1】:
  1. <String, Object>

  2. JsonSerializer

  3. 消息转换器仅在使用带有Message<?> 的发送时使用,对于JsonSerializer,您应该使用默认的。

【讨论】:

  • 太棒了,感谢您的回答!对于消费者(反序列化),如果我想接收 Message> ,我只需要使用 MessageConverter 是否相同?
  • 视情况而定;如果您使用@KafkaListener,则涉及Message<?>s。有关使用 JsonDeserializer 的示例,请参阅来自 my SpringOne talk 的应用程序。消费端的消息转换器 - 特别是 app5 和 app6。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2019-12-30
  • 2020-02-04
相关资源
最近更新 更多