spring 整合kafka實現 BatchAcknowledgingMessageListener 批量接收數據

之前參考別的文章實現了spring整合kafka接收單條數據處理,由於高吞吐量,高併發的需要,需要批量取kafka數據,並批量存儲。在網上搜索的資料,發現資料比較少,本人在原來單條數據處理的基礎上用BatchAcknowledgingMessageListener接口實現了批量接收kafka數據的功能。

前言:環境配置說明,由於spring託管的方式不支持低版本的kafka數據的批量接收,所以在升級kafka爲1.1.0時再做批量接收處理。

兼容性參考下圖:

1.環境配置:

名稱 版本號
spring-framework
4.2.3.RELEASE
kafka_2.11
1.1.0
kafka-clients
1.1.0
spring-kafka
2.1.6.RELEASE
jdk
1.7

2.修改的配置文件

2.1) consumerProperties不再自動提交接收:

<entry key="enable.auto.commit" value="false"/>

2.2)監聽類改爲實現BatchAcknowledgingMessageListener接口的監聽類

<bean id="messageListernerConsumerService" class="com.consumer.KafkaBatchAcknowledgingMessage"/>

2.3)在實現類中重載方法onMessage()方法。

import org.springframework.kafka.listener.BatchAcknowledgingMessageListener;
import org.springframework.kafka.support.Acknowledgment;
import java.util.List;

public class KafkaBatchAcknowledgingMessage implements BatchAcknowledgingMessageListener {

    @Override
    public void onMessage(List list, Acknowledgment acknowledgment) {
            System.out.println("批量接收的消息:"+list);
            acknowledgment.acknowledge();
    }



    @Override
    public void onMessage(Object o) {
   
    }
}

3.重啓項目測試批量接收數據。

在Kafka堆積數據的情況下,每次批量接收數據在500條左右,實現數據的批量接收,減少了線程數,提高了效率。

歡迎大家溝通交流。

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