CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|
### --- 日志存储概述~~~ Kafka 消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响。
~~~ 每个主题又可以分为一个或多个分区。
~~~ 每个分区各自存在一个记录消息数据的日志文件。
[root@hadoop01 ~]# ls /opt/yanqi/servers/kafka/kafka-logs/
cleaner-offset-checkpoint meta.properties replication-offset-checkpoint tp_demo_03-1 tp_re_01-3 tp_re_02-0 tp_re_02-2
log-start-offset-checkpoint recovery-point-offset-checkpoint tp_demo_03-0 tp_demo_03-2 tp_re_01-4 tp_re_02-1[root@hadoop01 ~]# kafka-topics.sh --zookeeper localhost:2181/myKafka --describe --topic tp_demo_03
Topic:tp_demo_03 PartitionCount:3 ReplicationFactor:2 Configs:Topic: tp_demo_03 Partition: 0 Leader: 0 Replicas: 0,1 Isr: 1,0Topic: tp_demo_03 Partition: 1 Leader: 1 Replicas: 1,0 Isr: 0,1Topic: tp_demo_03 Partition: 2 Leader: 0 Replicas: 0,1 Isr: 1,0
~~~ # 图中,创建了一个 tp_demo_03 主题,~~~ 其存在3个 Parition,对应的每个Parition下存在一个[Topic-Parition] 命名的消息日志文件。
~~~ 在理想情况下,数据流量分摊到各个 Parition 中,实现了负载均衡的效果。
~~~ 在分区日志文件中,你会发现很多类型的文件,比如: .index、.timestamp、.log、.snapshot 等。
~~~ 其中,文件名一致的文件集合就称为 LogSement。
[root@hadoop01 ~]# ls /opt/yanqi/servers/kafka/kafka-logs/tp_demo_03-0/
00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex leader-epoch-checkpoint
[root@hadoop01 ~]# ls /opt/yanqi/servers/kafka/kafka-logs/tp_demo_03-1/
00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex leader-epoch-checkpoint
[root@hadoop01 ~]# ls /opt/yanqi/servers/kafka/kafka-logs/tp_demo_03-2/
00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex leader-epoch-checkpoint
### --- LogSegment~~~ 分区日志文件中包含很多的 LogSegment
~~~ Kafka 日志追加是顺序写入的
~~~ LogSegment 可以减小日志文件的大小
~~~ 进行日志删除的时候和数据查找的时候可以快速定位。
~~~ ActiveLogSegment 是活跃的日志分段,拥有文件拥有写入权限,其余的 LogSegment 只有只读的权限。
~~~ 日志文件存在多种后缀文件,重点需要关注 .index、.timestamp、.log 三种类型。
后缀名 | 说明 |
.index | 偏移量索引文件 |
.timestamp | 时间戳索引文件 |
.log | 日志文件 |
.snapshot | 快照文件 |
.deleted | |
.cleaned | 日志清理临时文件 |
.swap | 日志压缩之后临时文件 |
.leader-epoch-checkpoint |
~~~ # 每个 LogSegment 都有一个基准偏移量,表示当前 LogSegment 中第一条消息的 offset。
~~~ 偏移量是一个 64 位的长整形数,固定是20位数字,长度未达到,用 0 进行填补,
~~~ 索引文件和日志文件都由该作为文件名命名规则(00000000000000000000.index、00000000000000000000.timestamp、00000000000000000000.log)。
~~~ 如果日志文件名为 00000000000000000121.log ,
~~~ 则当前日志文件的一条数据偏移量就是121(偏移量从 0 开始)。
![](/assets/blank.gif)
配置条目 | 默认值 | 说明 |
log.index.interval.bytes | 4096(4K) |
增加索引项字节间隔密度, 会影响索引文件中的区间密度和查询效率 |
log.segment.bytes | 1073741824(1G) | 日志文件最大值 |
log.roll.ms |
当前日志分段中消息的最大时间戳与当前系统的 时间戳的差值允许的最大范围,单位毫秒 |
|
log.roll.hours | 168(7天) |
当前日志分段中消息的最大时间戳与当前系统的 时间戳的差值允许的最大范围,单位小时 |
log.index.size.max.bytes | 10485760(10MB) | 触发偏移量索引文件或时间戳索引文件分段字节限额 |
### --- 配置项默认值说明~~~ 偏移量索引文件用于记录消息偏移量与物理地址之间的映射关系。
~~~ 时间戳索引文件则根据时间戳查找对应的偏移量。
~~~ Kafka 中的索引文件是以稀疏索引的方式构造消息的索引,
~~~ 并不保证每一个消息在索引文件中都有对应的索引项。
~~~ 每当写入一定量的消息时,
~~~ 偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项。
~~~ 通过修改 log.index.interval.bytes 的值,改变索引项的密度。
### --- 切分文件~~~ # 当满足如下几个条件中的其中之一,就会触发文件的切分:
~~~ 当前日志分段文件的大小超过了 broker 端参数 log.segment.bytes 配置的值。
~~~ log.segment.bytes 参数的默认值为 1073741824,即 1GB。
~~~ 当前日志分段中消息的最大时间戳与
~~~ 当前系统的时间戳的差值大于 log.roll.ms 或log.roll.hours 参数配置的值。
~~~ 如果同时配置了 log.roll.ms 和 log.roll.hours 参数,那么 log.roll.ms 的优先级高。
~~~ 默认情况下,只配置了 log.roll.hours 参数,其值为168,即 7 天。
~~~ 偏移量索引文件或时间戳索引文件的大小达到 broker 端参数 log.index.size.max.bytes配置的值。
~~~ log.index.size.max.bytes 的默认值为 10485760,即 10MB。
~~~ 追加的消息的偏移量与当前日志分段的偏移量之间的差值大于 Integer.MAX_VALUE ,
~~~ 即要追加的消息的偏移量不能转变为相对偏移量。
~~~ # 为什么是 Integer.MAX_VALUE ?~~~ 1024 * 1024 * 1024=1073741824
~~~ 在偏移量索引文件中,每个索引项共占用 8 个字节,并分为两部分。
~~~ 相对偏移量和物理地址。
~~~ 相对偏移量:表示消息相对与基准偏移量的偏移量,占 4 个字节
~~~ 物理地址:消息在日志分段文件中对应的物理位置,也占 4 个字节
~~~ 4 个字节刚好对应 Integer.MAX_VALUE ,如果大于 Integer.MAX_VALUE ,
~~~ 则不能用 4 个字节进行表示了。
### --- 索引文件切分过程~~~ 索引文件会根据 log.index.size.max.bytes 值进行预先分配空间,即文件创建的时候就是最大值
~~~ 当真正的进行索引文件切分的时候,才会将其裁剪到实际数据大小的文件。
~~~ 这一点是跟日志文件有所区别的地方。其意义降低了代码逻辑的复杂性。
CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|相关推荐
- CC00065.kafka——|Hadoopkafka.V50|——|kafka.v50|日志清理|
一.日志压缩策略 ### --- 概念~~~ 日志压缩是Kafka的一种机制,可以提供较为细粒度的记录保留, ~~~ 而不是基于粗粒度的基于时间的保留. ~~~ 对于具有相同的Key,而数据不同,只保 ...
- CC00042.kafka——|Hadoopkafka.V27|——|kafka.v27|主题管理.v02|
一.修改主题 ### --- 为topic_x加入segment.bytes配置[root@hadoop ~]# kafka-topics.sh --zookeeper localhost:2181/ ...
- CC00073.kafka——|Hadoopkafka.V58|——|kafka.v58|稳定性|事务操作|
一.事务操作 ### --- 事务操作~~~ # 在Kafka事务中,一个原子性操作,根据操作类型可以分为3种情况.情况如下: ~~~ 只有Producer生产消息,这种场景需要事务的介入: ~~~ ...
- CC00038.kafka——|Hadoopkafka.V23|——|kafka.v23|消费者拦截器参数配置|
一.消费者拦截器参数配置:消费者参数配置补充 配置项 说明 bootstrap.servers 建立到Kafka集群的初始连接用到的host/port列表. 客户端会使用这里指定的所有的host/po ...
- CC00034.kafka——|Hadoopkafka.V19|——|kafka.v19|消费者位移管理.v02|
一.消费者位移管理数据准备 ### --- 准备数据~~~ # 生成消息文件 [root@hadoop ~]# for i in `seq 60`; do echo "hello yanqi ...
- SpringCloud + kafka + ELK 搭建微服务日志管理平台
SpringCloud + kafka + ELK 搭建微服务日志管理平台 2019-12-31,写在前面的话 今天是2019最后一天了,最近几天都在搞这块微服务日志管理的事情,有很多种方案实现,每种 ...
- 使用filbeat从kafka中消费json格式日志并发送到ElasticSearch
环境 filbeat 7.10 kafka 2.1 elasticsearch 7.4.2 windows 10 需求描述 Java程序生产Json格式的日志发送到kafka中,再由filebeat从 ...
- Flume+Kafka+Spark Streaming+MySQL实时日志分析
文章目录 项目背景 案例需求 一.分析 1.日志分析 二.日志采集 第一步.代码编辑 2.启动采集代码 三.编写Spark Streaming的代码 第一步 创建工程 第二步 选择创建Scala工程 ...
- Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统
文章目录 一.前言 二.背景信息 三.操作流程 四.准备工作 1.Docker 环境 2.Docker Compose 环境 3.版本准备 4.环境初始化 5.服务安装 6.服务设置 五.配置 Fil ...
最新文章
- python去除扩展名
- python 字符转义_【课堂笔记】Python基础语法:字符串
- 【NLP实战系列】Tensorflow命名实体识别实战
- 33行代码AC——例题6-5 移动盒子(Boxes in a Line, UVa 12657)——解题报告
- 第 8 章 容器网络 - 061 - flannel 的连通与隔离
- 我们为什么要学数学?这里给你一个答案。
- 重磅公开!阿里语音识别模型端核心技术,让你“听”见未来
- sat2 计算机科目,2019-2020年SAT2考试时间及Top100大学要求
- python中input的功能是什么_python中的input的功能是什么
- python框架优化方法_Python 遗传算法框架 GAFT 优化小记
- Android TV开发总结【适配】
- Python爬取北京市所有电子眼名,再也不怕被隐藏摄像头偷拍
- html背景图片半透明遮罩,巧用CSS cross-fade()实现背景图像半透明效果
- 上传 visio 2003 基本形状图谱
- 海思HI3536 H265解码处理器简介
- 基于CC2430的Zigbee开发套件【转】
- Wireshark捕获过滤器
- 5. 工业大数据典型应用
- 华为5G手机+鸿蒙系统,还能这么玩儿?
- 详解200行Python代码实现控制台版2048【总有一款坑适合你】【超详细】