Kafka支持三种消息确认机制:
1. No Reply(acks = 0)
生产者不等待来自broker的任何确认,直接返回成功。
这是最快的方式,但消息可靠性最低。
举例
ProducerConfig config = new ProducerConfig(props);
config.setAcks(0);
Producer<String, String> producer = new KafkaProducer<>(config);
2. Leader Only(acks = 1)(默认)
生产者仅等待leader分区已经接收成功后返回。
不等待其他副本也接受成功。
这提供了更高的吞吐量和较低的延迟。
举例
config.setAcks(1);
3. All ISR(acks = -1)
生产者等待所有在ISR列表中的节点接受成功后才返回。
这提供了最高的可靠性。
举例
config.setAcks(-1);
简单总结:
- acks = 0 : 不等待任何确认,消息可靠性最低但吞吐量最高
- acks = 1 : 只等待分区leader确认,提供高吞吐量
- acks = -1:等待所有ISR节点确认,提供最高可靠性
需要根据实际应用情况和容错要求,选择一个合适的acks配置。
Kafka支持三种确认级别:No Reply、Leader Only 和 All ISR。提供了消息可靠性与吞吐量之间的 tradeoff。