在 Kafka 中,acks
参数是 Kafka Producer 配置中的一个关键参数,用于指定生产者在发送消息后等待的确认机制。这个参数控制了生产者发送消息的可靠性和性能之间的权衡。acks
参数有三种主要的取值:
-
acks=0(Fire and Forget):
- 生产者在发送消息后不等待任何确认。这意味着生产者将消息发送到 Kafka 服务器,而不等待服务器的任何确认,可能导致消息的丢失。这种模式提供了最低的延迟和最高的吞吐量,但没有消息的持久性保障。
properties.put("acks", "0");
-
acks=1(Leader Acknowledgment):
- 生产者在发送消息后等待领导者(Leader)的确认。一旦领导者收到消息,就会向生产者发送确认,然后生产者认为消息已成功发送。这种模式提供了一定程度的消息持久性保障,但如果领导者在消息发送后立即失效,可能导致消息的丢失。
properties.put("acks", "1");
-
acks=all(Full Acknowledgment):
- 生产者在发送消息后等待所有的 ISR(In-Sync Replicas,同步副本)都确认。这包括领导者和所有同步副本,确保消息被多个副本复制,提供最高级别的消息持久性保障。这也是实现 Exactly Once 语义的一种方式。
properties.put("acks", "all");
选择合适的 acks
参数取值取决于应用程序的可靠性需求和性能要求。Fire and Forget 提供了最低的延迟和最高的吞吐量,但没有可靠性保障。Leader Acknowledgment 在可靠性和延迟之间提供了平衡。Full Acknowledgment 提供了最高级别的可靠性,但可能会牺牲一些性能。根据具体的业务场景,开发者可以根据需求进行权衡和选择。
Was this helpful?
0 / 0