簡體   English   中英

在啟用批處理模式的情況下,使用 Spring Cloud Stream 在 Kafka 中實現 DLQ

[英]Implementing DLQ in Kafka using Spring Cloud Stream with Batch mode enabled

我正在嘗試使用啟用批處理模式的 spring 雲 stream 實現 DLQ

    @Bean
    public ListenerContainerCustomizer<AbstractMessageListenerContainer<?, ?>> customizer(BatchErrorHandler handler) {
        return ((container, destinationName, group) -> {
              if(dlqEnabledTopic.contains(destinationName))
                                    container.setBatchErrorHandler(handler);});
    }

    @Bean
    public BatchErrorHandler batchErrorHandler(KafkaOperations<String, byte[]> kafkaOperations) {
        CustomDeadLetterPublishingRecoverer recoverer = new CustomDeadLetterPublishingRecoverer(kafkaOperations,
                (cr, e) -> new TopicPartition(cr.topic()+"_dlq", cr.partition()));
        return new RecoveringBatchErrorHandler(recoverer, new FixedBackOff(1000, 1));
    }

但有一些疑問:

  1. 如何使用屬性配置鍵/值序列化器 - 我的消息是字符串類型,但 KafkaOperations 使用的是 ByteArraySerializer

  2. 在批處理中存在多條消息,但如果第一條消息失敗,它會轉到 DLQ,但看不到下一條消息的處理。

要求- 在任何索引,如果批處理失敗,我只需要將該消息發送到 DLQ,並且應該再次處理該消息的 rest。

  1. 現在批處理模式現在支持 DLQ 嗎? 就像記錄模式一樣,它可以使用屬性啟用
  1. spring.kafka.producer.*屬性 - 但是,DLT 發布應使用與主 stream 應用程序相同的序列化程序。 ByteArraySerializer通常是正確的。

  2. 正在恢復的批處理錯誤處理程序將對未處理的記錄執行查找並將它們返回。 調試日志記錄應該可以幫助您找出問題所在。 如果您無法弄清楚,請提供一個展示您所看到行為的MCRE

  3. 不; binder 不支持批處理模式的 DLQ; 配置錯誤處理程序是正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM