Kafka数据的可靠性
1.为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。
2.Leader维护了一个动态的in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader(队列中,谁在前谁是leader)。
ack应答机制可手动配置:
Ack=0,相当于异步发送,消息发送完毕即offset增加(到leader内存就返回ack),继续生产。
Ack=1,leader收到一个replica(只有leader落盘备份),ack才增加offset,然后继续生产。
Ack=-1,leader收到所有replica (leader和follower全部落盘备份),ack才增加offset,然后继续生产。