1. 程式人生 > >Kafka:架構簡介【轉】

Kafka:架構簡介【轉】

轉:http://www.cnblogs.com/f1194361820/p/6026313.html

Kafka 架構簡介

Kafka是一個開源的、分散式的、可分割槽的、可複製的基於日誌提交的釋出訂閱訊息系統。它具備以下特點:

·訊息持久化: 為了從大資料中獲取有價值的資訊,任何資訊的丟失都是負擔不起的。Kafka使用了O(1)的磁碟結構設計,這樣做即便是在要儲存大體積的資料時也是可以提供穩定的效能。使用Kafka時,message會被儲存並且會被複制以防止資料丟失。

·高吞吐量: 設計是工作在普通的硬體設施上多個客戶端能夠每秒處理幾百兆的資料量。

·分散式: Kafka Broker的中心化叢集支援訊息分割槽,而consumer採用分散式進行消費。

·種多Client支援: Kafka很容易與其它平臺進行支援,例如:Java、.NET、PHP、Ruby、Python。

·實時: 訊息由producer產生後立即對consumer可見。這個特性對於基於事件的系統是很關鍵的。

下面就來對Kafka架構做一個簡單的說明:

Kafka各元件說明

Broker

每個kafka server稱為一個Broker,多個borker組成kafka cluster。

 

一個機器上可以部署一個或者多個Broker,這多個Broker連線到相同的ZooKeeper就組成了Kafka叢集。

Topic

Kafka是一個釋出訂閱訊息系統,它的邏輯結構如下:

 

Topic 就是訊息類別名,一個topic中通常放置一類訊息。每個topic都有一個或者多個訂閱者,也就是訊息的消費者consumer。

Producer將訊息推送到topic,由訂閱該topic的consumer從topic中拉取訊息。

Topic 與broker

一個Broker上可以建立一個或者多個Topic。同一個topic可以在同一叢集下的多個Broker中分佈。

 

Partition log

Kafka會為每個topic維護了多個分割槽(partition),每個分割槽會對映到一個邏輯的日誌(log)檔案:

 

每當一個message被髮布到一個topic上的一個partition,broker應會將該message追加到這個邏輯log檔案的最後一個segment上。這些segments 會被flush到磁碟上。Flush時可以按照時間來進行,也可以按照message 數來執行。

每個partition都是一個有序的、不可變的結構化的提交日誌記錄的序列。在每個partition中每一條日誌記錄都會被分配一個序號——通常稱為offset,offset在partition內是唯一的。論點邏輯檔案會被化分為多個檔案segment(每個segment的大小一樣的)。

         Broker叢集將會保留所有已釋出的message records,不管這些訊息是否已被消費。保留時間依賴於一個可配的保留週期。例如:如果設定了保留策略是2day,那麼每一條訊息釋出兩天內是被保留的,在這個2day的保留時間內,訊息是可以被消費的。過期後不再保留。

 

Partition distribution

日誌分割槽是分散式的存在於一個kafka叢集的多個broker上。每個partition會被複制多份存在於不同的broker上。這樣做是為了容災。具體會複製幾份,會複製到哪些broker上,都是可以配置的。經過相關的複製策略後,每個topic在每個broker上會駐留一到多個partition。如圖:

 

如果要了解kafka如何進行partition、replica 分配的,可以參考:

對於同一個partition,它所在任何一個broker,都有能扮演兩種角色:leader、follower。

看上面的例子。紅色的代表是一個leader。

對於topic1的4個partition:

Part 1的leader是broker1,followers是broker2\3。

Part2的leader是broker2,followers是broker1\4。

Part3的leader是broker3,followers是broker1\3。

Part4的leader是broker4,followers是broker2\3。

對於topic2的3個partition:

Part1的leader是broker1,followers是broker2。

Part2的leader是broker2,followers是broker3。

Part3的leader是broker3,followers是broker4。

對於topic2的4個partition:

Part 1的leader是broker4,followers是broker1\2\3。

Part2的leader是broker2,followers是broker1\3\4。

Part3的leader是broker3,followers是broker1\2\4。

Part4的leader是broker1,followers是broker2\3\4。

 下面是一個真實的例子:

