面试题答案
一键面试生产者角度
- 机制:Kafka 生产者使用
acks
配置参数来控制数据确认机制。acks=0
时,生产者发送消息后不等待任何确认;acks=1
时,等待 leader 副本确认;acks=all
(或-1
)时,等待所有同步副本确认。 - 原理:通过不同的确认级别,平衡消息发送的性能与可靠性。例如
acks=all
能保证最高的数据一致性,因为只有所有同步副本都收到消息,生产者才会认为消息发送成功。 - 局限性:
acks=all
时,如果网络分区导致部分副本不可用,可能会增加消息发送延迟甚至发送失败,因为需要等待所有同步副本确认,降低了系统的整体吞吐量。
消费者角度
- 机制:消费者使用位移(offset)来记录已消费的消息位置。在发生网络分区后,消费者重新连接到 Kafka 集群时,会根据配置的
auto.offset.reset
参数(earliest
、latest
等)来决定从何处继续消费。 - 原理:位移机制确保消费者能准确记录消费进度,即使发生网络分区等故障,也能依据位移信息继续消费。
auto.offset.reset
参数则定义了不同场景下消费者从何处开始消费,例如earliest
表示从分区最早的消息开始消费,latest
表示从分区末尾开始消费。 - 局限性:如果消费者在网络分区期间,未及时提交位移,可能导致重复消费(
auto.offset.reset=earliest
)或消息丢失(auto.offset.reset=latest
)。另外,若位移存储出现故障(如 Kafka 内部的位移主题异常),也会影响消费者的正常消费。
Kafka 集群自身角度
- 机制:Kafka 使用多副本机制,每个分区有一个 leader 副本和多个 follower 副本。当 leader 所在节点出现网络分区故障时,集群会进行 leader 选举,从 follower 副本中选出新的 leader。同时,Kafka 有 ISR(In-Sync Replicas)机制,只有在 ISR 中的副本才被认为是同步的,消息的 commit 取决于 ISR 中的副本情况。
- 原理:多副本机制保证了数据的冗余和可用性,leader 选举机制确保在 leader 故障时能快速恢复服务。ISR 机制通过只关注同步副本,避免了因慢速副本导致的性能问题,同时保证数据一致性,只有 ISR 中的副本都确认收到消息,消息才被认为已提交。
- 局限性:如果网络分区导致 ISR 中的所有副本都不可用,Kafka 可能会选择不在 ISR 中的副本作为新 leader,这可能导致数据不一致。另外,频繁的 leader 选举会增加系统开销,影响集群性能。在网络分区期间,新 leader 的选举可能会因为网络延迟等问题而出现延迟,导致短暂的服务不可用。