赞
踩
Spring Kafka消费消息的模式分为2种模式(对应spring.kafka.listener.type配置):
且每种模式都分为2种提交已消费消息offset的ack模式:
接下来依次讲解这两种消费模式及其对应的ack模式的示例配置及代码。
本章节先来讲讲record模式 - 单记录消费,且分为自动确认和手动确认2种方式来提交已消费消息offset。
即由Spring Kafak框架按照配置规则自动提交已消费消息offset,无需程序手动编码控制。
需注意如下对应配置:
# ============ 方式1:定时自动提交[不推荐] =====================
# 开启自动提交(按周期)已消费offset
spring.kafka.consumer.enable-auto-commit
: true
# 自动提交已消费offset时间价格(配置enable-auto-commit=true时使用)
spring.kafka.consumer.auto-commit-interval
: 1s# ========= 方式2:通过ack-mode设置自动提交[推荐] =============
# 禁用自动提交(按周期)已消费offset
spring.kafka.consumer.enable-auto-commit
: false
# listener类型为单条记录single类型(默认为single单条消费模式)
spring.kafka.listener.type
: single
# offset提交模式为record
spring.kafka.listener.ack-mode
: record
注:
关于消费者提交已消费消息offset的相关配置说明:
spring.kafka.listener.ack-mode列表(详细说明参见:SpringKafka - Committing Offsets)
ack-mode模式
说明
自动提交
RECORD
单记录
当每一条记录被消费者监听器(ListenerConsumer)处理之后提交
BATCH(默认)
批量
当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后提交
TIME
超时
当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,距离上次提交时间大于TIME时提交
(通过spring.kafka.listener.ack-time设置触发时间)
COUNT
超过消费数量
当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后,被处理record数量大于等于COUNT时提交
(通过spring.kafka.listener.ack-count设置触发数量)
COUNT_TIME
超时或超数量
TIME或COUNT 有一个条件满足时提交
MANUAL
手动提交(ack)后同BATCH
当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后, 手动调用Acknowledgment.acknowledge()后提交
需要手动使用
Acknowledgment参数提交
MANUAL_IMMEDIATE
手动立即提交
手动调用Acknowledgment.acknowledge()后立即提交
需要手动使用
Acknowledgment参数提交
消费端配置示例1 - 定时自动提交[不推荐]
spring: kafka: # 逗号分隔的集群broker列表 bootstrap-servers: localhost:9092 # ==================================================== # ================== 消费者配置 ======================== # ==================================================== consumer: # 自动提交(按周期)已消费offset enable-auto-commit: true # 自动提交已消费offset时间价格(配置enable-auto-commit=true时使用) auto-commit-interval: 1s ... # ==================================================== # ============= 消费者监听器(及线程池)配置 ============== # ========&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。