圖中的partition 0 的leader是broker 2,它有3個replicas:2,1,3。 

In-Sync Replica:在同步中,也就是有哪些broker正處理同步中。partition 0的ISR是2,1,3,說明了3個replica都是正常狀態。如果有一個broker down,那麼它就不會在ISR中出現。

 之後把broker1停止後:

每個partition的Leader的用於處理到該partition的讀寫請求的。

每個partition的followers是用於非同步的從它的leader中複製資料的。

Kafka會動態維護一個與Leader保持一致的同步副本(in-sync replicas (ISR))集合,並且會將最新的同步副本(ISR )集合持久化到zookeeper。如果leader出現問題了,就會從該partition的followers中選舉一個作為新的leader。

所以呢,在一個kafka叢集中,每個broker通常會扮演兩個角色:在一個partition中扮演leader,在其它的partition中扮演followers。Leader是最繁忙的,要處理讀寫請求。這樣將leader均分到不同的broker上,目的自然是要確保負載均衡。

Producer

Producer作為訊息的生產者,在生產完訊息後需要將訊息投送到指定的目的地(某個topic的某個partition)。Producer可以根據指定選擇partition的演算法或者是隨機方式來選擇釋出訊息到哪個partition。

Consumer

         在Kafka中,同樣有consumer group的概念,它是邏輯上將一些consumer分組。因為每個kafka consumer是一個程序。所以一個consumer group中的consumers將可能是由分佈在不同機器上的不同的程序組成的。Topic中的每一條訊息可以被多個consumer group消費,然而每個consumer group內只能有一個consumer來消費該訊息。所以,如果想要一條訊息被多個consumer消費,那麼這些consumer就必須是在不同的consumer group中。所以也可以理解為consumer group才是topic在邏輯上的訂閱者。

         每個consumer可以訂閱多個topic。

         每個consumer會保留它讀取到某個partition的offset。而consumer 是通過zookeeper來保留offset的。

Kafka提供的保障

1、如果producer往特定的partition傳送訊息時,會按照先後順序儲存,也就是說如果傳送順序是message1、message2、message3。那麼這三個訊息在partition log中的記錄的offset就是 message1_offset < message2_offset < message3_offset。

2、consumer也是有序的瀏覽log中的記錄。

3、如果一個topic指定了replication factor為N,那麼就允許有N-1個Broker出錯。

架構圖

對上述各元件介紹後,現在就應該可以很容易的理解Kafka的架構圖:

 

相關推薦

Kafka架構簡介

轉:http://www.cnblogs.com/f1194361820/p/6026313.html Kafka 架構簡介 Kafka是一個開源的、分散式的、可分割槽的、可複製的基於日誌提交的釋出訂閱訊息系統。它具備以下特點: ·訊息持久化: 為了從大資料中獲取有價值的資訊,任何資訊的丟失都是負擔不起的。

計算機網絡應用層

tac 都是 文件共享 編寫 .net pos 遠程 等待 src 轉自:http://blog.chinaunix.net/uid-26275986-id-4110819.html 今天我們來快速地瀏覽一下傳輸層之上的應用層所使用的協議,下面將簡要地列出應用

MySQL分布式集群之MyCAT(一)簡介

oba 但是 相關 水平切分 團隊 odin out mysql雙主 mys 隔了好久,才想起來更新博客,最近倒騰的數據庫從Oracle換成了MySQL,研究了一段時間,感覺社區版的MySQL在各個方面都遜色於Oracle,Oracle真的好方便!好了,不廢話,這次準備記錄

內核工具 – Sparse 簡介

一次 一段 更新 fedora stat safe volatile 可能 分析工具 轉自:http://www.cnblogs.com/wang_yb/p/3575039.html Sparse是內核代碼靜態分析工具, 能夠幫助我們找出代碼中的隱患. 主要內

HAProxy詳解(一)HAProxy介紹

監測 對比 內容交換 發送 持久連接 shadow 虛擬 font ros 一.高性能負載均衡軟件HAProxy介紹: 隨著互聯網業務的迅猛發展,大型電商平臺和門戶網站對系統的可用性和可靠性要求越來越高,高可用集群、負載均衡集群成為一種熱門的系統架構解決方

