Kafka常见面试问题

1、Kafka分区设计及主副本如何同步

Apache Kafka是一种分布式流处理平台,它使用分布式复制协议来实现高可用性和容错性。在Kafka中,每个主题(topic)都有一个或多个分区(partition),每个分区都有一组副本(replica),其中一个是主副本(leader),其余的是从副本(follower)。主副本负责处理来自消费者的所有读写请求,而从副本则扮演备份的角色,并在主副本出现故障时接管其职责。

主副本同步:

  • Kafka的每个分区都有一个指定的副本,称为“初始副本”(initial replica)。这个初始副本是由Kafka在创建分区时指定的。
  • 当消费者向Kafka发送消息时,消息首先被写入到该分区的初始副本中。
  • 初始副本收到消息后,会将其复制到其他从副本中,实现副本的同步。
  • 当所有的从副本都成功接收并存储了消息后,初始副本会向Kafka发送一个“消息已提交”(message committed)的响应给消费者。

2、Kafka如何选主

  • Kafka使用一种称为“领导者选举”(leader election)的机制来选出每个分区的领导者(主副本)。
  • 在Kafka集群中,每个节点都有一个选举代理(election proxy),它负责参与领导者选举过程。
  • 当一个分区创建时,初始副本被选为该分区的领导者。
  • 如果初始副本失效,选举代理会发现并通知其他存活的副本参与领导者选举。
  • 存活的从副本会投票选举一个新的领导者。获得超过一半票数的副本会被选为新的领导者。
  • 如果所有的从副本都失效,选举代理会重新选出新的初始副本作为领导者。

3、如果有多个broken故障,是会选哪个

Kafka的生产者使用一个负载均衡机制来分配消息到不同的broker。这个负载均衡机制可以基于各种因素,例如每个broker的可用带宽、处理能力、存储容量等。

当生产者向Kafka发送消息时,它会与Kafka的代理服务器(broker)建立连接,并由代理服务器负责将消息路由到正确的分区。代理服务器会根据负载均衡机制选择一个存活的分区,并将消息发送到该分区。如果多个broker出现故障,存活的代理服务器会选择一个存活的分区来处理消息。

因此,生产者并不直接选择发送消息到哪个broker,而是通过Kafka的负载均衡机制来自动分配消息到存活的broker上。这样可以确保消息的可靠性和容错性,并且可以有效地利用Kafka集群的资源。

4、kafka如何保证一致性

Kafka保持一致性的方式有很多,其中包括:

  1. 采用分布式副本集(replica set)来保证数据的一致性。Kafka将消息复制到多个副本中,当一个副本失效时,另一个副本可以接管它的工作,从而保证数据的完整性。
  2. Kafka至少保证消息被传递给消费者一次。生产者写入消息到Kafka时,会等待消息被持久化并复制到ISR(in-sync replica)中的副本,并返回一个确认(ack)给生产者。只有当所有ISR中的副本都完成了消息的复制后,消息才被认为是提交成功的,生产者才会收到确认。这样可以确保消息的可靠性,但也可能出现消息重复传递的情况。
  3. 消费者的消费位置(consumer offset)由消费者在消费消息时记录,并提交到Kafka,以便在重启或故障恢复后继续消费。Kafka会将消息的偏移量持久化,保证在故障发生时可以对未消费的消息进行重播。

你可能感兴趣的:(消息队列,kafka,面试,分布式)