为确保生产者发送的数据能够可靠地写入指定主题,主题的每个分区在成功接收数据后,必须向生产者返回确认响应(ack)。只有当生产者收到该确认信号,才会继续发送后续数据;若未接收到确认,生产者将判定发送失败,并自动重新发送相关数据,以保障数据不丢失,提升传输的可靠性。
1、 副本数据同步方法
2、 Kafka采用第二种方案,因其更具优势与适用性。
3、 为容忍n个节点故障,第一种方案需2n+1个副本,第二种仅需n+1个。由于Kafka每个分区数据量大,采用第一种方案会导致严重的数据冗余,存储开销显著增加,因此第二种方案在资源利用上更具优势。
4、 尽管第二种方案网络延迟较高,但对Kafka的运行影响不大。
5、 Leader节点会维护一个动态的同步副本集合(ISR),即与Leader保持数据一致的Follower列表。当Follower成功复制了Leader上的数据后,Leader便会向其发送确认应答(ack)。若某个Follower在指定时间内未能及时从Leader拉取并同步最新数据,就会被移出ISR,这一时间上限由参数replica.lag.time.max.ms控制。只有处于ISR中的副本才有资格参与新的Leader选举。一旦当前Leader出现故障,系统将自动从ISR中选取一个健康的Follower升级为新的Leader,从而保证分区高可用和数据一致性。这种机制有效平衡了数据安全与集群性能之间的关系。
6、 确认应答机制
7、 对于重要性较低的数据,可靠性要求不高,可容忍少量丢失,因此无需等待ISR中所有follower完成同步,可直接提交。
8、 Kafka为用户提供了三种可靠性级别,可根据对延迟和可靠性的需求权衡后选择相应配置。
9、 配置acks参数
10、 生产者发送消息后不等待代理的确认,延迟最低。代理接收到消息但尚未写入磁盘时即返回响应,若此时代理发生故障,可能导致数据丢失。
11、 生产者等待代理返回确认信号,分区主副本数据写入磁盘后即发送确认。若主副本在从副本完成同步前发生故障,尚未同步的数据将无法恢复,导致数据丢失。
12、 当配置为-1时,生产者需等待Broker的确认。此时,分区的Leader与Follower均需将数据成功写入磁盘后,才返回确认信息。然而,若在Follower完成数据同步后、Broker发送确认前,Leader突然发生故障,系统可能触发重新选举。新的Leader接替后,生产者可能因未收到确认而重发消息,从而导致数据重复写入,带来潜在的数据一致性问题。
13、 故障处理具体步骤
14、 LEO代表各副本中最大的偏移量。
15、 HW指消费者可见的最大偏移量,即同步副本集中最小的日志末端偏移。
“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)










