数据可靠性保证:
为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据
acks 参数配置:
0: producer 不等待 broker 的 ack,这一操作提供了一个最低的延迟,broker 一接收到还
没有写入磁盘就已经返回,当 broker 故障时有可能丢失数据;1: 默认值 producer 等待 broker 的 ack,partition 的 leader 落盘成功后返回 ack,如果在 follower
同步成功之前 leader 故障,那么将会丢失数据;-1(all): producer 等待 broker 的 ack,partition 的 leader 和 follower 全部落盘成功后才
返回 ack。但是如果在 follower 同步完成后,broker 发送 ack 之前,leader 发生故障,那么会
造成数据重复。
ISR作用:
Leader维护了一个动态的in-syncreplicaset(ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由 replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。
LEO(Log End Offset): 指的是每个副本最大的 offset;
HW(High Watermark): 指的是消费者能见到的最大的 offset,ISR 队列中最小的 LEO。
Exactly Once: 将服务器的ACK级别设置为-1,可以保证Producer到Server之间不会丢失数据,即AtLeastOnce语义。相对的,将服务器ACK级别设置为0,可以保证生产者每条消息只会被发送一次,即AtMostOnce语义。



