首页 > 其他分享 >Kafka中的消费者Offset

Kafka中的消费者Offset

时间:2023-07-01 21:44:54浏览次数:30  
标签:消费者 offset Kafka 消息 提交 Offset consumer 位移

消费者位移

每个 consumer 实例都会为它消费的分区维护属于自己的位置信息来记录当前消费了多少条消息。这在 Kafka 中有一个特有的术语:位移(offset)。

相比较将offset保存在服务器端(broker),这样虽然简单,但是有如下的问题:

  1. broker变成了有状态的,增加了同步成本,影响伸缩性。

  2. 需要引入应答机制来确定消费成功。

  3. 由于需要保存众多consumer的offset,可能需要引入复杂的数据结构,对资源有一定的浪费。

在Kafka中,消费者组(Consumer Group)负责管理分发消费消息,因此将offset保存在消费者组中是比较合适的选择。其数据格式只需要是特定格式的整形数据即可。

offset 对于 consumer 非常重要,因为它是实现消息交付语义保证(message delivery semantic)的基石。

消息交付语义即最多一次、最少一次、精确一次。

位移提交

consumer客户端需要定期地向Kafka集群汇报自己消费数据的进度,这一过程被称为位移提交(offset commit)。位移提交这件事情对于 consumer 而言非常重要,它不仅表征了consumer 端的消费进度,同时也直接决定了 consumer 端的消费语义保证。

新版的Kafka由topic管理提交的位移,该topic是__consumer_offsets。默认是有50个分区,编号从0到49。

每个位移提交请求都会往__consumer_offsets 对应分区上追加写入一条消息。消息的 key 是group.id、topic和分区的元组,而 value就是位移值。

提交方式

默认情况下,consumer是自动提交位移的,自动提交间隔是5秒。这就是说若不做特定的设置,consumer程序在后台自动提交位移。通过设置auto.commit.interval.ms参数可以控制自动提交的间隔。

手动位移提交就是用户自行确定消息何时被真正处理完并可以提交位移。在一个典型的 consumer 应用场景中,用户需要对 poll 方法返回的消息集合中的消息执行业务级的处理。用户想要确保只有消息被真正处理完成后再提交位移。如果使用自动位移提交则无法保证这种时序性,因此在这种情况下必须使用手动提交位移。设置使用手动提交位移非常简单,仅仅需要在构建 KafkaConsumer 时设置enable.auto.commit=false,然后调用 commitSync 或commitAsync方法即可。

两者的区别与优劣如下:

image

参考

书籍:<<Apache Kafka实战>>

标签:消费者,offset,Kafka,消息,提交,Offset,consumer,位移
From: https://www.cnblogs.com/zhiyong-ITNote/p/17519975.html

相关文章

  • SpringBoot整合Kafka
    1、安装kafka这里我是用的是docker-compose方式安装(1)安装docker和docker-composesudoyuminstall-yyum-utilssudoyum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.reposudoyuminstalldocker-cedocker-ce-clico......
  • 18、【SparkStreaming】object not serializable (class: org.apache.kafka.clients.c
    背景:当SparkStream连接kafka,消费数据时,报错:objectnotserializable(class:org.apache.kafka.clients.consumer.ConsumerRecord,value:ConsumerRecord分析:消费者的消费记录序列化出现了问题,需要正确的进行序列化。措施:在设置sparkconf的时候,指定序列化方式就可以解......
  • 白话Kafka
    一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场景,我们知道中国移动,中国联通,中国电信的日志处理,是交给外包去做大数据分析的,假设现在它们的日志都交给了你做的系......
  • 白话Kafka
     一、Kafka基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场景,我们知道中国移动,中国联通,中国电信的日志处理,是交给外包去做大数据分析的,假设现在它们的日志都交......
  • docker swarm 集群部署Kafka3.5,彻底告别zookeeper
    介绍本次部署kafka3.5版本,彻底告别zookeeper时代,部署更加轻量,运维更加简单同时使用比较好用的kafka控制台redpandadatadockerswam集群搭建详见我的另一篇博客DockerSwarm集群搭建,不再这里赘述。docker-compose文件准备docker-compose-kafka3-cluster.ymlversi......
  • 都 2023 年了,你还在用 Kafka?快试试这个全新平台吧
    最近这个ApachePulsar消息中间件非常的火,号称云原生时代的下一代消息中件,今天,就一起来看看它到底有多牛逼?ApachePulsar简介ApachePulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化。Plusar已经在Yahoo的生产环境使用了三年多,主要......
  • macOS 系统 Kafka 快速入门
    Kafka的核心功能是高性能的消息发送与高性能的消息消费。以下是Kafka的快速入门教程。下载并解压缩Kafka二进制代码压缩文件打开Kafka官网的下载地址,可以看到不同版本的Kafka二进制代码压缩包下载链接,如下图所示:当前最新的Kafka版本是3.5.0,提供了两个二进制压缩包......
  • docker部署Zookeeper+Kafka+Storm
    docker部署Zookeeper+Storm+Kafka安装docker信任Docker的GPG公钥:curl-fsSLhttps://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-`添加软件仓库:sudoadd-apt-repository"deb[arch=amd64]https://repo.huaweicloud.com/docker-ce/linux/ubun......
  • Kafka核心总控制器Controller主要作用
    https://www.yisu.com/zixun/586556.html1简介1)更新集群元数据信息2)创建Topic3)删除Topic4)分区重分配5)preferredleader副本选举6)Topic分区扩展7)Broker加入集群8)Broker崩溃9)受控关闭10)controllerleader选举 2更新集群元数据信息Client可以从......
  • kafka producer生产消息发送到kafka的过程
    1 KafkaProducer的几个重要成员变量1)Partitioner 用来获取消息应该发往哪个分区privatefinalPartitionerpartitioner; 2)ProducerMetadata kafka元数据privatefinalProducerMetadatametadata; 3)RecordAccumulator 消息累加器,储存生产者生产......