1. 程式人生 > >kafka的內部實現、安裝和使用

kafka的內部實現、安裝和使用

原理解析

producer建立一個topic時,可以指定該topic為幾個partition(預設是1,配置num.partitions),然後會把partition分配到每個broker上,分配的演算法是:a個broker,第b個partition分配到b%a的broker上,可以指定有每個partition有幾分副本Replication,副本的分配策略為:第c個副本儲存在第(b+c)%a的broker上。一個partition在每個broker上是一個資料夾,資料夾中檔案的命名方式為:topic名稱+有序序號。每個partition中檔案是一個個的segment,segment file由.index和.log檔案組成。兩個檔案的命名規則是,上一個segmentfile的最後一個offset。這樣,可以快速的刪除old檔案。

producer往kafka裡push資料,會自動的push到所有的分割槽上,訊息是否push成功有幾種情況:1,接收到partition的ack就算成功,2全部副本都寫成功才算成功;資料可以儲存多久,預設是兩天;producer的資料會先存到快取中,等大小或時間達到閾值時,flush到磁碟,consumer只能讀到磁碟中的資料。

consumer從kafka裡poll資料,poll到一定配置大小的資料放到記憶體中處理。每個group裡的consumer共同消費全部的訊息,不同group裡的資料不能消費同樣的資料,即每個group消費一組資料;consumer的數量和partition的數量相等時消費的效率最高。

這樣,kafka可以橫向的擴充broker數量和partitions;資料順序寫入磁碟;producer和consumer非同步

kafka安裝

  • 上傳到focuson1,解壓,配置server.properties.然後考到focuson2、focuson3.

3個broker,broker.id,分別為0,1,2.其餘的見如下配置,

vi config/server.properties
broker.id=0
num.partitions=3
zookeeper.connect=focuson1:2181,focuson2:2181,focuson3:2181 
  • 啟動,在三個節點分別執行:
nohup ./bin/kafka-server-start.sh config/server.properties &
  • 建立一個topic並檢視所有的topic,可指定該topic的分割槽,副本數量
[[email protected] kafka_2.11-1.1.0]# bin/kafka-topics.sh --create --zookeeper focuson1:2181 --replication-factor 2 --partitions 3 --topic focuson_test1
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "focuson_test1".

[[email protected] kafka_2.11-1.1.0]# bin/kafka-topics.sh --list --zookeeper focuson2:2181
focuson_test1

 
  • 使用shell啟動該topic的producer,可在裡面寫入資料。
bin/kafka-console-producer.sh --broker-list focuson1:9092,focuson2:9092,focuson3:9092 --topic focuson_test1
  • 檢視各個broker的資料分割槽情況,以及副本儲存情況
[[email protected] kafka-logs]# ll
total 28
-rw-r--r-- 1 root root    4 May 12 08:31 cleaner-offset-checkpoint
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-0
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-1
-rw-r--r-- 1 root root    4 May 12 08:48 log-start-offset-checkpoint
-rw-r--r-- 1 root root   54 May 12 08:09 meta.properties
-rw-r--r-- 1 root root   40 May 12 08:48 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root   40 May 12 08:49 replication-offset-checkpoint
[[email protected] kafka-logs]# ll focuson_test1-0
total 8
-rw-r--r-- 1 root root 10485760 May 12 08:24 00000000000000000000.index
-rw-r--r-- 1 root root      162 May 12 08:33 00000000000000000000.log
-rw-r--r-- 1 root root 10485756 May 12 08:24 00000000000000000000.timeindex
-rw-r--r-- 1 root root        8 May 12 08:32 leader-epoch-checkpoint

[[email protected] kafka-logs]# ll
total 24
-rw-r--r-- 1 root root    0 May 12 08:11 cleaner-offset-checkpoint
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-1
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-2
-rw-r--r-- 1 root root    4 May 12 08:33 log-start-offset-checkpoint
-rw-r--r-- 1 root root   54 May 12 08:11 meta.properties
-rw-r--r-- 1 root root   40 May 12 08:33 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root   40 May 12 08:33 replication-offset-checkpoint

