kafka指定偏移量拉取與偏移量半自動提交

離去年寫了有關偏移量有關文章快一年了,但最近在偏移量方面遇到了些小問題,在這裏記錄下。還有關於偏移量半自動提交,是個很經典的問題,順便也記錄下。


關於拉取指定偏移量

應該只有用consumer.assign(topicPartitionList);和consumer.seek(topicPartition,offset);這種指定分區的方法才能指定偏移量。

在sparkstreaming中同樣也是用assign的方法提交的最後實現拉取指定偏移量的方法。

KafkaUtils.createDirectStream(JSSC, LocationStrategies.PreferConsistent(),
                ConsumerStrategies.Assign(topicPartitionList, kafkaParams, repairOffset));

但是在這個過程中,配置的自動提交偏移量失去作用,必須手動提交偏移量,即使用consumer.commitAsync();。


半自動提交偏移量

在任務執行結束後提交一次偏移量,同時在執行失敗後提交一次偏移量,儘量保證偏移量不丟失,

  try {
            while(true) {
                consumerRecords = this.consumer.poll(100);
                for (ConsumerRecord<String, String> record : consumerRecords) {
          
                    String value = record.value();
                    if (StringUtils.isNotBlank(value)) {
                        //業務邏輯
                    }
                    consumer.commitAsync();
                   
                }
            }
        }catch (Exception e) {
            System.out.println("commit failed");
        } finally {
            try {
                consumer.commitSync();
            } finally {
                consumer.close();
            }
        }

問題:

之前因爲環境調整,在卸載kafkamanager的時候,新建了一個groupid。但在重裝kafkamanager後,這個groupid丟失。具體原因有待排查。

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