1. 程式人生 > >Kafka學習(二):Kafka的基本結構和概念

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的邏輯架構

message

注:

當一個Topic中訊息過多時,會對Topic進行分割槽處理,把訊息分到不同的Partition中。

   為什麼要分割槽:

       是為了對大量的資料進行分而治之,把資料分割槽,不同的Consumer可以消費不同分割槽的資料,不同Consumer對資料的消費可以做成並行的,這樣可以加快資料處理的速度。

訊息傳送的流程:

  1. Producer根據指定的partition方法(round-robin、hash等),將訊息釋出到指定topic的partition裡面
  2. kafka叢集接收到Producer發過來的訊息後,將其持久化到硬碟,並保留訊息指定時長(可配置),而不關注訊息是否被消費。
  3. Consumer從kafka叢集pull資料,並控制獲取訊息的offset

三.Kafka的Producers

1.producers定義:   訊息和資料生產者,向 Kafka 的一個 topic 釋出訊息的過程叫做 produces
2.可指定訊息的partition:    Producer將訊息釋出到指定的Topic中,同時Producer也能決定將此訊息歸屬於哪個partition
(即:生產者可以指定將傳送的訊息放在一個topic中的partition1,還是partition2中)(注:這種機制可以理解為一種變相的負載均衡,輪轉;比如基於"round-robin"方式或者通過其他的一些演算法等()

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學習TextBlockLabel的區別

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

KafkaKafka生產者消費者模型

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

kafkakafka框架介紹(消費者篇)

本人菜雞,正在努力學習,記錄知識以備後患! 該文章承接上文(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