生产者发送消息给Kafka时,可以通过配置参数`acks`来决定消息的可靠性。`acks`参数可选值为0、-1(或all)、或1。其中,0表示生产者完全不关心broker的处理结果,吞吐量最高但不保证消息的可靠性;-1或all表示只有当leader和所有ISR副本都写入消息后,生产者才收到确认,保证了消息不丢失,但吞吐量最低;默认值1表示leader自己写入后就响应,只要leader存在,消息就不会丢失,但仍然可能丢失在其他副本上,实现的是at least once。配置为0时,虽然理论上不保证消息不丢失,但在集群稳定情况下,不设置为0的情况下消息不会丢失。
#### 消费者端
消费者通过offset来保证消息的传递,自动提交offset默认为true,实现的是at most once;在消费后提交则实现的是at least once。自动提交offset是Kafka消费者默认行为。