記一次Kafak重複消費的問題

就在今天早上發現推送連續推了幾條重複的消息,於是就仔細地查閱了下kafka相關配置,大概如下:

  kafka:
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      batch-size: 1000
      buffer-memory: 524288
      retries: 0
      acks: -1
    consumer:
      #      group-id: consumer-tutorial-${server.port}
      group-id: consumer-tutorial
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      auto-offset-reset: earliest
      enable-auto-commit: true

消費使用地是默認值,自動提交,間隔時間也沒有設置(其實之前別人設置了,auto-commit-interval-ms,但這個屬性在SpringBoot配置中並不存在,而是auto-commit-interval。也就是說之前設置的都是錯誤的,沒有起作用)。我在本地做測試也沒發現問題,沒辦法就分析了下日誌,發現消費端從接收到業務處理完花了好幾分鐘(說到這裏,我原先以爲kafka自動提交點是在消費端一接收到消息時就提交,但是並不是這樣的)。於是,我就試着在本地做延時操作,分別試了延遲2分鐘、3分鐘、5分鐘。當我延時了5分鐘的時候,就出現消費端重複消費的問題。那麼問題就很明顯了,就是因爲消費端不是在一收到消息就提交,而是在整個業務完成之後才提交的。

另外,說一下,我使用的時Spring提供的@KafkaListener來監聽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章