生产者如何保证不丢数据
生产者是通过ack确认机制来进行保证数据可靠的,topic的每一个partition收到生产者发送的数据后,都需要向生产者发送ack,如果生产者收到ack,则会进行下一轮的发送,否则就会重发数据。
而kafka中一个partition分区包含有一个leader和多个follower副本,而leader是与生产者进行读写交互的,那么partition中的leader何时向生产者回复ack呢?leader下有一个ISR(in-sync replica set),ISR存储的是与leader保持同步的follower集合,只有当ISR中的follower完成数据同步后,leader才会向生产者发送ack,如果follower长时间没有向leader同步数据,则该follower会被踢出ISR,该时间由replica.lag.time.max.ms 参数设定,如果leader发生故障之后,会从ISR中进行选举出新的leader