[[email protected] kafka-logs]# ll
total 24
-rw-r--r-- 1 root root    0 May 12 08:12 cleaner-offset-checkpoint
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-0
drwxr-xr-x 2 root root 4096 May 12 08:32 focuson_test1-2
-rw-r--r-- 1 root root    4 May 12 08:45 log-start-offset-checkpoint
-rw-r--r-- 1 root root   54 May 12 08:12 meta.properties
-rw-r--r-- 1 root root   40 May 12 08:45 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root   40 May 12 08:46 replication-offset-checkpoint

zookeeper與kafka

broker 會在zookeeper上註冊臨時節點,當該broker臨時節點斷開時,能監控到變化,可以是producer等進行負載均衡

topic。zookeeper上會有每個topic的partition的分佈情況,當broker啟動或新增時,會到topic下把自己加入到對應partition的isr(In-Sync Replicas的縮寫,表示副本同步佇列)列表。同樣的,當broker退出時,也會觸發zookeeper更新其對應topic分割槽的isr列表,並決定是否需要做消費者的負載均衡。

kafka consumer 0.9之後不需要使用zookeeper,但zookeeper-based模式仍然支援。主要實現是註冊消費者到zookeeper下,記錄每次的offset等資訊,並對每個consumer進行監控等。




相關推薦

kafka內部實現安裝使用

原理解析producer建立一個topic時,可以指定該topic為幾個partition(預設是1,配置num.partitions),然後會把partition分配到每個broker上,分配的演算法是:a個broker,第b個partition分配到b%a的broker上

ThreadLocal 內部實現應用場景記憶體洩漏

一、什麼是ThreadLocal 首先明確一個概念,那就是ThreadLocal並不是用來併發控制訪問一個共同物件,而是為了給每個執行緒分配一個只屬於該執行緒的變數,顧名思義它是local variable(執行緒區域性變數)。它的功用非常簡單,就是為每

(轉)關於Tomcat的點點滴滴(體系架構處理http請求的過程安裝配置目錄結構設置壓縮對中文文件名的支持以及Catalina這個名字的由來……等)

https 設置 重啟 specific 調用 持久化數據 所在 original apps 轉自:http://itfish.net/article/41668.html 總結Tomcat的體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名

(轉載)【項目管理構建】——Maven下載安裝配置(一)

文檔 port 目標 軟件項目管理 strong mar temp mave work 原文鏈接: http://blog.csdn.net/jiuqiyuliang/article/details/41076215 在現實

Mysql數據庫介紹安裝配置文件

username 存取 空閑 交互式 遠程登錄 現在 centos7 delet 取數 Mysql數據庫介紹、安裝和配置文件 MySQL數據庫介紹 mysql是開源關系型數據庫,遵循GPL協議。 mysql的特點是性能卓越且服務穩定,開源,無版本限制,成本低

Linux 124課程 13安裝升級軟件包

Linux、註冊你的Redhat賬戶賦予系統產品的安裝軟件更新   2、RPM包是用來管理在紅帽企業Linux系統軟件   redhat、Suse、Oracle Linux 軟件包rpm   Ubuntu 軟件包dbd  所有都支

kettle的下載安裝初步使用(windows平臺下)(圖文詳解)

1.0 index java_home 網站 int 目錄 解決辦法 for sql kettle的下載   ?Kettle可以在http://kettle.pentaho.org/網站下載 http:

20180602_Maven下載安裝配置

分享圖片 指定 選擇 maven安裝 官網 AC maven下載 環境變量 解壓 Maven下載、安裝和配置 Maven下載 進入Maven官網,找到 選擇apache-maven-3.5.3-bin.zip 下載: Maven安裝和配置 解壓壓縮包

MySQL Server類型的MySQL 客戶端的下載安裝使用

