1. 程式人生 > >Apache Kafka 核心元件和流程-日誌管理器-設計-原理(入門教程輕鬆學)

Apache Kafka 核心元件和流程-日誌管理器-設計-原理(入門教程輕鬆學)

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。

目錄:

上一節介紹了協調器。協調器主要負責消費者和kafka叢集間的協調。那麼消費者消費時,如何定位訊息呢?訊息是如何儲存呢?本節將為你揭開答案。

3 日誌管理器

3.1 日誌的儲存

Kafka的訊息以日誌檔案的形式進行儲存。不同主題下不同分割槽的訊息是分開儲存的。同一個分割槽的不同副本也是以日誌的形式,分佈在不同的broker上儲存。

這樣看起來,日誌的儲存是以副本為單位的。在程式邏輯上,日誌確實是以副本為單位的,每個副本對應一個log物件。但實際在物理上,一個log又劃分為多個logSegment進行儲存。

舉個例子,建立一個topic名為test,擁有3個分割槽。為了簡化例子,我們設定只有1個broker,1個副本。那麼所有的分割槽副本都儲存在同一個broker上。

第二章中,我們在kafka的配置檔案中配置了log.dirs=/tmp/kafka-logs。此時在/tmp/kafka-logs下面會建立test-0,test-1,test-2三個資料夾,代表三個分割槽。命名規則為“topic名稱-分割槽編號”

我們看test-0這個資料夾,注意裡面的logSegment並不代表這個資料夾,logSegment代表邏輯上的一組檔案,這組檔案就是.log、.index、.timeindex這三個不同副檔名,但是同文件名的檔案。

  1. .log儲存訊息
  2. .index儲存訊息的索引
  3. .timeIndex,時間索引檔案,通過時間戳做索引。

這三個檔案配合使用,用來儲存和消費時快速查詢訊息。

剛才說到同一個logSegment的三個檔案,檔名是一樣的。命名規則為.log檔案中第一條訊息的前一條訊息偏移量,也稱為基礎偏移量,左邊補0,補齊20位。比如說第一個LogSegement的日誌檔名為00000000000000000000.log,假如儲存了200條訊息後,達到了log.segment.bytes配置的閾值(預設1個G),那麼將會建立新的logSegment,檔名為00000000000000000200.log。以此類推。另外即使沒有達到log.segment.bytes的閾值,而是達到了log.roll.ms或者log.roll.hours設定的時間觸發閾值,同樣會觸發產生新的logSegment。

3.2 日誌定位

日誌定位也就是訊息定位,輸入一個訊息的offset,kafka如何定位到這條訊息呢?

日誌定位的過程如下:

1、根據offset定位logSegment。(kafka將基礎偏移量也就是logsegment的名稱作為key存在concurrentSkipListMap中)

2、根據logSegment的index檔案查詢到距離目標offset最近的被索引的offset的position x。

3、找到logSegment的.log檔案中的x位置,向下逐條查詢,找到目標offset的訊息。

結合下圖中例子,我再做詳細的講解:

這裡先說明一下.index檔案的儲存方式。.index檔案中儲存了訊息的索引,儲存內容是訊息的offset及物理位置position。並不是每條訊息都有自己的索引,kafka採用的是稀疏索引,說白了就是隔n條訊息存一條索引資料。這樣做比每一條訊息都建索引,查詢起來會慢,但是也極大的節省了儲存空間。此例中我們假設跨度為2,實際kafka中跨度並不是固定條數,而是取決於訊息累積位元組數大小。

例子中consumer要消費offset=15的訊息。我們假設目前可供消費的訊息已經儲存了三個logsegment,分別是00000000000000000,0000000000000000010,0000000000000000020。為了講解方便,下面提到名稱時,會把前面零去掉。

下面我們詳細講一下查詢過程。

  1. kafka收到查詢offset=15的訊息請求後,通過二分查詢,從concurrentSkipListMap中找到對應的logsegment名稱,也就是10。
  2. 從10.index中找到offset小於等於15的最大值,offset=14,它對應的position=340
  3. 從10.log檔案中物理位置340,順序往下掃描檔案,找到offset=15的訊息內容。

可以看到通過稀疏索引,kafka既加快了訊息查詢的速度,也顧及了儲存的開銷。

相關推薦

Apache Kafka 核心元件流程-日誌管理-設計-原理入門教程輕鬆

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 上一節介紹了協調器。協調器主要負責消費者和kafka叢集間的協調。那麼消費者消費時,如何定位訊息呢?訊息是如何儲存呢?本節將為

Apache Kafka-核心元件流程-副本管理-設計-原理入門教程輕鬆

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 本章簡單介紹了副本管理器,副本管理器負責分割槽及其副本的管理。副本管理器具體的工作流程可以參考牟大恩所著的《Kafka入門與實

Apache Kafka核心元件流程-協調消費者組協調-設計-原理入門教程輕鬆

作者:稀有氣體 來源:CSDN 原文:https://blog.csdn.net/liyiming2017/article/details/82805479 版權宣告:本文為博主原創文章,轉載請附上博文連結! 本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習

Apache Kafka 核心元件流程-控制器-設計-原理入門教程輕鬆

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 通過前幾章的學習,我們已經從巨集觀層面瞭解了kafka的設計理念。包括kafka叢集的組成、訊息的主題、主題的分割槽、分割槽的

