kafka詳解一、Kafka簡介
問題導讀
1.Kafka有何特性?
2.Kafka有哪些元件?
背景:
當今社會各種應用系統諸如商業、社交、搜尋、瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰:
以上幾個挑戰形成了一個業務需求模型,即生產者生產(produce)各種資訊,消費者消費(consume)(處理分析)這些資訊,而在生產者與消費者之間,需要一個溝通兩者的橋樑-訊息系統。
從一個微觀層面來說,這種需求也可理解為不同的系統之間如何傳遞訊息。
Kafka誕生:由 linked-in 開源
kafka-即是解決這類問題的一個框架,它實現了生產者和消費者之間的無縫連線。
kafka-高產出的分散式訊息系統(A high-throughput distributed messaging system)
Kafka特性:它形容自己的設計是獨一無二的,先看一下它有如何過人之處:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(2).png
Kafka的元件:
如下圖所示,Producer生產的訊息通過網路傳送給Kafka cluster,而Consumer從其中消費訊息
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(3).png
Topic 和Partition:
訊息傳送時都被髮送到一個topic,其本質就是一個目錄,而topic由是由一些Partition Logs(分割槽日誌)組成,其組織結構如下圖所示:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image.png
我們可以看到,每個Partition中的訊息都是有序的,生產的訊息被不斷追加到Partition log上,其中的每一個訊息都被賦予了一個唯一的offset值。
Kafka叢集會儲存所有的訊息,不管訊息有沒有被消費;我們可以設定訊息的過期時間,只有過期的資料才會被自動清除以釋放磁碟空間。比如我們設定訊息過期時間為2天,那麼這2天內的所有訊息都會被儲存到叢集中,資料只有超過了兩天才會被清除。
Kafka需要維持的後設資料只有一個--消費訊息在Partition中的offset值,Consumer每消費一個訊息,offset就會加1。其實訊息的狀態完全是由Consumer控制的,Consumer可以跟蹤和重設這個offset值,這樣的話Consumer就可以讀取任意位置的訊息。
把訊息日誌以Partition的形式存放有多重考慮,第一,方便在叢集中擴充套件,每個Partition可以通過調整以適應它所在的機器,而一個topic又可以有多個Partition組成,因此整個叢集就可以適應任意大小的資料了;第二就是可以提高併發,因為可以以Partition為單位讀寫了。
分散式:
這些Partitions分佈在叢集的每一臺server上,而每一個Partition在叢集中都可以有多個備份,這個備份數量是可配置的。
每個Partition都有一個leader server,而其他備份的server都稱為followers,只有leader伺服器才會處理這個Partition上所有的讀寫請求,而其它followers則被動的複製leader上的資料。如果一個leader掛掉了,followers中的一個伺服器則會自動升級為leader。因此,其實叢集中的每個伺服器都扮演著一個Partition的leader伺服器,和其它Partition的follower伺服器。
Producers:
Producer可以根據自己的選擇釋出訊息到一個主題,Producer也可以自己決定把訊息釋出到這個主題的哪個Partition,當然我們可以選擇API提供的簡單的分割槽選擇演算法,也可以自己去實現一個分割槽選擇演算法。
Consumers:
訊息傳遞通常由兩種模式,queuing(佇列)和publish-subscribe (釋出-訂閱)
Kafka通過提供了一個對Consumer的抽象來同時實現這兩種模式-ConsumerGroup。Consumer例項需要給自己指定一個ConsumerGroup的名字,如果所有的例項都用同一個ConsumerGroup名字,那麼這些Consumer就會以queuing的模式工作;如果所有的例項分別用的不同的ConsumerGroup名字,那麼它們就以public-subscribe模式工作。
如下圖所示:含兩臺server的叢集一共有p0~p3四個Partition,兩個Consumer Group,在Group內部是以queuing的模式消費Partition,在Group之間是以pub-scrib模式消費。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(1).png
訊息順序性:
1.Kafka有何特性?
2.Kafka有哪些元件?
背景:
當今社會各種應用系統諸如商業、社交、搜尋、瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰:
- 如何收集這些巨大的資訊
- 如何分析它
-
如何及時做到如上兩點
以上幾個挑戰形成了一個業務需求模型,即生產者生產(produce)各種資訊,消費者消費(consume)(處理分析)這些資訊,而在生產者與消費者之間,需要一個溝通兩者的橋樑-訊息系統。
從一個微觀層面來說,這種需求也可理解為不同的系統之間如何傳遞訊息。
Kafka誕生:由 linked-in 開源
kafka-即是解決這類問題的一個框架,它實現了生產者和消費者之間的無縫連線。
kafka-高產出的分散式訊息系統(A high-throughput distributed messaging system)
Kafka特性:它形容自己的設計是獨一無二的,先看一下它有如何過人之處:
- 快:單個kafka服務每秒可處理數以千計客戶端發來的幾百MB資料。
- 可擴充套件性:一個單一叢集可作為一個大資料處理中樞,集中處理各種型別業務
- 持久化:訊息被持久化到磁碟(可處理TB資料級別資料但仍保持極高資料處理效率),並且有備份容錯機制
- 分散式:著眼於大資料領域,支援分散式,叢集可處理每秒百萬級別訊息
-
實時性:生產出的訊息可立即被消費者消費
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(2).png
Kafka的元件:
- topic:訊息存放的目錄即主題
- Producer:生產訊息到topic的一方
- Consumer:訂閱topic消費訊息的一方
-
Broker:Kafka的服務例項就是一個broker
如下圖所示,Producer生產的訊息通過網路傳送給Kafka cluster,而Consumer從其中消費訊息
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(3).png
Topic 和Partition:
訊息傳送時都被髮送到一個topic,其本質就是一個目錄,而topic由是由一些Partition Logs(分割槽日誌)組成,其組織結構如下圖所示:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image.png
我們可以看到,每個Partition中的訊息都是有序的,生產的訊息被不斷追加到Partition log上,其中的每一個訊息都被賦予了一個唯一的offset值。
Kafka叢集會儲存所有的訊息,不管訊息有沒有被消費;我們可以設定訊息的過期時間,只有過期的資料才會被自動清除以釋放磁碟空間。比如我們設定訊息過期時間為2天,那麼這2天內的所有訊息都會被儲存到叢集中,資料只有超過了兩天才會被清除。
Kafka需要維持的後設資料只有一個--消費訊息在Partition中的offset值,Consumer每消費一個訊息,offset就會加1。其實訊息的狀態完全是由Consumer控制的,Consumer可以跟蹤和重設這個offset值,這樣的話Consumer就可以讀取任意位置的訊息。
把訊息日誌以Partition的形式存放有多重考慮,第一,方便在叢集中擴充套件,每個Partition可以通過調整以適應它所在的機器,而一個topic又可以有多個Partition組成,因此整個叢集就可以適應任意大小的資料了;第二就是可以提高併發,因為可以以Partition為單位讀寫了。
分散式:
這些Partitions分佈在叢集的每一臺server上,而每一個Partition在叢集中都可以有多個備份,這個備份數量是可配置的。
每個Partition都有一個leader server,而其他備份的server都稱為followers,只有leader伺服器才會處理這個Partition上所有的讀寫請求,而其它followers則被動的複製leader上的資料。如果一個leader掛掉了,followers中的一個伺服器則會自動升級為leader。因此,其實叢集中的每個伺服器都扮演著一個Partition的leader伺服器,和其它Partition的follower伺服器。
Producers:
Producer可以根據自己的選擇釋出訊息到一個主題,Producer也可以自己決定把訊息釋出到這個主題的哪個Partition,當然我們可以選擇API提供的簡單的分割槽選擇演算法,也可以自己去實現一個分割槽選擇演算法。
Consumers:
訊息傳遞通常由兩種模式,queuing(佇列)和publish-subscribe (釋出-訂閱)
- queuing:每個Consumer從訊息佇列中取走一個訊息
-
pub-scrib:訊息被廣播到每個Consumer
Kafka通過提供了一個對Consumer的抽象來同時實現這兩種模式-ConsumerGroup。Consumer例項需要給自己指定一個ConsumerGroup的名字,如果所有的例項都用同一個ConsumerGroup名字,那麼這些Consumer就會以queuing的模式工作;如果所有的例項分別用的不同的ConsumerGroup名字,那麼它們就以public-subscribe模式工作。
如下圖所示:含兩臺server的叢集一共有p0~p3四個Partition,兩個Consumer Group,在Group內部是以queuing的模式消費Partition,在Group之間是以pub-scrib模式消費。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/enhtmlclip/Image(1).png
訊息順序性:
Kafka是如何確保訊息消費的順序性的呢?前面講到過Partition,訊息在一個Partition中的順序是有序的,但是Kafka只保證訊息在一個Partition中有序,如果要想使整個topic中的訊息有序,那麼一個topic僅設定一個Partition即可。
轉載: http://www.aboutyun.com/thread-11113-1-1.html
相關文章
- kafka之一:kafka簡介Kafka
- kafka 簡介Kafka
- Kafka簡介Kafka
- 一、kafka 介紹 && kafka-clientKafkaclient
- Kafka詳細介紹Kafka
- Kafka 簡介 & 整合 SpringBootKafkaSpring Boot
- Apache-Kafka簡介ApacheKafka
- 詳解Kafka ProducerKafka
- 一文詳解Kafka APIKafkaAPI
- Kafka核心元件詳解Kafka元件
- kafka核心架構詳解Kafka架構
- Kafka實戰寶典:Kafka的控制器controller詳解KafkaController
- 事件流處理 (ESP) 與 Kafka 簡介事件Kafka
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- Strimzi Kafka Bridge(橋接)實戰之一:簡介和部署Kafka橋接
- Azkarra Streams簡介:Apache Kafka Streams的第一個微框架ApacheKafka框架
- Kafka流處理內幕詳解Kafka
- 詳細解析kafka之kafka分割槽和副本Kafka
- spring-kafka中ContainerProperties.AckMode詳解SpringKafkaAI
- kafka的原理及叢集部署詳解Kafka
- Kafka簡單入門Kafka
- Kafka應用實戰——Kafka安裝及簡單使用Kafka
- kafka報錯解決 kafka.errors.NoBrokersAvailable: NoBrokersAvailableKafkaErrorAI
- Logstash讀取Kafka資料寫入HDFS詳解Kafka
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 【轉】kafka-檔案儲存機制詳解Kafka
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- KAFKA介紹(分散式架構)Kafka分散式架構
- Kafka中的segment的介紹Kafka
- kafka-ngx_kafka_moduleKafka
- kafka程式碼解讀Kafka
- Kafka 學習筆記(一) :為什麼需要 Kafka?Kafka筆記
- Kafka學習筆記(一) :為什麼需要Kafka?Kafka筆記
- Kafka從入門到放棄(一) —— 初識KafkaKafka
- 超詳細kafka教程來啦Kafka
- Kafka簡介、基本原理、執行流程與使用場景Kafka
- Sentry 監控 - Snuba 資料中臺架構簡介(Kafka+Clickhouse)架構Kafka
- Spring Boot 基於 SCRAM 認證整合 Kafka 的詳解Spring BootKafka
- Kafka 架構和原理機制 (圖文全面詳解)Kafka架構