kafka 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。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值