对于最新的稳定版本,请使用 Spring for Apache Kafka 3.2.1Spring中文文档

对于最新的稳定版本,请使用 Spring for Apache Kafka 3.2.1Spring中文文档

使用日志压缩时,可以发送和接收带有有效负载的消息,以标识密钥的删除。nullSpring中文文档

您还可以出于其他原因接收值,例如,当它无法反序列化值时可能会返回值。nullDeserializernullSpring中文文档

若要使用 发送有效负载,可以将 null 传递到方法的 value 参数中。 一个例外是变体。 由于不能有有效负载,因此可以使用称为 的特殊有效负载类型,框架会发送 . 为方便起见,提供了静态。nullKafkaTemplatesend()send(Message<?> message)spring-messagingMessage<?>nullKafkaNullnullKafkaNull.INSTANCESpring中文文档

使用消息侦听器容器时,接收到的具有 .ConsumerRecordnullvalue()Spring中文文档

要配置处理有效负载,必须使用带有 的注释。 如果是压缩日志的逻辑删除消息,则通常还需要密钥,以便应用程序可以确定哪个键是“”。 以下示例显示了这样的配置:@KafkaListenernull@Payloadrequired = falsedeletedSpring中文文档

@KafkaListener(id = "deletableListener", topics = "myTopic")
public void listen(@Payload(required = false) String value, @Header(KafkaHeaders.RECEIVED_KEY) String key) {
    // value == null represents key deletion
}

当您使用具有多种方法的类级别时,需要一些额外的配置。 具体来说,您需要一个具有有效负载的方法。 以下示例演示如何配置一个:@KafkaListener@KafkaHandler@KafkaHandlerKafkaNullSpring中文文档

@KafkaListener(id = "multi", topics = "myTopic")
static class MultiListenerBean {

    @KafkaHandler
    public void listen(String cat) {
        ...
    }

    @KafkaHandler
    public void listen(Integer hat) {
        ...
    }

    @KafkaHandler
    public void delete(@Payload(required = false) KafkaNull nul, @Header(KafkaHeaders.RECEIVED_KEY) int key) {
        ...
    }

}

请注意,参数是 ,而不是 。nullKafkaNullSpring中文文档

请参阅手动分配所有分区
此功能需要使用框架在使用默认 . 使用自定义时,请参阅将自定义 HandlerMethodArgumentResolver 添加到@KafkaListenerKafkaNullAwarePayloadArgumentResolverMessageHandlerMethodFactoryMessageHandlerMethodFactory
此功能需要使用框架在使用默认 . 使用自定义时,请参阅将自定义 HandlerMethodArgumentResolver 添加到@KafkaListenerKafkaNullAwarePayloadArgumentResolverMessageHandlerMethodFactoryMessageHandlerMethodFactory