首页 > 其他分享 >7.kafka中的消费语义、幂等性

7.kafka中的消费语义、幂等性

时间:2024-07-18 11:00:10浏览次数:15  
标签:消费 语义 partition PID kafka written SN Max 消息

目录

概述

  kafka中的消费语义

  • at most once :可能会丢数据
  • at least once :all +分区副本>=2 +min >=2 不丢失数据,但是数据可能重复
  • exactly once :精准一次, 不丢不重

kafka的事务与幂等性官方速递

Apache Kafka Idempotent Producer - Avoiding message duplication

kafka中幂等性

  当生产者向 topic 发送消息时,可能会出现问题,如短连接失败,当这种情况发生时,任何等待确认的消息都可以重新发或丢弃,但消息可能已经成功写入 topic ,也可能没有,这是没法知道的,如果是重新发送,可以会导致消息重复。不重新发送,消息基本上会丢失。

在这里插入图片描述

支持

  java 是从 0.11 版本正式支持的。

配置

# 代码中配置
enable.idempotence:true

原理

  每个生产者都会被分配一个生产者Id(PID),每次向 topic 发送消息时,都会包含自己的 PID ,此外,每条消息都会得到一个单调递增的序列号。生产者向 topic 发送消息时,都会为其维护一个单独的序例,在 broker 上,会在每个分区的基础上跟踪已成功写入的最大 PID 序列化号组合,当接收到较低的序列号时,它会被丢弃。

  禁用幂等性后,可能会出现生产者异步向 topic 分区发送消息的情况,比如消息M1M10。发送消息 7 后,连接失败。它已收到消息13的确认。因此,消息4567被重新发送,然后是消息810。但代理实际上能够将除消息7之外的所有消息写入分区,因此现在存储在分区中的消息是:M1, M2, M3, M4, M5, M6, M4, M5, M6, M7, M8, M9, M10

  但启用幂等性后,每条消息都有一个PID和序列号:

  • M1 (PID: 1, SN: 1) - written to partition. For PID 1, Max SN=1
  • M2 (PID: 1, SN: 2) - written to partition. For PID 1, Max SN=2
  • M3 (PID: 1, SN: 3) - written to partition. For PID 1, Max SN=3
  • M4 (PID: 1, SN: 4) - written to partition. For PID 1, Max SN=4
  • M5 (PID: 1, SN: 5) - written to partition. For PID 1, Max SN=5
  • M6 (PID: 1, SN: 6) - written to partition. For PID 1, Max SN=6
  • M4 (PID: 1, SN: 4) - rejected, SN <= Max SN
  • M5 (PID: 1, SN: 5) - rejected, SN <= Max SN
  • M6 (PID: 1, SN: 6) - rejected, SN <= Max SN
  • M7 (PID: 1, SN: 7) - written to partition. For PID 1, Max SN=7
  • M8 (PID: 1, SN: 8) - written to partition. For PID 1, Max SN=8
  • M9 (PID: 1, SN: 9) - written to partition. For PID 1, Max SN=9
  • M10 (PID: 1, SN: 10) - written to partition. For PID 1, Max SN=10

标签:消费,语义,partition,PID,kafka,written,SN,Max,消息
From: https://blog.csdn.net/2301_79691134/article/details/140439867

相关文章

  • kafka一个消费者组一直停留在rebalance状态导致无法消费问题
    问题描述线上突然出现,某一个消费者组下的部分分区无法消费。kafkabroker日志如下:[2024-07-1617:44:58,548]INFO[GroupCoordinator0]:DynamicMemberwithunknownmemberidjoinsgrouptransfer-groupinStablestate.Createdanewmemberidconsumer-22-0619b903-......
  • 以电商、消费行业为例,详解火山引擎数智平台如何应用湖仓一体架构
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群。 随着互联网的不断发展,企业数据的使用场景也发生巨大变化,湖仓一体逐渐成为一种被广泛应用的底层数据架构。 详细来说,湖仓一体架构是一种将数据湖和数据仓库的优势结合起来的新型数据架......
  • Java多线程:wait/notify机制-实现生产者消费者(4)
    ......
  • 69、Flink 的 DataStream Connector 之 Kafka 连接器详解
    1.概述Flink提供了Kafka连接器使用精确一次(Exactly-once)的语义在Kafkatopic中读取和写入数据。目前还没有Flink1.19可用的连接器。2.KafkaSourcea)使用方法KafkaSource提供了构建类来创建KafkaSource的实例。以下代码片段展示了如何构建KafkaSource来消......
  • 生产者消费者模型
    生产者消费者模型 1.生产者消费者模型优点未理解!  2.标准库提供的阻塞队列查看代码 importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.BlockingQueue;classTest{publicstaticvoidmain(String[]args)throwsInterru......
  • 三分钟了解什么是消费返利
    消费返利作为一种创新的营销手段,不仅增强了消费者的购物体验,还为电商平台及商家带来了更多的用户粘性和复购率。什么是消费返利,其背后的运作机制又是如何的呢?返利的定义:返利即是一种消费激励措施,当消费者在指定的电商平台或通过合作的第三方返利平台完成购物后,根据消费金额......
  • Docker安装kafka
    Docker安装kafka安装之前,先创建一个网络,模式为桥接的方式dockernetworkcreatekafkaBridge--driverbridge只要能保证,zk和kafka能后相互访问就好了,方式随意。注意:使用同网络好于不同网络。虽然理论上Kafka和ZooKeeper可以跨广域网部署,但高延迟的网络连接可能会影响......
  • 使用RocketMQ 实现基于标签过滤的消息队列生产和消费
    在分布式系统中,消息队列(MessageQueue,MQ)是一种常见的通信方式,它能够解耦系统组件,提供异步通信,提升系统的伸缩性和可靠性。ApacheRocketMQ是一款开源的分布式消息中间件,具有高性能、低延迟、高可靠性和高可用性等特点。本文将介绍如何使用ApacheRocketMQ实现基于标签过......
  • zookeeper+kafka消息队列群集部署
    目录消息队列1:什么是消息队列2:消息队列的特征3:为什么需要消息队列Kafka基础与入门1:kafka基本概念2:kafka角色术语3:kafka拓扑架构4:Topic和partition5:Producer生产机制6:Consumer消费机制zookeeper概念介绍1:zookeeper应用举例2:zookeeper的工作原理是什么?3:zookeeper......
  • 关于Kafka Topic分区和Replication分配的策略
    文章目录1.Topic多分区2.理想的策略3.实际的策略4.如何自定义策略1.Topic多分区如图,是一个多分区Topic在Kafka集群中可能得分配情况。P0-RL代表分区0,Leader副本。这个Topic是3分区2副本的配置。分区尽量均匀分在不同的Broker上,分区的Follower副本尽量不和Lea......