Apache Kafka入門教程輕鬆-第四章 Kafka核心元件流程-設計-原理副本管理

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 本章簡單介紹了副本管理器,副本管理器負責分割槽及其副本的管理。副本管理器具體的工作流程可以參考牟大恩所著的《Kafka入門與實踐》。 副本管理器 副本機制使得kafka

Apache Kafka入門教程輕鬆-第四章 Kafka核心元件流程-設計-原理協調消費者組協調

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 上一節介紹了kafka工作的核心元件--控制器。本節將介紹消費者密切相關的元件--協調器。它負責消費者的出入組工作。大家可以回想一下kafka核心概念中關於吃蘋果的場景,如

Apache Kafka入門教程輕鬆-第四章 Kafka核心元件流程-設計-原理控制器

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 通過前幾章的學習,我們已經從巨集觀層面瞭解了kafka的設計理念。包括kafka叢集的組成、訊息的主題、主題的分割槽、分割槽的副本等內容。接下來我們會繼續深入,瞭解kafk

Apache Kafka入門教程輕鬆- Kafka核心概念

本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 本章是學習kafka的核心章節,涵蓋內容比較多,在理解上有一定的難度,需要反覆閱讀理解,才能參透Kafka的設計思想。 1、Kafka叢集結構 在第一章我給出過一個訊息

03 Java圖形化界面設計——布局管理之FlowLayout流式布局

顯示效果 窗口 ext 整數 管理 平移 sflow awt 程序代碼 前文講解了JFrame、JPanel,其中已經涉及到了空布局的使用。Java雖然可以以像素為單位對組件進行精確的定位,但是其在不同的系統中將會有一定的顯示差異,使得顯示效果不盡相同,為

python3:深刻理解__iter____next__ 迭代原理用自定義迭代方法進行講解

1.iter 的用法 咱都知道, list ,tuple,dict 都是可迭代物件,如果想讓他們轉化成迭代器. 我們可以這麼做,呼叫 inter()方法,它會返回一個迭代器. 例如: from collections import Iterable,Iterator a=[1,

初始MyBatis框架四大核心元件配置檔案

一、概述 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。 MyBatis 是一款優秀的持久層框

Kafka架構、Kafka核心元件Kafka工作原理Kafka應用場景

什麼是訊息系統?          訊息系統負責將資料從一個應用程式傳輸到另一個應用程式,因此應用程式可以專注於資料,但不擔心如何共享它。 分散式訊息傳遞基於可靠訊息佇列的概念。 訊息在客戶端應用程式和訊息傳遞系統之間非同步排隊。 有兩種型別的訊

Facebook開源Linux核心元件工具:BPF、Btrfs、Netconsd、Cgroup2、PSI、Oomd

內容摘要: 作者:Tejun Heo(Facebook的軟體工程師)和Thomas Connally。 Facebook工程文化的一個組成部分始終是我們的開發團隊致力於開發開源解決方案,以解決實際的生產問題,並應對現代大規模雲端計算的重大挑戰。今天,我們宣佈了一套解決重要

commons-loggingLog4j 日誌管理/log4j.properties配置詳解

commons-logging和Log4j 日誌管理 (zz) 什麼要用日誌(Log)? 這個……就不必說了吧。 為什麼不用System.out.println()? 功能太弱;不易於控制。如果暫時不想輸出了怎麼辦?如果想輸出到檔案怎麼辦?如果想部分輸出怎麼辦?…… 為什麼

分散式訊息中介軟體——Kafka核心元件詳解

一、Kafka釋出訂閱訊息系統基礎      Kafka 是分散式釋出-訂閱訊息系統。它最初由 LinkedIn 公司開發,使用 Scala語言編寫,之後成為 Apache 頂級專案框架。Kafka

Spring Security詳解認證之核心元件服務

一直以來都特別喜歡Spring的全家桶系列,也一直想寫關於Spring Security的系列文章,接觸security從最初的Guide開始入手,到專案中的原始碼閱讀,最近又沉下心來看了幾遍文件,打算嘗試一下,把我的理解都記錄下來,寫一個較為完整的系列文章。

初識MyBatis框架四大核心元件配置檔案

一、概述 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。 MyBatis 是

MyBatis的核心元件生命週期

1 核心元件:(1)、SqlSessionFactoryBuilder(構造器):它會根據配置或者程式碼來生成SqlSessionFactory,採用的是分佈構建的Builder模式。(2)、SqlSe

用EOM眼光評判“做全國最最好的標準許可權元件通用許可權管理軟體”之一

光靠理論上闡述EOM顯然不太容易理解,我想找個現實的例子,加以進一步說明。最近我在網上看到了《我要做全國最最好的標準許可權元件和通用許可權管理軟體》系列隨筆。作者通過自己的親身經歷,提出要做全國最最好的標準許可權元件和通用許可權管理軟體。當然“全國”,“最最好”、“標準組件”

AWT布局管理

log 都沒有 tro 原則 ++ 開發 out pan 背景顏色 AWT(Abstract Window Toolkit)抽象窗口開發包 component:可以顯示出來的與用戶進行交互的圖形元素 container:容納其他component元素的容器;cont