【kafka实践】09|消费者位移

位移主题

前面的章节中已经多次提到消费位移了,本节内容就要深入了解下消费位移topic:__consumer_offsets(前面是两个下划线),我们也可以称其为“位移主题”

上一节有提到老版本 Consumer 的位移管理是通过ZooKeeper实现的。当 Consumer 重启时,从 ZooKeeper 中读取位移数据,继续上一次的消费。这使得 Kafka Broker 不需要保存位移数据,减少了 Broker 端需要持有的状态空间,有利于实现高伸缩性。

但ZooKeeper并不适用于这种高频写操作,因此Kafka在更新了几个版本之后,最终抛弃了位移管理机制,同时引入了__consumer_offsets这个内部主题。

新的位移管理机制也很简单,就是将 Consumer 的位移数据作为一条条普通的 Kafka 消息,提交到 __consumer_offsets 中。__consumer_offsets 的主要作用是保存 Kafka 消费者的位移信息。它要求这个提交过程不仅要实现高持久性,还要支持高频的写操作。Kafka本身的设计就满足这两个条件,因此使用 __consumer_offsets 主题来保存位移就水到渠成了。

位移主题并不神秘,你可以手动地创建它、修改它,甚至删除它。不过大部分情况下,不需要管理它,既然是内部主体,把它交给 Kafka就行了。

消息格式

虽然我们可以手动修改位移主题,但它的消息格式却是Kafka自己定义的,不能随便修改,也就是说不能随意地向这个主题写消息,一旦你写入的消息不满足 Kafka 规定的格式,那么 Kafka 内部无法成功解析,就会造成 Broker 的崩溃。

关于__consumer_offsets的消息格式,可以简单地理解为是一个 KV 对。Key 和 Value 分别表示消息的键值和消息体,既然是存储位移那value一定和就是位移信息,那key呢,大家可以先思考一下。位移主题的 Key 中应该保存 3 部分内容:groupId + topic信息 + partition信息,这样就能区分具体consumer的消费情况了!

当然这只是大体的消息格式,实际上的设计比这个复杂的多,我们有个大体的概念即可,又深入了解的朋友欢迎评论区交流。

创建时机

通常当 Kafka 集群中的第一个 Consumer 程序启动时,会自动创建位移主题。位移主题就是普通的 Kafka 主题,如果是Kafka自动创建的,分区数是怎么设置的呢?这取决于Broker端参数 offsets.topic.num.partitions的取值,默认值是 50,同理副本数通过offsets.topic.replication.factor配置,它的默认值是 3。所以 Kafka 会自动创建一个 50 分区、副本为 3的位移主题。

删除过期位移

简单提一下过期位移的删除,Kafka 使用 Compact 策略来删除位移主题中的过期消息,避免该主题数据堆积过多。同时Kafka 提供了专门的后台线程(Log Cleaner)定期地巡检待 Compact 的主题,看是否存在满足条件的可删除数据。如果生产环境中出现过位移主题用过多磁盘空间的问题,可以检查下是否是该现场挂掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五、关闭三台虚拟机的防火墙和Selinux

目录 1、关闭每台虚拟机的防火墙 2、关闭每台虚拟机的Selinux 2.1 什么是SELinux

MFC中updatedata(False)和Updatedata(TRUE)区别

MFC的UpdateData(FALSE)和UpdateData(TRUE)都是用来更新视图界面和数据模型之间的数据同步的。 UpdateData(TRUE)表示将视图控件的值更新到数据模型中,即将界面上的数据更新到与之对应的变量中。同时,UpdateData(TRUE)还可以强制执行控件验证。如果控件…

使用SpringBoot和ZXing实现二维码生成与解析

一、ZXing简介 ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库。它包含了用于解析多种格式的1D/2D条形码的工具类,目标是能够对QR编码,Data Matrix, UPC的1D条形码进行解码。在二维码编制上,ZXing巧妙地利用构成计…

系列十四、SpringBoot的jar包可以直接运行原理分析

一、普通jar包运行 vs SpringBoot jar包运行 1.1、普通jar包运行 general-test-1.0-SNAPSHOT.jar是位于D盘的一个普通的jar包,是idea中一个普通的maven项目通过package打包生成,为了方便测试我把它拷贝到D盘了。 java -jar general-test-1.0-SNAPSHOT.j…

MySQL经验总结

RPM安装 安装官网YUM源 sudo yum install mysql80-community-release-el7-11.noarch官网安装 sudo yum install mysql80-community-release-el7-11.noarch.rpm查看默认密码 sudo grep password /var/log/mysqld.log 修改密码 sudo mysqladmin -uroot -pxxxxxx password XXxxx登…

springboot虚拟请求——测试

