织梦响应式网站怎么做,网站开发的技术支持,网页制作基础教程复兴,做网站就业要会什么前言 通过前面的文章#xff0c;相信大家对Kafka有了一定的了解了#xff0c;那接下来问题就来了#xff0c;Kafka既然作为一个分布式的消息队列系统#xff0c;那它会不会出现消息丢失或者重复消费的情况呢#xff1f;今天咱们就来一探。 实现机制 Kafka采用了一系列机… 前言 通过前面的文章相信大家对Kafka有了一定的了解了那接下来问题就来了Kafka既然作为一个分布式的消息队列系统那它会不会出现消息丢失或者重复消费的情况呢今天咱们就来一探。 实现机制 Kafka采用了一系列机制来实现消息传递的保证和一致性关键点 至少一次的消息传递At Least Once DeliveryKafka确保消息至少会被传递给消费者一次。生产者写入消息到Kafka时会等待消息被持久化并复制到ISR中的副本并返回一个确认ack给生产者。只有当所有ISR中的副本都完成了消息的复制后消息才被认为是提交成功的生产者才会收到确认。这样可以确保消息的可靠性但也可能出现消息重复传递的情况。 消费者的消费位置Consumer Offset消费者在消费消息时会记录自己的消费位置即消费者偏移量consumer offset。消费者可以将偏移量提交到Kafka以便在重启或故障恢复后继续消费。Kafka会将消息的偏移量持久化保证在故障发生时可以对未消费的消息进行重播。 消费者组的协调和重平衡Consumer Group Coordination and RebalanceKafka的消费者可以组成一个消费者组共同消费一个或多个主题的消息。消费者组中的每个消费者负责处理一个或多个分区。当消费者组中的消费者变化时如新加入消费者、消费者故障等Kafka会进行消费者组的重平衡重新分配分区给消费者。重平衡是为了保证每个分区只有一个消费者进行消费以保证消息的顺序性和一致性。 消费者的幂等性和事务性Consumer Idempotence and Transactions消费者可以实现幂等性来处理重复消息。消费者可以使用消息的唯一标识符对消息进行去重以确保消费的幂等性。此外Kafka还提供了事务性API使消费者能够以原子方式读取消息和写入外部系统。 容错性 分布式复制Kafka使用分布式复制来保证数据的可靠性和容错性。每个主题的分区可以有多个副本这些副本分布在不同的服务器上。当一个Broker发生故障时副本中的一个会被选举为新的Leader继续处理读写请求从而实现了容错。 ISRIn-Sync ReplicasKafka使用ISR机制来保证数据的可靠性和一致性。ISR是指与Leader副本保持同步的副本集合只有ISR中的副本才被认为是“可靠”的。当Leader副本接收到消息并复制给ISR中的副本后就会返回确认给生产者。这样只要ISR中的副本都复制成功就可保证消息的可靠性。 高可用性Kafka的整体设计目标之一就是保持高可用性。每个分区都有多个副本可以在集群中的多个Broker上进行分布。当一个Broker发生故障时副本中的其他Broker可以接管该分区并成为新的Leader继续提供读写服务从而实现高可用性。 数据一致性 Leader副本顺序保证Kafka保证了在一个分区中消息的顺序性。写入请求会被发送到Leader副本并根据分区中的顺序写入。由于Leader副本负责消息的写入和复制确保了消息的有序性。 分区复制同步当Leader副本从生产者那里接收到消息后在将消息写入本地日志前会等待ISR中的所有副本也完成了相同的写入操作。这样就保证了消息在副本间的复制同步确保数据的一致性。 分区切换机制当一个副本成为新的Leader时Kafka会确保新的Leader副本具有与之前的Leader相同的日志内容。这通过Leader副本与ISR中的其他副本进行同步来实现以保证消息的一致性。 需要注意的是Kafka提供了至少一次的消息传递语义这意味着一旦消息被写入并得到确认就可以确保至少会传递给消费者一次。但由于网络分区、故障恢复等原因可能会导致消息重复传递的情况。因此在消费者端需要进行幂等处理来保证数据一致性。 Kafka中ISR ISRIn-Sync Replicas是Kafka中用于保证数据可靠性和一致性的概念。ISR是指与Leader副本保持同步的副本集合是Kafka动态维护的一组同步副本。 在Kafka中每个主题的分区可以有多个副本Replica其中有一个副本被选为Leader负责处理读写请求其他副本则作为Follower。当生产者发送消息到Kafka时消息会首先被写入Leader副本的日志中并从Leader副本复制到ISR中的其他副本。 只有ISR中的副本完成了对消息的复制Leader副本才会向生产者返回确认ack表示消息已被成功接收和持久化。这样可以保证发送到ISR中的消息在多个副本之间同步从而达到数据的可靠性和一致性。 当一个Follower副本落后于Leader副本太多超过了配置的阈值或发生了故障它将被视为不再与Leader副本同步被移出ISR。这样新的Leader副本将在ISR中的其它副本中选举产生并重新建立同步。这样做是为了保证数据的可靠性和一致性不会让落后太多的副本影响读取和写入的性能。同时当Follower副本恢复正常或者迎上了Leader副本的进度它将再次加入ISR并与Leader副本保持同步。 看到这里是不是感觉和Zookeeper的机制非常相似 通过ISR机制Kafka确保了在正常运行的情况下每个分区的消息都被可靠地复制和复制到达。ISR中的副本数量越多数据的复制同步需要的时间越长但副本的可用性和数据一致性也更高。同时通过动态调整ISR的大小Kafka能够在面对故障或负载变化时做出适应性的响应从而保证了高可靠性和一致性。 选举Leader Kafka采用的是法定人数选举quorum主要用来通过数据冗余来保证数据一致性的投票算法。在Kafka中该算法的实现就是ISR在ISR中就是可以被选举为Leader的法定人数。 在Leader宕机后从ISR列表中选取新的Leader无论哪个副本被选为新的Leader它那里都有之前的数据可以保证在切换了Leader后消费者可以继续看到HW之前已经提交的数据。 HW的截断机制新的Leader并不能保证已经完全同步了之前Leader的所有数据只能保证HW之前的数据是同步过的此时所有的Follower都要将数据截断到HW的位置再和新的Leader同步数据来保证数据一致。 当宕机的Leader恢复发现新的Leader中的数据和自己持有的数据不一致此时宕机的Leader会将自己的数据截断到宕机之前的HW位置然后同步新Leader的数据。宕机的Leader活过来也像Follower一样同步数据来保证数据的一致性。 结论 Kafka通过分布式复制、ISR机制、高可用性设计以及分区复制同步等机制确保了高容错性和数据一致性。这些特性使得Kafka成为处理高吞吐量和大规模数据的可靠分布式消息系统。 顶尖架构师栈 关注回复关键字 【C01】超10G后端学习面试资源 【IDEA】最新IDEA激活工具和码及教程 【JetBrains软件名】 最新软件激活工具和码及教程 工具码教程 本文由 mdnice 多平台发布