Kafka提供了多种消息传递语义,以适应不同的业务需求和可靠性要求。以下是Kafka消息传输的可靠性语义及其实现机制:
1. At Most Once(至多一次)
-
语义:消息可能会丢失,但不会被重复传递。
-
实现机制:
-
消费者在处理消息之前提交偏移量,导致即使消息处理失败,也认为已经处理完成。
-
配置
enable.auto.commit=true
,并设置较短的auto.commit.interval.ms
。
-
2. At Least Once(至少一次)
-
语义:消息不会丢失,但可能会被重复传递。
-
实现机制:
-
消费者在处理完消息后手动提交偏移量,确保消息不会丢失。
-
配置
enable.auto.commit=false
,并在处理每条消息后调用consumer.commitSync()
或consumer.commitAsync()
提交偏移量。
-
3. Exactly Once(精确一次)
-
语义:消息既不会丢失,也不会被重复传递。
-
实现机制:
-
幂等性生产者:通过配置
enable.idempotence=true
,确保生产者在重试发送时不会产生重复消息。 -
事务性生产者和消费者:通过事务确保生产和消费操作要么全部成功,要么全部失败
-