springboot虚拟请求 表现层测试 web环境模拟测试 虚拟请求状态匹配——执行状态的匹配 Testvoid testStatus(Autowired MockMvc mvc) throws Exception { // //http://localhost:8080/books// 创建一个虚拟请求,当前访问的是booksMockHttpServletRequestBui…

不会代码(零基础)学语音开发(学习工具)

学习,要选择适合自己的,好的学习工具至关重要。就像读书,要读好书一样。 自己不会选,可以参考前辈,找chatgpt等来帮忙。充分利用好周边的资源。 秉承着GPT和前辈们的经验之谈,开始选择语音开发产品&#…

localStorage 和sessionStorage

localStorage 和 sessionStorage 是浏览器提供的两种客户端存储数据的方式: 生命周期: localStorage: 存储在 localStorage 中的数据在浏览器关闭后仍然保留,直到被显式删除或浏览器清除缓存。sessionStorage: 存储在 …

操作系统-输入输出管理

I/O设备的基本概念和分类 I/O就是输入/输出 I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。 I/O设备按使用特性分类 人机交互类外部设备存储设备网络通信设备 I/O设备按传输速率分类 低速设备中…

uniapp-距离distance数字太长,截取保留前3为数字

1.需求 将接口返回的距离的字段&#xff0c;保留三位数显示。 2.实现效果 3.代码&#xff1a; 1.这是接口返回的数据&#xff1a; 2.调取接口&#xff0c;赋值前先处理每条数据的distance <view class"left">距你{{item.distance}}km</view>listFun() …

MySql之锁表、锁行解决方案

查询正在使用的表&#xff0c;没有跑业务&#xff0c;一般情况下是锁表了 show open tables where in_use > 0 ;查看进程&#xff0c;可以看到Command类型&#xff08;Sleep为阻塞线程&#xff09; show processlist;kill事务&#xff0c;kill 进程Id kill 8193583;其他 …

聚焦数据库Serverless创新,就在2023亚马逊云科技re:Invent

11月28日&#xff0c;亚马逊云科技在其最新的re:Invent 2023大会上宣布了三项重要的serverless创新&#xff0c;这些创新将极大地简化客户在任何规模上分析和管理数据的能力。以下是这些发布的主要要点总结和分析。 Amazon Aurora Limitless Database的新功能&#xff1a; 功能…

播放器开发(七):音视频同步实现

目录 学习课题&#xff1a;逐步构建开发播放器【QT5 FFmpeg6 SDL2】 原理 简单分析&#xff1a; 下图简单描述了在一个播放过程中&#xff0c;假设我们先播放音频&#xff0c;对比一个公共时间轴&#xff0c;视频就会始终比音频慢0.003s。 我们在日常中用一些播放器播放视频…

docker-compose脚本编写及常用命令

安装 linux DOCKER_CONFIG/usr/local/lib/docker/cli-plugins sudo mkdir -p $DOCKER_CONFIG/cli-plugins sudo curl -SL https://521github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose sudo c…

常用的一些日期的获取及判断

自定义的Date对象的原型方法&#xff0c;通过为Date对象添加一个名为format的方法&#xff0c;可以将日期格式化为指定的字符串格式 function handleInitDate () {Date.prototype.format function (format) {var o {"M": this.getMonth() 1, //month"d"…

附录A 指令集基本原理

1. 引言 本书主要关注指令集体系结构4个主题&#xff1a; 1. 提出对指令集进行分类的方法&#xff0c;并对各种方法的优缺点进行定性评估&#xff1b; 2. 提出并分析一些在很大程度上独立于特定指令集的指令集评估数据。 3. 讨论语言与编译器议题以及…

shell编程系列(9)-使用cut选择列

文章目录 前言使用cut选择列选择特定的列 结语 前言 前面的文章介绍了sed命令&#xff0c;sed可以帮我们处理文本列&#xff0c;这边文章介绍cut命令&#xff0c;cut命令可以帮我们选择想要的列&#xff0c;在文本处理时候结合sed命令&#xff0c;就可以精准定位了。 cut命令是…

利用 NRF24L01 无线收发模块实现传感器数据的无线传输

NRF24L01 是一款常用的无线收发模块&#xff0c;适用于远程控制和数据传输应用。本文将介绍如何利用 NRF24L01 模块实现传感器数据的无线传输&#xff0c;包括硬件的连接和配置&#xff0c;以及相应的代码示例。 一、引言 NRF24L01 是一款基于 2.4GHz 射频通信的低功耗无线收发…

如何使用windows Terminal终端连接远程Linux服务器

近接触到了zsh这个shell&#xff0c;所以在ubuntu系统上反复折腾&#xff0c;终于在ubuntu-desktop系统上使用oh-my-zsh和powerlevel10k配置好了一个比较好看的终端&#xff08;个人认为挺好看&#xff0c;勿喷&#xff09;。 但是在从windwos的Mobaxterm登录ubuntu查看时&…

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv5开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的&#xff0c;随着现代技术科技手段的不断发展&#xff0c;基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段&#xff0c;本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…