首页 > 其他分享 >kafka的幂等性

kafka的幂等性

时间:2023-09-05 15:15:58浏览次数:24  
标签:Producer Kafka 发送 消息 序列号 kafka Id

什么是幂等性:

无论发送多少次相同的请求,最终的结果都是一致。

 

问:
那他又是如何保证消息不会被重复发送的?

答:
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

相关文章

  • kafka集群安装(CentOS7 + kafka 2.7.1)
    Linux系统-部署-运维系列导航 kafka介绍Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源......
  • 【Kafka系列】(一)Kafka入门
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top首发博客地址系列文章地址Kafka是什么?一句话概括:ApacheKafka是一款开源的消息引擎系统什么是消息引擎系统?消息引擎系统(MessageBrokerSystem)是一种中间件软件或服务,用......
  • Go语言实现Kafka消费者的示例代码
    Kafka是一种分布式流处理平台,由Facebook于2011年推出,现在已经成为Apache项目的一部分。Kafka提供了高可用性、可扩展性和低延迟的消息传递服务,适用于处理实时和离线数据。Kafka的主要功能包括生产者-消费者通信、批处理和实时数据流处理。Kafka基于发布/订阅模型,允许消息发布者将数......
  • kafka原理与应用
    架构图BrokerKafka集群包含多个服务器,服务器节点称为BrokerBroker存储Topic数据如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个br......
  • 我的 Kafka 旅程 - 基于账号密码的 SASL+PLAIN 认证授权 · 配置 · 创建账号 · 用户
    本文基于Kafka3.0+的KRaft模式来阐述默认的Kafka不受认证约束,可不用账号就可以连接到服务,也就是默认的PLAIN方式,不需要认证;配置了SASL认证之后,连接Kafka只能用凭证连接登录。SASL支持的认证方式有多种:GSSAPI,PLAIN,SCRAM-SHA-256,SCRAM-SHA-512,OAUTHBEARERGSSAPI......
  • 使用Nginx做页面采集, Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM
    使用Nginx做页面采集,Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM使用Nginx做页面采集,Kafka收集到对应Topic0.架构简介模拟线上的实时流,比如用户的操作日志,采集到数据后,进行处理,暂时只考虑数据的采集,使用Html+Jquery+Nginx+Ngx_kafka_module+Kafka来实现,其中Ngx​kafka​m......
  • 使用Nginx做页面采集, Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM
    使用Nginx做页面采集,Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM使用Nginx做页面采集,Kafka收集到对应Topic0.架构简介模拟线上的实时流,比如用户的操作日志,采集到数据后,进行处理,暂时只考虑数据的采集,使用Html+Jquery+Nginx+Ngx_kafka_module+Kafka来实现,其中Ngx​kafka​m......
  • 使用Nginx做页面采集, Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM
    使用Nginx做页面采集,Kafka收集到对应Topic_6XwWe5qWHGM2PojVPUSejM使用Nginx做页面采集,Kafka收集到对应Topic0.架构简介模拟线上的实时流,比如用户的操作日志,采集到数据后,进行处理,暂时只考虑数据的采集,使用Html+Jquery+Nginx+Ngx_kafka_module+Kafka来实现,其中Ngx​kafka​m......
  • kafka在工作中的使用
    @KafkaListener(topics={KafkaInitialConfig.TOPIC_RECHARGE_YTK},groupId=KafkaInitialConfig.GROUP_ID_STORE_BFF,containerFactory="kafkaListenerContainerFactory",autoStartup="${kafka.listener.autoStartup}")publicvoidre......
  • Kafka - 生产者 - 压缩算法
    总结1.Producer端压缩、Broker端保持、Consumer端解压缩。2.开启压缩的最佳实践:Producer端完成的压缩,那么启用压缩的一个条件就是Producer程序运行机器上的CPU资源要很充足。如果你的环境中带宽资源有限,那么我也建议你开启压缩。如果你的机器CPU资源有很多富余,强烈......