kafka offset
offset
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。

智能推荐
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...
