Kafka學習(二):Kafka的基本結構和概念
一.Kafka中的核心概念
- Producer: 特指訊息的生產者
- Consumer :特指訊息的消費者
- Consumer Group :消費者組,可以並行消費Topic中partition的訊息
- Broker:快取代理,Kafa 叢集中的一臺或多臺伺服器統稱為 broker。
- Topic:特指 Kafka 處理的訊息源(feeds of messages)的不同分類。
- Partition:Topic 物理上的分組,一個 topic 可以分為多個 partition,每個 partition 是一個有序的佇列。partition 中的每條訊息都會被分配一個有序的 id(offset)
- Message:訊息,是通訊的基本單位,每個 producer 可以向一個 topic(主題)釋出一些訊息
- Producers(是個動詞):訊息和資料生產者,向 Kafka 的一個 topic 釋出訊息的過程叫做 producers
- Consumers(是個動詞):訊息和資料消費者,訂閱 topics 並處理其釋出的訊息的過程叫做 consumers
二.Kafka的邏輯架構
注:
當一個Topic中訊息過多時,會對Topic進行分割槽處理,把訊息分到不同的Partition中。
為什麼要分割槽:
是為了對大量的資料進行分而治之,把資料分割槽,不同的Consumer可以消費不同分割槽的資料,不同Consumer對資料的消費可以做成並行的,這樣可以加快資料處理的速度。訊息傳送的流程:
- Producer根據指定的partition方法(round-robin、hash等),將訊息釋出到指定topic的partition裡面
- kafka叢集接收到Producer發過來的訊息後,將其持久化到硬碟,並保留訊息指定時長(可配置),而不關注訊息是否被消費。
- Consumer從kafka叢集pull資料,並控制獲取訊息的offset
三.Kafka的Producers
1.producers定義: 訊息和資料生產者,向 Kafka 的一個 topic 釋出訊息的過程叫做 produces2.可指定訊息的partition: Producer將訊息釋出到指定的Topic中,同時Producer也能決定將此訊息歸屬於哪個partition
3.非同步傳送:
kafka支援非同步批量傳送訊息。批量傳送可以很有效的提高發送效率。Kafka producer的非同步傳送模式允許進行批量傳送,先將訊息快取在記憶體中,然後一次請求批量傳送出去。
四.Kafka的broker
1.Broker:(可以把Broker理解為Kafka的伺服器)快取代理,Kafka 叢集中的一臺或多臺伺服器統稱為 broker。 注: kafka中支援訊息持久化的,生產者生產訊息後,kafka不會直接把訊息傳遞給消費者,而是先要在broker中進行儲存,持久化是儲存在kafka的日誌檔案中。 2.Message在Broker中通Log追加(即新的訊息儲存在檔案的最後面,是有序的)的方式進行持久化儲存。並進行分割槽(patitions) 3.為了減少磁碟寫入的次數,broker會將訊息暫時buffer起來,當訊息的個數(或尺寸)達到一定閥值時,再flush到磁碟,這樣減少了磁碟IO呼叫的次數。五.Kafka的broker無狀態機制
1. Broker沒有副本機制,一旦broker宕機,該broker的訊息將都不可用。 注:Broker沒有副本,那broker宕機了怎麼解決? 雖然broker沒有副本,但是訊息本身是有副本的,不會丟失。Broker只要在宕機後再讀取訊息的日誌就行了2. Broker不儲存訂閱者的狀態,由訂閱者自己儲存。
3. 無狀態導致訊息的刪除成為難題(可能刪除的訊息正在被訂閱),kafka採用基於時間的SLA(服務水平保證),訊息儲存一定時間(通常為7天)後會被刪除。
4. 訊息訂閱者可以rewind back到任意位置重新進行消費,當訂閱者故障時,可以選擇最小的offset(id,即偏移量)進行重新讀取消費訊息。
注:1.消費者是如何確定,那條訊息應該消費,那條訊息已經消費了?
Zookeeper會幫助記錄那條訊息已經消費了,那條訊息沒有消費 2.消費者是如何快速的找到它沒有消費的訊息呢? 這個實現就要靠kafka中 “稀疏索引”
六.Kafka的Message的組成
1.Message訊息: 是通訊的基本單位,每個 producer 可以向一個 topic(主題)釋出一些訊息2.Kafka中的Message是以topic為基本單位組織的,不同的topic之間是相互獨立的。每個topic又可以分成幾個不同的partition(每個topic有幾個partition是在建立topic時指定的),每個partition儲存一部分Message。
3.partition中的每條Message包含了以下三個屬性:
offset(偏移量,即訊息的唯一標示,通過它才能找到唯一的一條訊息) 對應型別:long
MessageSize對應型別:int32
data 是message的具體內容
注:1.訊息是無狀態的,訊息的消費先後順序是沒有關係的 2.每一個partition只能由一個consumer來進行消費,但是一個consumer是可 以消費多個partition,是一對多的關係
七.Kafka的Partition的分割槽的目的
1.kafka基於檔案儲存.通過分割槽,可以將日誌內容分散到多個server上,來避免檔案尺寸達到單機磁碟的上限,每個partiton都會被當前server(kafka例項)儲存;2.可以將一個topic切分多任意多個partitions,來訊息儲存/消費的效率.
3.越多的partitions意味著可以容納更多的consumer,有效提升併發消費的能力.
八.Kafka的Consumers
相關推薦
Kafka學習(二):Kafka的基本結構和概念
一.Kafka中的核心概念 Producer: 特指訊息的生產者Consumer :特指訊息的消費者Consumer Group :消費者組,可以並行消費Topic中partition的訊息Brok
Kafka學習——二、Kafka 基本概念——訊息、批次、主題、分割槽、borker、消費群組等
Kafka 基本概念 訊息:類似於資料庫的記錄,由位元組陣列組成,訊息裡的資料沒有特別的格式或含義。訊息可以有一個可選的元資料(鍵),主要是當以一種可控的方式寫入不同的分割槽時,需要用到。 批次:用於提高效率,將訊息分批次寫入kafka,批次也就是一組訊息,但這些訊息屬於同一主題
python學習之二:python資料結構和記憶體管理
python資料結構和記憶體管理思維導圖:對於資料結構的學習主要從這幾方面入手:初始化常用操作(增刪該查)常用內建函式,注意點有序序列主要分為字串,列表,和元組,一.有序序列定義:str1=‘python’//字串l1=['python','java','c',100] o
Kafka學習筆記:Kafka環境搭建
Kafka環境搭建 Kafka單機環境搭建 安裝必需 jdk,這裡使用的是jdk1.8 scala,需要獨立安裝scala,這裡使用的是scala 2.11.8 zookeeper,Kafka會自帶zk,但是最好使用獨立的 安裝步驟 1.將Kafka的tar包上傳
Kafka學習筆記:Kafka命令列工具
Kafka命令列工具 啟動Kafka kafka-server-start.sh /opt/software/kafka_2.11-1.1.0/config/server.properties & 檢視所有Topic列表 kafka-topics.sh --z
flutter學習二:dart基本使用
基本 一切都是物件,每個物件都是類的例項(包括null),所有類都繼承自object 指定資料型別和編譯時常量可以提高執行效率 dart沒有作用域,以“_”開頭表示方法或者屬性為私有的 未被初始化的都會被賦值為:null 關鍵字 var:
Kafka學習(一):Kafka背景及架構介紹
冗餘 有些情況下,處理資料的過程會失敗。除非資料被持久化,否則將造成丟失。訊息佇列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丟失風險。許多訊息佇列所採用的"插入-獲取-刪除"正規化中,在把一個訊息從佇列中刪除之前,需要你的處理系統明確的指出該訊息已經被處理完畢,從而確保你的
Kafka 溫故(二):Kafka的基本概念和結構
partition long 先後 導致 topic 創建 -c 標示 文件的 一.Kafka中的核心概念 Producer: 特指消息的生產者Consumer :特指消息的消費者Consumer Group :消費者組,可以並行消費Topic中partition的消息B
kafka學習筆記:知識點整理
一個 eight true med 分組 pos 間接 fig ges 一、為什麽需要消息系統 1.解耦: 允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。 2.冗余: 消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據
WPF學習二:TextBlock和Label的區別
padding eight 前景 繼承 man ont blog led use TextBlock和Label都是用來顯示少量數據的。好多文章對Label存在的描述都是它允許使用"快速獲取"。"快速獲取"就是允許你用Alt加上其它的按鍵快速和UI界面的某個控件交互,比如你
kafka基本架構和概念
kafka一、基本概念1、Topic:特指kafka處理的消息源2、Partition(分區):Topic物理上的分組。一個Topic可以有多個Patition,每個Partition是一個有序的隊列3、Message:消息,通信的基本單位4、Producer:生產者。向kafka的一個topic發布消息的過
hadoop學習筆記(三):hdfs體系結構和讀寫流程(轉)
sim 百萬 服務器 發表 繼續 什麽 lose 基於 一次 原文:https://www.cnblogs.com/codeOfLife/p/5375120.html 目錄 HDFS 是做什麽的 HDFS 從何而來 為什麽選擇 HDFS 存儲數據 HDFS
Kafka(二)Kafka生產者和消費者模型
col ace ont 1.5 kafka fff spa sof oss 消費者模型消費模型有分區消費模型、組消費模型。分區消費模型:可以看到在這種模型下分區和消費者是對應的,為了保證最大效率通常一個分區對應一個消費者。生產者模型Kafka(二)Kafka生產者和消費者模
FFmpeg 結構體學習(二): AVStream 分析
rem hid version tin avd none internal hunk terms 在上文FFmpeg 結構體學習(一): AVFormatContext 分析我們學習了AVFormatContext結構體的相關內容。本文,我們將講述一下AVStream。 A
Docker學習之二:Docker基本簡單操作命令
查詢tomcat映象; docker search tomcat 進入容器 docker exec -it 458(容器ID) /bin/bash 檢視容器完整id docker inspect 14b7 | grep Id 上傳war包到docker docker te
【kafka】二、kafka框架介紹(消費者篇):
本人菜雞,正在努力學習,記錄知識以備後患! 該文章承接上文(kafka系列),暫有兩篇: 【kafka】一、kafka框架介紹(生產者篇):https://blog.csdn.net/lsr40/article/details/84029034 【kafka】二、kafka框架介紹(消費
易學筆記-go語言-第4章:基本結構和基本資料型別/4.4 變數/4.4.3 函式體內最簡單的變數初始化
函式體內最簡單的變數賦值 格式: 變數名 := 值 舉例: var goos string = os.Getenv("GOOS") fmt.Printf("The operating system is: %s\n", goos) //函式體內最
易學筆記-go語言-第4章:基本結構和基本資料型別/4.4 變數/4.4.2 宣告和賦值語句結合
宣告和賦值語句結合 格式:var identifier [type] = value 這裡的type是可選的,具體的型別參照: 第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.8 型別 顯式型別舉例: //整型 var a&nbs
易學筆記-go語言-第4章:基本結構和基本資料型別/4.4 變數/4.4.4 函式體內並行初始化
函式體內並行賦值 在 第4章:基本結構和基本資料型別/4.4 變數/4.4.3 函式體內最簡單的變數賦值基礎上,多個變數同時賦值 舉例: 程式碼: a, b, c := 5, 10, "易學筆記" fmt.Printf("a&n
Kafka 學習——一、Kafka 的安裝和測試
一、Kafka 安裝 1.1 Zookeeper 的安裝 進入需要安裝的目錄 (此處以 /usr/software 為準) tar -zxvf /mnt/hgfs/share-file/zookeeper-3.4.13 sudo vim /etc/profil