kafka基本原理重要概念優缺點

2019/2/21 星期四

kafka基本原理重要概念優缺點

官方網址:https://kafka.apache.org/
×××:http://archive.apache.org/dist/kafka/

  1. kafka簡介
    Kafka 是一個分佈式的消息緩存系統,用於日誌處理的分佈式消息隊列。日誌數據容量大,但對可靠性要求不高,其日誌數據主要包括用戶行爲(登錄、瀏覽、點擊、分享、喜歡)以及系統運行日誌(CPU、內存、磁盤、網絡、系統及進程狀態)。當前很多的消息隊列服務提供可靠交付保證,並默認是即時消費(不適合離線)。高可靠交付對日誌不是必須的,故可通過降低可靠性來提高性能,同時通過構建分佈式的集羣,允許消息在系統中累積,使得kafka 同時支持離線和在線日誌處理。Kafka的設計理念之一就是同時提供離線處理和實時處理。根據這一特性,可以使用Storm這種實時流處理系統對消息進行實時在線處理,同時使用Hadoop這種批處理系統進行離線處理,還可以同時將數據實時備份到另一個數據中心,只需要保證這三個操作所使用的Consumer屬於不同的Consumer Group即可。

  2. kafka架構
    1、kafka 集羣中的服務器都叫做broker
    2、kafka 有兩類客戶端,一類叫producer(消息生產者),一類叫做consumer(消息消費者),客戶端和broker 服務器之間採用tcp 協議連接
    3、kafka 中不同業務系統的消息可以通過topic 進行區分,而且每一個消息topic 都會被分區,以分擔消息讀寫的負載
    4、每一個分區都可以有多個副本,以防止數據的丟失
    5、某一個分區中的數據如果需要更新,都必須通過該分區所有副本中的leader 來更新
    6、消費者可以分組(Consumer Group),比如有兩個消費者組A 和B,共同消費一個topic:order_info,A 和B所消費的消息不會重複
    比如order_info 中有100 個消息,每個消息有一個id,編號從0-99,那麼,如果A組消費0-49 號,B 組就消費50-99 號
    //生產環境中也可以讓多個consumer共同消費同一個topic中的數據,需要設置調整 //代碼段可以實現
    7、消費者在具體消費某個topic 中的消息時,可以指定起始偏移量

    Kafka系列視頻教程之Kafka核心基礎 -博彬

  3. 爲什麼使用kafka
    1、作爲緩存
    2、解(系統)耦合
    3、時間小於10ms 基本上是一種實時的

    他能簡化,我們系統的設計,提示公司的開發速度,和效率

  4. 爲何使用消息系統
    解耦
    在項目啓動之初來預測將來項目會碰到什麼需求,是極其困難的。消息系統在處理過程中間插入了一個隱含的、基於數據的接口層,兩邊的處理過程都要實現這一接口。這允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。

冗餘
有些情況下,處理數據的過程會失敗。除非數據被持久化,否則將造成丟失。消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失風險。許多消息隊列所採用的"插入-獲取-刪除"範式中,在把一個消息從隊列中刪除之前,需要你的處理系統明確的指出該消息已經被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。

擴展性
因爲消息隊列解耦了你的處理過程,所以增大消息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。不需要改變代碼、不需要調節參數。擴展就像調大電力按鈕一樣簡單。

靈活性 & 峯值處理能力
在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量並不常見;如果爲以能處理這類峯值訪問爲標準來投入資源隨時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵組件頂住突發的訪問壓力,而不會因爲突發的超負荷的請求而完全崩潰。

可恢復性
系統的一部分組件失效時,不會影響到整個系統。消息隊列降低了進程間的耦合度,所以即使一個處理消息的進程掛掉,加入隊列中的消息仍然可以在系統恢復後被處理。

順序保證
在大多使用場景下,數據處理的順序都很重要。大部分消息隊列本來就是排序的,並且能保證數據會按照特定的順序來處理。Kafka保證一個Partition內的消息的有序性。

緩衝
在任何重要的系統中,都會有需要不同的處理時間的元素。例如,加載一張圖片比應用過濾器花費更少的時間。消息隊列通過一個緩衝層來幫助任務最高效率的執行———寫入隊列的處理會儘可能的快速。該緩衝有助於控制和優化數據流經過系統的速度。

異步通信
很多時候,用戶不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許用戶把一個消息放入隊列,但並不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。

  1. kafka重要概念
    介紹kafka的幾個重要概念
    Broker:消息中間件處理結點,一個Kafka的server節點就是一個broker,多個broker可以組成一個Kafka集羣;
    Topic:一類消息,例如page view日誌、click日誌等都可以以topic的形式存在,Kafka集羣能夠同時負責多個topic的分發;
    Partition:topic物理上的分組,一個topic可以分爲多個partition,每個partition是一個有序的隊;
    Segment:每個partition又由多個segment file組成;
    offset:每個partition都由一系列有序的、不可變的消息組成,這些消息被連續的追加到partition中。partition中的每個消息都有一個連續的序列號叫做offset,用於partition唯一標識一條消息;
    message:這個算是kafka文件中最小的存儲單位,即是 a commit log。

  2. topic:創建topic名稱
    partition:分區編號
    offset:表示該partition已經消費了多少message
    logsize:表示該paritition生產了多少的message
    lag:表示有多少條message未被消費
    owner:表示消費者
    create:表示該partition創建時間
    last seen:表示消費狀態刷新最新時間

kafka的優點:
消息隊列kafka特性 https://blog.csdn.net/qq_36236890/article/details/81174504
1、單機吞吐量:
10萬級別,這是kafka最大的優勢,就是他的吞吐量高,一般配合大數據類的系統來進行實施數據計算,日誌採集等場景
2、topic數據對吞吐量的影響:
topic從幾十個到上百個不等,但是topic越多,會很大程度的影響吞吐量,所以在同等機器下,kafka經量保證topic數量不要過度。如果要支撐大規模的topic的話,需要增加更多的集羣資源。
3、時效性:
延遲控制在ms以內
4、可用性:
非常高,kafka是分佈是的,一個數據多個副本,少數機器的宕機,不會丟數據,不會導致不可用
5、消息可靠性
經過參數優化配置,消息可以做到0丟失
6、功能支持
功能較爲簡單,主要支持簡單的MQ功能,在大數據領域的實時計算以及日誌採集被大規模使用,是事實上的標準
7、優劣勢總結
kafka的特點其實很明顯,就是僅僅提供較少的核心功能,但是提供較高的吞吐量,ms級別的延遲,較高的可用性以及可靠性,而且是分佈式的,可以任意的擴展,同時kafka也是做好的是支撐少量的topic數量即可,保證其吞吐量,而且kafka唯一的一點劣勢就是可能出現就消息的重複消費,那麼對數據準確性會產生影響,在大數據領域中以及日誌收集中,這點輕微可以忽略。
kafka的特性就是天然適合大數據實時計算以及日誌的收集。

Kafka天生就是一個分佈式的消息隊列,它可以由多個broker組成,每個broker是一個節點;你創建一個topic,這個topic可以劃分爲多個partition,每個partition可以存在於不同的broker上,每個partition就放一部分數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章