Java 使用来自同一kafka主题的字符串和JSON消息-反序列化问题

Java 使用来自同一kafka主题的字符串和JSON消息-反序列化问题,java,spring-kafka,Java,Spring Kafka,字符串使用者正在使用JSON消息。My Products发送两种类型的消息字符串和序列化JSON @KafkaListener(topics = "${kafka.topic}", groupId = "${kafka.group-id}", containerFactory = "${kafka.string-listener-container-factory}") public void consume(@NotNull ConsumerRecord<String, String&g

字符串使用者正在使用JSON消息。My Products发送两种类型的消息字符串和序列化JSON

@KafkaListener(topics = "${kafka.topic}", groupId = "${kafka.group-id}", containerFactory = "${kafka.string-listener-container-factory}")
public void consume(@NotNull ConsumerRecord<String, String> cr, @Payload String payload) {
    log.debug("Received asset id: {}, with key: {}, Partition: {}, Offset: {}  ", payload, cr.key(), cr.partition(),
            cr.offset());

}


@KafkaListener(topics = "${kafka.topic}", groupId = "${kafka.group-id}", containerFactory = "${kafka.json-listener-container-factory}")
public void consumeAssetEvent(@NotNull ConsumerRecord<String, Event> cr, @Payload Event payload) {
    log.debug("Received asset id: {}, with key: {}, Partition: {}, Offset: {}  ", payload, cr.key(), cr.partition(),
            cr.offset());

}
@KafkaListener(topics=“${kafka.topic}”,groupId=“${kafka.group id}”,containerFactory=“${kafka.string侦听器容器工厂”)
公共无效使用(@NotNull ConsumerRecord cr,@Payload String Payload){
log.debug(“收到的资产id:{},键为{},分区为{},偏移量为{}”),有效负载,cr.key(),cr.Partition(),
cr.offset());
}
@KafkaListener(topics=“${kafka.topic}”,groupId=“${kafka.group id}”,containerFactory=“${kafka.json侦听器容器工厂}”)
public void ConsumerAssetEvent(@NotNull ConsumerRecord cr,@Payload事件负载){
log.debug(“收到的资产id:{},键为{},分区为{},偏移量为{}”),有效负载,cr.key(),cr.Partition(),
cr.offset());
}
消费者方面我有两个消费者 1.侦听字符串消息 2.侦听json并反序列化到对象


甚至json消息也被字符串侦听器使用

消费者中没有根据您设置的Serde(如字符串、json等)区分消息的过滤功能。 当生产者发送消息时,它将转换为卡夫卡主题中的字节[]。 然后,此字节[]由consumner反序列化设置反序列化


因此,没有默认的方法将字符串消息过滤到字符串使用者,并将json过滤到json使用者。创建接收所有数据的侦听器并检查其是否为json,或者更改字符串和json的主题(将字符串发送到一个主题,将json发送到另一个主题并相应地使用)。

请说明您使用了多少代理,该主题有多少个分区,您是否从生产者手动分配该主题的分区。?该主题有3个分区,不,我不是从生产者手动分配分区。两个侦听器是否都收到消息?字符串消费者是否接收到所有消息?事件消费者是否始终为空?我始终虽然我使用StringSerializer和JSONSerializer分别生成字符串和JSON消息,但还是在字符串使用者中获取消息。甚至序列化的JSON都是通过字符串使用者方法接收的。使用者中没有根据您设置的Serde(例如字符串、JSON等)区分消息的过滤功能。当生产者发送消息时,它将转换为卡夫卡主题中的字节[]。然后,此字节[]由consumner反序列化设置反序列化。因此,没有默认的方法将字符串消息过滤到字符串使用者,并将json过滤到json使用者。创建接收所有数据的侦听器并检查其是否为json,或者更改字符串和json的主题(将字符串发送到一个主题,将json发送到另一个主题,并相应地使用)。