当前位置: 首页 > news >正文

Kafka 位移主题

Kafka 位移主题

  • 位移格式
  • 创建位移
  • 提交位移
  • 删除位移

Kafka 的内部主题 (Internal Topic) : __consumer_offsets (位移主题,Offsets Topic)

老 Consumer 会将位移消息提交到 ZK 中保存

  • 当 Consumer 重启后,能自动从 ZK 中读取位移数据,继续消费上次位置
  • Broker 不用保存位移数据,减少 Broker 开销
  • 但 ZK 不适合大量写操作

新 Consumer 推出了位移管理机制 :

  • 将 Consumer 的位移数据提交到 __consumer_offsets
  • __consumer_offsets 作用 : 保存 Kafka 消费者的位移信息

位移格式

__consumer_offsets 的消息格式是 Kafka 自定义

  • 不要随意向该主题写消息,可能会造成 Broker 挂
  • Consumer API 会自动向位移主题写消息

位移主题的 3 种消息格式 :

  • Key/Value 分别为消息键/消息体
  • 保存 Consumer Group 信息的消息 : 用来注册 Consumer Group
  • 删除 Group 过期位移 , 删除 Group 的消息

Key/Value 结构 :

  • Key 的 3 部分:<Group ID, 主题名, 分区号>
  • Value 有:时间戳 , 用户自定义的数据 , 位移值

删除 Group 消息 :

  • tombstone 消息 (墓碑消息 , delete mark) :特点 : 空消息体 , 消息体是 null
  • 当某个 Group 下的所有 Consumer 都停止,且位移数据都已被删除 (彻底删除该 Group) :Kafka 会向位移主题的对应分区写入 tombstone 消息

创建位移

位移主题自动创建 :

  • 当 Kafka 的第一个 Consumer 启动时,Kafka 会自动创建位移主题
  • 位移主题的分区数 : offsets.topic.num.partitions,默认值 : 50
  • 副本数 : offsets.topic.replication.factor , 默认值 : 3

Kafka 日志路径下会有很多 __consumer_offsets-xxx 的目录

  • Kafka 创建的位移主题

手动创建位移主题 :不建议 (bug 代码有硬编码 50 )

提交位移

Consumer 提交位移方式:

  • 自动提交位移
  • 手动提交位移

自动提交位移 :

  • Consumer 在后台定期提交位移
  • 自动提交 :enable.auto.commit=true
  • 提交间隔 : auto.commit.interval.ms
  • 优点 : 不用管位移提交,就能保证消息消费不会丢失
  • 缺点 : 没法把控 Consumer 端的位移管理 ; 只要 Consumer 启动 , 就会不断向位移主题写入消息

与 Kafka 集成的框架都禁用手动提交位移

  • enable.auto.commit = false
  • Consumer 用 consumer.commitSync ,向位移主题写入相应的消息

自动提交位移的问题例子 :

  • Consumer 消费到某个主题的最新一条消息 (位移 : 100)
  • 之后该主题没有新消息产生,所以 Consumer 无消息可消费,则位移一直是 100
  • 而自动提交位移,向位移主题中不断写位移 =100

删除位移

Compaction : Kafka 删除位移主题的过期消息

Kafka 用后台线程 (Log Cleaner) 定期检查 Compact 的主题,判断是否有可删除数据

  • 当位移主题占用过多磁盘时,建议检查 Log Cleaner 线程的状态

Compact 过期策略 :

  • 同个 Key 的两条消息 M1 和 M2,当 M1 发送时间早于 M2,那 M1 为过期消息

Compact 过程 :

  • 扫描日志的所有消息,剔除那些过期的消息,把剩下的消息整理在一起
  • 位移为 0、2 和 3 的消息的 Key 都是 K1,Compact 后,只会保存位移为 3 的消息

在这里插入图片描述

相关文章:

Kafka 位移主题

