kafka offset

标签: kafka  java  

offset 偏移量

offset存储在哪里?consumer_offsets

kafka默认提供了50个consumer_offsets_*的topic,用于存放consumer group 某一时刻提交的offset信息。
在这里插入图片描述

不同groupid用哪个consumer_offsets_ 呢?

计算公式: (“groupid”.hashCode())%50 ;

如果计算结果5,那么当前group的offset信息保存在consumer_offsets_5里面。

LogSegment (分段)

	log.segment.bytes=1073741824    //设置分段大小,默认1G

kafka以Segment为单位,将partition进一步细分。从而避免的单个文件数据量过大而导致的操作难问题。

Segment的命名从0000开始,后续文件的命名以上一个Segment文件中最后一条消息的offset值命名。

Segment是一个逻辑概念,对应着partition目录(如log/test-0)下的.index和.log文件。如果partition被分为多个Segment,那么此目录下也会有多个.index和.log文件。

Kafka0.10.1.0之后,对于每个Segment文件新增了.timeindex文件,基于时间戳操作消息。

.timeIndex:文件映射时间戳和对应offset:
在这里插入图片描述

.index:文件记录了offset和对应的物理位置:
在这里插入图片描述

.index 与 .log 映射关系
在这里插入图片描述

Log文件内容分析

在这里插入图片描述
keysize :key大小。
compresscodec :压缩编码
payload :消息具体内容

日志清除/压缩

日志的分段存储,方便了kafka进行日志清理。Kafka启动一个后台线程,定期检查的存在可以删除的消息。如果有越来越多的消息得不到及时的消费,有些消息有可能在被消费之前就被清理了,从而造成消息的丢失。

日志清理策略

1.根据消息保留时间

	配置	log.retention.hours=168 (默认7天)

2.根据topic存储大小

	配置	log.retention.bytes=1073741824(默认1G,不开启)

日志压缩策略

实际场景中,key对应的value值不断变化,并且消费者只关心最新的value,所以kafka会在后台启动线程,定期将相同key合并,只保留最新value。
在这里插入图片描述

版权声明:本文为weixin_41943050原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41943050/article/details/107985621

智能推荐

Kafka偏移量(Offset)管理

1.定义 Kafka中的每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序号,用于partition唯一标识一条消息。 Offset记录着下一条将要发送给Consumer的消息的序号。 流处理系统常见的三种语义: 最多一次 每个记录要么处理一次,要么根本不处理 至少一次 这比最多一次强,因为它确保不会...

SparkStreaming消费kafka以及offset提交

park streaming流式处理kafka中的数据,第一步是先把数据接收过来,转换为spark streaming中的数据结构Dstream。接收数据的方式有两种:1.利用Receiver接收数据,2.直接从kafka读取数据。 一、Receiver方式消费kafka 这种方式利用接收器(Receiver)来接收kafka中的数据,其最基本是使用Kafka高阶用户API接口。对于所有的接收器,...

springboot中实现kafka指定offset消费

kafka消费过程难免会遇到需要重新消费的场景,例如我们消费到kafka数据之后需要进行存库操作,若某一时刻数据库down了,导致kafka消费的数据无法入库,为了弥补数据库down期间的数据损失,有一种做法我们可以指定kafka消费者的offset到之前某一时间的数值,然后重新进行消费。 首先创建kafka消费服务 kafka消费模型建立 kafka server中每个主题存在多个分区(part...

Kafka+Spark Streaming管理offset

场景描述:Kafka配合Spark Streaming是大数据领域常见的黄金搭档之一,主要是用于数据实时入库或分析。为了应对可能出现的引起Streaming程序崩溃的异常情况,我们一般都需要手动管理好Kafka的offset,而不是让它自动提交,即需要将enable.auto.commit设为false。只有管理好offset,才能使整个流式系统最大限度地接近exactly once语义。 Kaf...

Kafka 深入浅出——offset实战

1、 offset 1.1 offset介绍 老版本 Consumer 的位移管理是依托于 Apache ZooKeeper 的,它会自动或手动地将位移数据提交到 ZooKeeper 中保存。当 Consumer 重启后,它能自动从 ZooKeeper 中读取位移数据,从而在上次消费截止的地方继续消费。这种设计使得 Kafka Broker 不需要保存位移数据,减少了 Broker 端需要持有的状...

猜你喜欢

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...