yAutoGUI 簡介

轉載來自: https://muxuezi.github.io/posts/doc-pyautogui.html http://blog.topspeedsnail.com/archives/5373   ---------------------

Unicode簡介

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Socket伺服器整體架構概述

http://gad.qq.com/article/detail/33606 Socket伺服器主要用於提供高效、穩定的資料處理、訊息轉發等服務,它直接決定了前臺應用程式的效能。我們先從整體上認識一下Socket伺服器,Socket伺服器從架構上一般分為:網路層、業務邏輯層、會話層、資料訪問層,

每秒處理10萬高併發訂單的樂視集團支付系統架構分享

轉自:https://www.cnblogs.com/hackxhao/p/5496254.html 隨著樂視硬體搶購的不斷升級,樂視集團支付面臨的請求壓力百倍乃至千倍的暴增。作為商品購買的最後一環,保證使用者快速穩定的完成支付尤為重要。所以在15年11月,我們對整個支付系統進行了全面的架構升級

url的三個js編碼函式escape(),encodeURI(),encodeURIComponent()簡介

引子 瀏覽器URl地址,上網一定會用到,但是瀏覽器地址有中文或者瀏覽器url引數操作的時候,經常會用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等。關於瀏覽器引數操作,請看文章http://www.haor

Flash Memory 簡介

本文轉載自:https://linux.codingbelief.com/zh/storage/emmc/ Flash Memory 是一種非易失性的儲存器。在嵌入式系統中通常用於存放系統、應用和資料等。在 PC 系統中,則主要用在固態硬碟以及主機板 BIOS 中。另外,絕大部分的 U 盤、SDCard 等

linux中的strings命令簡介

strings - print the strings of printable characters in files.          意思是, 列印檔案中可列印的字元。  我來補充一下吧, 這個檔案可以是文字檔案(test.c), 可執行檔案(test),  動

AndroidO Treble架構分析

本文轉載自:https://blog.csdn.net/yangwen123/article/details/79835965 從AndroidO開始,google引入了Treble架構,目的是為了方便系統升級,將oem定製的東西和Framework分離。AndroidO之前的版本:在此之前的Android

PyAutoGUI 簡介

轉載來自: --------------------------------------------------------------------------------------------------------- PyAutoGUI是一個純Pytho

每天一個linux命令(44)top命令

top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員。下面詳細介紹它的使用方法。top是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態.如果在前臺執行該命令,它將獨佔前臺,直到使用者終止

url的三個js編碼函數escape(),encodeURI(),encodeURIComponent()簡介

encode attribute 翻譯 ans encodeuri meta eric spec 默認 引子 瀏覽器URl地址,上網一定會用到,但是瀏覽器地址有中文或者瀏覽器url參數操作的時候,經常會用到encodeURIComponent()和decodeURICom

nb-iot簡介

tip 100% 產業鏈 clas div 蜂窩網絡 融合 .html sem 轉自:http://www.elecfans.com/tags/nb-iot/ 標簽 > nb-iot nb-iot 關註 118人關註 提供NB-IoT技術特點,

架構之路從管理者的角度看問題

  http://www.cnblogs.com/freeflying/p/6036910.html 同步釋出在知乎,也不知道在部落格園裡這算不算水文,能不能上首頁。但園子裡還有一千多粉絲,我主要是想通知下面這件事:   +++++++++++++++++++ 這個系列寫得很坎坷

洪強寧從程式設計師到架構師,從架構師到 CTO

在文章開頭,先介紹一位技術專家:洪強寧,愛因互動創始人 &CTO 洪強寧,11 年網際網路從業經驗,商用對話機器人創業中。前豆瓣首席架構師,前宜信大資料創新中心首席架構師,資深 Python 開發者,為中國 Python 使用者組(CPUG)的創立者之

戴文的Linux內核專題03 驅動程序

規模 閃存 目錄 超級計算機 用戶 memory ipa mes 摩托 轉自:http://www.lai18.com/content/432194.html 驅動程序是使內核能夠溝通和操作硬件或協議(規則和標準)的小程序。沒有驅動程序,內核不知道如何與硬件溝通或者處理協