之前參考別的文章實現了spring整合kafka接收單條數據處理,由於高吞吐量,高併發的需要,需要批量取kafka數據,並批量存儲。在網上搜索的資料,發現資料比較少,本人在原來單條數據處理的基礎上用BatchAcknowledgingMessageListener接口實現了批量接收kafka數據的功能。
前言:環境配置說明,由於spring託管的方式不支持低版本的kafka數據的批量接收,所以在升級kafka爲1.1.0時再做批量接收處理。
兼容性參考下圖:
1.環境配置:
名稱 | 版本號 |
|
|
|
|
|
|
|
|
|
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條左右,實現數據的批量接收,減少了線程數,提高了效率。
歡迎大家溝通交流。