Kafka 位移主题位移格式创建位移提交位移删除位移Kafka 的内部主题 (Internal Topic) : __consumer_offsets (位移主题&#xff0c;Offsets Topic) 老 Consumer 会将位移消息提交到 ZK 中保存 当 Consumer 重启后&#xff0c;能自动从 ZK 中读取位移数据&#xff0c;继续消费…...

详细讲解零拷贝机制的进化过程

一、传统拷贝方式&#xff08;一&#xff09;操作系统经过4次拷贝CPU 负责将数据从磁盘搬运到内核空间的 Page Cache 中&#xff1b;CPU 负责将数据从内核空间的 Page Cache 搬运到用户空间的缓冲区&#xff1b;CPU 负责将数据从用户空间的缓冲区搬运到内核空间的 Socket 缓冲区…...

2023年场外个股期权研究报告

第一章 概况 场外个股期权&#xff08;Over-the-Counter Equity Option&#xff09;&#xff0c;是指由交易双方根据自己的需求和意愿&#xff0c;通过协商确定行权价格、行权日期等条款的股票期权。与交易所交易的标准化期权不同&#xff0c;场外个股期权的合同内容可以根据交…...

k8s pod,ns,pvc 强制删除

一、强制删除pod$ kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period0解决方法&#xff1a;加参数 --force --grace-period0&#xff0c;grace-period表示过渡存活期&#xff0c;默认30s&#xff0c;在删除POD之前允许POD慢慢终止其上的…...

力扣第99场双周赛题目记录(复盘)

第一题 2578.最小和分割 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来&#xff0c;得到 num 各数位的一个排列。 换句话说&#xff0c;num1 和 num2 中所有数字出现的次数之和等于 num 中所…...

spring事务失效原因

一.抛出事务不支持的异常 原理&#xff1a; Spring事务默认支持RuntimeException异常&#xff0c;抛出的异常为RuntimeException异常及其子类异常事务均可生效&#xff0c;而我们日常常见的异常基本都继承自RuntimeException&#xff0c;所以无需指定异常类型事务也能生效。 但…...

pikachu靶场CSRF之TOKEN绕过

简介 Pikachu靶场中的CSRF漏洞环节里面有一关CSRF TOKEN&#xff0c;这个关卡和其余关卡稍微有点不一样&#xff0c;因为表单里面存在一个刷新就会变化的token&#xff0c;那么这个token是否能绕过呢&#xff1f;接下来我们来仔细分析分析 实战过程 简单尝试 先利用任意一个…...

Windows中配置docker没有hyper-v功能解决方案

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录前言解决步骤&#xff1a;1.新建文档2. 另存为3. 功能…...

电子台账:模板制作之五——二级过滤与多条件组合

1 前言工作中&#xff0c;经常会遇到很复杂的数据&#xff0c;比如内销产品和出口产品、正常产品和报废产品都混在一块儿。电子台账中&#xff0c;需要把这些数据都区分开&#xff0c;分别汇总。这种情况&#xff0c;可以用台账软件的二级过滤功能来处理&#xff0c;实际上就是…...

Kaldi Data preparation

链接&#xff1a;GitHub - nessessence/Kaldi_ASR_Tutorial: speech recognition using Kaldi framework Lets start with formatting data. We will randomly split wave files into test and train dataset(set the ratio as you want). Create a directory data and,then t…...

libevent 学习笔记

一、参考 libevent Libevent深入浅出 - 《Libevent 深入浅出》 - 书栈网 BookStack libevent 之 event config的相关函数介绍_event_config_new_yldfree的博客-CSDN博客 Libevent之evbuffer详解_有时需要偏执狂的博客-CSDN博客 二、libevent概述 libevent 就是将网络、I…...

jupyter的使用

1.安装 安装过程看这篇记录。 安装 2.如何启动 环境搭建好后&#xff0c;本机输⼊jupyter notebook命令&#xff0c;会⾃动弹出浏览器窗⼝打开 Jupyter Notebook # 进⼊虚拟环境 workon ai(这个是虚拟环境的名称) # 输⼊命令 jupyter notebook本地notebook的默认URL为&…...

中级数据开发工程师养成计

目标 工作之后就很少时间用来沉淀知识了&#xff0c;难得用空闲时间沉淀一下自己。 成为一名中级数据开发工程师。偏向于数据仓库&#xff0c;数据治理方向。 整体排期 1 hive 2 hadoop 3 flink 4 spark 5 闲杂工具 kafka maxwell cancal 6 数据建模&#xff08;偏向于kimbo…...

fastjson 返回 $ref 数据

文章目录问题描述&#xff1a;1、重复引用&#xff1a;2、循环引用&#xff1a;原因分析&#xff1a;1、重复引用&#xff1a;2、循环引用&#xff1a;反序列化&#xff1a;1、开启引用检测&#xff1a;2、关闭引用检测&#xff1a;小结&#xff1a;问题描述&#xff1a; 问题…...

Zookeeper特性和节点数据类型详解

什么是ZK&#xff1f; zk,分布式应用协调框架&#xff0c;Apache Hadoop的一个子项目&#xff0c;解决分布式应用中遇到的数据管理问题。 可以理解为存储少量数据基于内存的数据库。两大核心&#xff1a;文件系统存储结构 和 监听通知机制。 文件系统存储结构 文件目录以 / …...

Java代码是如何被CPU狂飙起来的?

无论是刚刚入门Java的新手还是已经工作了的老司机&#xff0c;恐怕都不容易把Java代码如何一步步被CPU执行起来这个问题完全讲清楚。但是对于一个Java程序员来说写了那么久的代码&#xff0c;我们总要搞清楚自己写的Java代码到底是怎么运行起来的。另外在求职面试的时候这个问题…...

Dynamics365安装失败解决及注册编写

一、修改错误昨天登录报错今天开始返回我之前设置的断点开始重新配置&#xff0c;Reporing Services配置完成后发现dynamics365还是下载失败之后下载了一上午dynamics365就一直卡在最后的界面进度条不动索性我直接把所有环境都卸载了 连同虚拟机卸载重装终于在下午的时候dynami…...

Kafka 集群参数

Kafka 集群参数Broker 端参数存储配置ZooKeeper 配置Broker 连接配置Topic 管理配置数据留存配置Topic 级别参数JVM 参数操作系统参数重要的配置 : Broker 端参数&#xff0c;主题级别的参数、JVM 端参数、操作系统级别的参数 Broker 端参数 存储配置 log.dirs&#xff1a;指…...

等保2.0与1.0 测评要求的变化

No.1标准内容增加了 标准内容上最大的变化就是将安全要求分为了安全通用要求和扩展要求。首先&#xff0c;安全通用要求部分已对1.0标准的内容进行了优化&#xff0c;删除或修订了过时的要求项&#xff0c;新增了对新型网络攻击行为防护和个人信息保护等方面的新要求。其次&am…...

nodejs学习巩固笔记-nodejs基础,Node.js 高级编程(核心模块、模块加载机制)

目录Nodejs 基础大前端开发过程中的必备技能nodejs 的架构为什么是 NodejsNodejs 异步 IONodejs 事件驱动架构全局对象全局变量之 process核心模块核心模块 - path全局变量之 Buffer创建 bufferBuffer 实例方法Buffer 静态方法Buffer-split 实现核心模块之FS模块文件操作 APImd…...

终极VSCode Blade格式化器高级技巧:自定义HTML属性排序与组件前缀配置指南

终极VSCode Blade格式化器高级技巧&#xff1a;自定义HTML属性排序与组件前缀配置指南 【免费下载链接】vscode-blade-formatter An opinionated Blade file formatter for VSCode 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-blade-formatter vscode-blade-fo…...

深入解析acts-as-taggable-on:Rails标签系统的终极实现指南

深入解析acts-as-taggable-on&#xff1a;Rails标签系统的终极实现指南 【免费下载链接】acts-as-taggable-on A tagging plugin for Rails applications that allows for custom tagging along dynamic contexts. 项目地址: https://gitcode.com/gh_mirrors/ac/acts-as-tagg…...

从零到一:在Windows系统上部署JDK11与Neo4j 4.3.5开发环境

1. 环境准备&#xff1a;JDK11与Neo4j 4.3.5的版本选择 刚开始接触Java和图数据库时&#xff0c;我踩过不少版本不兼容的坑。比如有一次装了最新版JDK17&#xff0c;结果Neo4j死活启动不了&#xff0c;折腾半天才发现是版本冲突。所以现在每次搭建环境&#xff0c;我都会先确认…...

OpenClaw技能扩展实战:基于nanobot开发自定义自动化模块

OpenClaw技能扩展实战&#xff1a;基于nanobot开发自定义自动化模块 1. 为什么需要自定义技能&#xff1f; 去年夏天&#xff0c;我经常需要在出门前手动查询天气情况&#xff0c;这个看似简单的动作却让我感到烦躁——打开浏览器、输入网址、输入城市、查看结果。作为一个技…...

80+款Android UI模板深度解析:从零到一构建专业级应用界面的实战指南

80款Android UI模板深度解析&#xff1a;从零到一构建专业级应用界面的实战指南 【免费下载链接】Android-ui-templates Download free android app templates free and paid. 项目地址: https://gitcode.com/gh_mirrors/an/Android-ui-templates 在当今移动应用开发领域…...

别再只盯着日志了!利用RDP的.bmc缓存文件做Windows终端服务器取证(附Python工具链)

挖掘RDP客户端缓存&#xff1a;被忽视的Windows终端会话可视化取证新维度 当服务器日志被刻意删除或篡改时&#xff0c;安全人员往往陷入取证僵局。但很少有人意识到&#xff0c;每台连接过远程桌面的Windows电脑里&#xff0c;都藏着一种特殊的"视觉日志"——RDP位图…...

Windows 7如何突破Python版本限制?企业级兼容性解决方案指南

Windows 7如何突破Python版本限制&#xff1f;企业级兼容性解决方案指南 【免费下载链接】PythonVista Python 3.9 installers that support Windows 7 SP1 and Windows Server 2008 R2 项目地址: https://gitcode.com/gh_mirrors/py/PythonVista 一、痛点分析&#xff…...

API密钥中转站,低成本实现Token自由

最近很多小伙伴都在用AI开发项目 编写程序&#xff0c;或者安装部署龙虾&#xff08;OpenClaw&#xff09;&#xff0c;但是国内的模型很多又满足不了自己的要求&#xff0c;国外的模型要么是不方便购买&#xff0c;要么是价格太贵&#xff0c;每天都要消耗几十上百美元&#x…...

明略科技公布上市后首次年报:营收14亿 经调整净利4204万

雷递网 雷建平 3月26日明略科技&#xff08;股份代码&#xff1a;2718&#xff09;今日发布截至2025年12月31日财报&#xff0c;财报显示&#xff0c;明略科技2025年营收14.26亿&#xff0c;较上年同期的13.81亿增长3.2%。明略科技2025年来自数据智能服务收入为12.6亿元&#x…...

从零开始:使用mmsegmentation训练自定义数据集的全流程指南

1. 环境准备与安装指南 第一次接触mmsegmentation时&#xff0c;最头疼的就是环境配置。记得我刚开始用的时候&#xff0c;光是解决CUDA和PyTorch版本兼容问题就折腾了一整天。现在把踩过的坑都总结出来&#xff0c;让你10分钟搞定环境搭建。 核心依赖清单&#xff1a; Python …...