Apache Kafka-AckMode最佳实践

概述
我们这里配了个manual, 为啥子嘛
AckMode源码解读
我们来看下 Spring Kafka封装的ACK
ContainerProperties#AckMode
/**
* The offset commit behavior enumeration.
*/
public enum AckMode {
/**
* Commit after each record is processed by the listener.
*/
RECORD,
/**
* Commit whatever has already been processed before the next poll.
*/
BATCH,
/**
* Commit pending updates after
* {@link ContainerProperties#setAckTime(long) ackTime} has elapsed.
*/
TIME,
/**
* Commit pending updates after
* {@link ContainerProperties#setAckCount(int) ackCount} has been
* exceeded.
*/
COUNT,
/**
* Commit pending updates after
* {@link ContainerProperties#setAckCount(int) ackCount} has been
* exceeded or after {@link ContainerProperties#setAckTime(long)
* ackTime} has elapsed.
*/
COUNT_TIME,
/**
* User takes responsibility for acks using an
* {@link AcknowledgingMessageListener}.
*/
MANUAL,
/**
* User takes responsibility for acks using an
* {@link AcknowledgingMessageListener}. The consumer
* immediately processes the commit.
*/
MANUAL_IMMEDIATE,
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
自动提交设置
- RECORD
每条消息被消费完成后,自动提交
- BATCH
每一次消息被消费完成后,在下次拉取消息之前,自动提交 (默认模式)
- TIME :
达到一定时间间隔后,自动提交, 并不是一到就立马提交,如果此时正在消费某一条消息,需要等这条消息被消费完成,才能提交消费进度
- COUNT
消费成功的消息数到达一定数量后,自动提交 ,它并不是一到就立马提交,如果此时正在消费某一条消息,需要等这条消息被消费完成,才能提交消费进度
- COUNT_TIME
TIME 和 COUNT 的结合体,满足任一都会自动提交。
手工提交设置
- MANUAL
调用时,先标记提交消费进度。等到当前消息被消费完成,然后在提交消费进度。
- MANUAL_IMMEDIATE
调用时,立即提交消费进度。
最佳实践
那应该怎么配置呢
-
配置
spring.kafka.consumer.enable-auto-commit
为true,spring.kafka.consumer.auto-commit-interval
设置自动提交的频率 , 举个例子 自动提交,批量拉去了一波,还没消费完,你就提交了,这给时候如果消费者挂了,消息丢失。。。 -
配置
spring.kafka.consumer.enable-auto-commit
为false ,spring.kafka.listener.ack-mode
设置具体模式,结合具体情况。 有可能重复消费,注意幂等性的判断 -
另外,spring.kafka.listener.ack-time 和 spring.kafka.listener.ack-count 可以设置自动提交的时间间隔和消息条数
总而言之,没有标准答案,需要进行trade off ,权衡一下
嗨 ,你这不是诶说么。。。。
文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。
原文链接:artisan.blog.csdn.net/article/details/113868294
- 点赞
- 收藏
- 关注作者
评论(0)