mysql 雙擊 下載 lin 時間 linu ont ML 一段時間 mysql server 5.5的下載 下載地址: https://dev.mysql.com/downloads/mysql/5.0.html#linux mysql server 5.5的安裝

JDK - 官網下載安裝環境配置

選擇 oracle https bsp 點擊 xxx image 輸入 clas JDK - 官網下載、安裝和環境配置 一.JDK官網下載和安裝 1.先百度 ,進入Oracle官網(https://www.oracle.com/index.html); 2.下拉 ,點

Windows平臺上下載安裝測試nodejs

Node是一個伺服器端 JavaScript 直譯器,它可以幫助程式設計師構建高度可伸縮的應用程式,編寫能夠處理數萬條同時連線到一個(只有一個)物理機的連線程式碼。下面就來介紹如何在Windows平臺上下載、安裝nodejs。 一、下載nodejs檔案  1.  2.進入

Docker介紹安裝使用

一、Linux 容器介紹 在介紹Docker前,需要先了解一個概念Linux容器,Linux容器是與系統其它部分隔離開的一系列程序,從另一個映象執行,並由該映象提供程序所需的全部檔案。容器提供的映象包含了應用所有依賴項,因此從開發到測試再到生產的整個過程,它都有可移植性和一致性。 容器與

solr的認識安裝使用

一、solr的大概認識 (1)在網際網路專案裡面,絕大部分是用全文檢索伺服器, lucense(基於java的全文檢索api)和solr(基於lucense的全文檢索伺服器)都可以實現。用lucense需要自己來管理維護索引庫,進行索引庫的優化,快取的新增。而solr配置一下就好了,比較

泛化實現依賴關聯的區別

原文部落格地址:http://www.cnblogs.com/linjiqin/p/3415440.html a、實現 表示類對介面的實現。 UML圖中實現使用一條帶有空心三角箭頭的虛線指向介面,如下: b、泛化 表示類與類之間的繼承關係、介面與介面之間的繼承關係。 UML圖中實現使用

StringBuffer類的使用詳解底層實現StringStringBuffer的區別StringBuffer的常用方法

Java StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法 1.java StringBuffer類 2. StringBuffer類的構造器(構造方法) 3.

MongoDB服務端與客戶端下載安裝配置教程

MongoDB版本 3.6.3 MongoDB社群版 1.0  robomongo 下載 官網下載請點選這裡,百度雲下載請點選這裡,提取碼:6av6 安裝 MongoDB的安裝非常簡單,除了安裝路徑可以自己選擇之外,其它的步驟一直點下

PocketSphinx語音識別系統的編譯安裝使用

PocketSphinx語音識別系統的編譯、安裝和使用         Sphinx是由美國卡內基梅隆大學開發的大詞彙量、非特定人、連續英語語音識別系統。Sphinx從開發之初就得到了CMU、DARPA等多個部門的資

Rational Rose 2007 下載安裝破解

因為有畫UML圖的需求,所以得在電腦上安裝Rational Rose。開始準備安裝Rational Rose 2003,但是破解過程過於繁瑣而且似乎一直遇到各種問題,就決定安裝Rational Rose 2007了。本文主要內容來自另一部落格,加上了一些自己

實時搜尋引擎Elasticsearch(1)——基礎概念安裝執行

Elasticsearch(簡稱ES)是一個基於Apache Lucene(TM)的開源搜尋引擎,無論在開源還是專有領域,Lucene可以被認為是迄今為止最先進、效能最好的、功能最全的搜尋引擎庫。 Elasticsearch簡介 Elasticsearch是什麼 Ela

【PS cc 2018】photoshop cc 2018下載安裝破解

目錄 一、photoshop cc 2018下載 二、photoshop cc 2018安裝 (1)下載好軟體安裝包,雙擊“Set-up.exe”,開始安裝軟體: (2)安裝後,等待出現登入試用版介面: (3)然後軟體就出現一個試用7天的介面