一、三种消息传递语义(Message Delivery Semantics):核心是“消息被消费处理的次数”
Kafka的三种传递语义本质上描述的是“一条消息从生产到最终被消费者处理完成,可能出现的次数”,这由生产者的消息写入可靠性和消费者的offset提交策略共同决定。
1. At most once(最多一次)
- 定义:消息可能丢失,但绝不会被重复处理。
- 触发场景:消费者先提交offset,再处理消息。
- 流程:消费者读取消息 → 立即提交offset(标记为“已消费”) → 开始处理消息。
- 风险:如果提交offset后、处理消息前消费者宕机,消息实际未处理,但offset已提交,后续不会再消费这条消息,导致消息丢失。
- 适用场景:对数据丢失不敏感,但严格不允许重复的场景(如日志采集,丢失几条影响不大,重复则可能导致统计不准&