MST

星途 面试题库

面试题:消息队列 Kafka开发中,消息幂等性的基本概念是什么,以及Kafka如何在生产者端实现幂等性?

请阐述消息幂等性在Kafka开发场景下的定义,并详细说明Kafka生产者端实现幂等性所采用的机制和关键参数。
38.1万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

消息幂等性在Kafka开发场景下的定义

在Kafka开发场景中,消息幂等性指的是无论向Kafka发送消息的操作执行多少次,Kafka都只会将该消息成功写入一次且仅一次。即对于相同的消息,多次发送不会导致在Kafka中出现重复的、不可区分的副本。这确保了消息处理的一致性,避免因网络波动、重试等情况导致重复处理消息带来的数据不一致问题。

Kafka生产者端实现幂等性所采用的机制

  1. PID(Producer ID):每个幂等性生产者在初始化时,Kafka 服务端会为其分配一个唯一的Producer ID。这个PID与生产者实例绑定,即使生产者重启,只要PID不变,就被视为同一个生产者。
  2. Sequence Number:每个生产者针对每个分区维护一个序列号。每次生产者向特定分区发送消息时,序列号会递增。Kafka 服务端会缓存每个分区中每个生产者的最后一个成功写入消息的序列号。当接收到新消息时,服务端会验证该消息的序列号是否是预期的下一个序列号。如果是,则接受该消息并更新缓存的序列号;如果不是(如序列号重复或跳号),则拒绝该消息。

关键参数

  1. enable.idempotence:布尔类型参数,用于开启生产者的幂等性。当设置为 true 时,生产者将启用幂等性机制。默认值为 false
  2. max.in.flight.requests.per.connection:该参数限制了生产者在单个连接上可以同时发送的未确认请求的最大数量。为了保证幂等性,此参数的值必须小于等于5。如果设置的值大于5,可能会因为乱序确认等问题导致幂等性被破坏。因为Kafka服务端是按照序列号顺序来验证消息的,如果过多请求同时在途,可能会出现序列号乱序的情况。