什么是幂等性:
无论发送多少次相同的请求,最终的结果都是一致。
问: 那他又是如何保证消息不会被重复发送的? 答: Kafka 通过 Producer Id(生产者标识符)和 Sequence Number(序列号)来保证消息不会被重复发送。以下是 Kafka 如何实现这一点的工作原理: Producer Id(PID): 每个 Kafka 生产者在初始化时都会获得一个唯一的 Producer Id。Producer Id 是一个持久性标识符,通常与生产者的客户端实例相关联。Kafka 会跟踪每个生产者的 Producer Id。 Sequence Number(序列号): 每个请求(消息)都包含一个单调递增的序列号。序列号从1开始,每次递增1。序列号用于标识请求的顺序。 Producer Id 和 Sequence Number 的存储: Kafka 将 Producer Id 和 Sequence Number 存储在每个分区的分区日志中。这个存储允许 Kafka 跟踪每个分区的最新序列号。 消息发送过程: 当生产者发送一条消息到 Kafka 时,消息会携带生产者的 Producer Id 和序列号。Kafka 会根据 Producer Id 和序列号来验证消息的幂等性和顺序性。 Kafka 服务器的处理: Kafka 服务器会在接收到消息后,首先检查 Producer Id 和序列号是否已经在该分区的分区日志中出现过。如果这个 Producer Id 和序列号已经存在,说明消息已经被处理,Kafka 将丢弃重复的消息。如果 Producer Id 和序列号是新的,Kafka 会接受消息并更新分区的最新序列号。 重试机制: 如果生产者因某种原因未收到来自 Kafka 的确认(ACK)并怀疑消息未被成功发送,它会重新发送相同的消息。由于消息中包含了 Producer Id 和序列号,Kafka 可以识别重复的消息并再次将其过滤掉。 通过这个机制,Kafka 确保了消息不会被重复发送。每条消息都有唯一的 Producer Id 和序列号,这使得 Kafka 能够在接收消息时检查重复,并且保持消息的幂等性和顺序性。这对于确保数据的可靠性和一致性非常重要,尤其在分布式系统中。
标签:Producer,Kafka,发送,消息,序列号,kafka,Id From: https://www.cnblogs.com/jiangzishun/p/17679666.html