CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|
生活随笔
收集整理的這篇文章主要介紹了
CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、日志存儲概述
~~~ # 每個 LogSegment 都有一個基準偏移量,表示當前 LogSegment 中第一條消息的 offset。
~~~ 偏移量是一個 64 位的長整形數,固定是20位數字,長度未達到,用 0 進行填補,
~~~ 索引文件和日志文件都由該作為文件名命名規則(00000000000000000000.index、00000000000000000000.timestamp、00000000000000000000.log)。
~~~ 如果日志文件名為 00000000000000000121.log ,
~~~ 則當前日志文件的一條數據偏移量就是121(偏移量從 0 開始)。 三、日志與索引文件
### --- 配置項默認值說明~~~ 偏移量索引文件用于記錄消息偏移量與物理地址之間的映射關系。
~~~ 時間戳索引文件則根據時間戳查找對應的偏移量。
~~~ 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 值進行預先分配空間,即文件創建的時候就是最大值
~~~ 當真正的進行索引文件切分的時候,才會將其裁剪到實際數據大小的文件。
~~~ 這一點是跟日志文件有所區別的地方。其意義降低了代碼邏輯的復雜性。
?
### --- 日志存儲概述~~~ 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 |
| 配置條目 | 默認值 | 說明 |
| 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) | 觸發偏移量索引文件或時間戳索引文件分段字節限額 |
總結
以上是生活随笔為你收集整理的CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: math.h常用数学函数
- 下一篇: 黑科技,用这个工具来对任意方法进行Hoo