- kafka是一款基于釋出與訂閱的消息系統。它一般被稱為“分布式送出日志”或者“分布式流平台”。
- 檔案系統或者資料庫送出日志用來提供所有事物的持久化記錄,通過重建這些日志可以重建系統的狀态。同樣地,kafka的資料是按照一定順序持久化儲存的,可以按需讀取。
- kafka拓撲結構
- 2、Kafka的特點
- 2.1同時為分布和訂閱提供高吞吐量。據了解,Kafka每秒可以生産約25萬條消息(50MB),每秒處理55萬條消息(110MB)這裡說條數,可能不上特别準确,因為消息的大小可能不一緻;
- 2.2可進行持久化操作,将消息持久化到到磁盤,以日志的形式存儲,是以可用于批量消費,例如ETL,以及實時應用程式。 通過将資料持久化到硬碟以及replication防止資料丢失。
- 2.3 分布式系統,易于向外拓展。所有的Producer、broker和consumer都會有多個,均為分布式。無需停機即可拓展機器。
- 2.4 消息被處理的狀态是在consumer端維護,而不是由server端維護,當失敗時能自動平衡。
- 2.5 支援Online和offline的場景。
- 3、Kafka的核心概念
Producer | 消息的生成者 |
---|---|
-Consumer- | -消息的消費者- |
-ConsumerGroup- | -消費者組,可以并行消費Topic中的partition的消息- |
-Broker- | -緩存代理,Kafka叢集中的一台或多台伺服器統稱broker.- |
-Topic- | -Kafka處理資源的消息源(feeds of messages)的不同分類- |
-Partition- | -Topic實體上的分組,一個topic可以分為多個partion,每個partion是一個有序的隊列。partion中每條消息都會被分 配一個 有序的Id(offset)- |
-Message- | -消息,是通信的基本機關,每個producer可以向一個topic(主題)釋出一些消息- |
-Producers- | -消息和資料生成者,向Kafka的一個topic釋出消息的 過程叫做producers- |
-Consumers- | -消息和資料的消費者,訂閱topic并處理其釋出的消費過程叫做consumers- |
- 3.1 Producers的概念
- 消息和資料生成者,向Kafka的一個topic釋出消息的過程叫做producers
- Producer将消息釋出到指定的Topic中,同時Producer也能決定将此消息歸屬于哪個partition;比如基于round-robin方式 或者通過其他的一些算法等;
- 異步發送批量發送可以很有效的提高發送效率。kafka producer的異步發送模式允許進行批量發送,先将消息緩存到記憶體中,然後一次請求批量發送出去。
- 3.2 broker的概念:
- Broker沒有副本機制,一旦broker當機,該broker的消息将都不可用。
- Broker不儲存訂閱者的狀态,由訂閱者自己儲存。
- 無狀态導緻消息的删除成為難題(可能删除的消息正在被訂閱),Kafka采用基于時間的SLA(服務保證),消息儲存一定時間(通常7天)後會删除。
- 消費訂閱者可以rewind back到任意位置重新進行消費,當訂閱者故障時,可以選擇最小的offset(id)進行重新讀取消費消息
- 3.3 Message組成
- Message消息:是通信的基本機關,每個producer可以向一個topic釋出消息。
- Kafka中的Message是以topic為基本機關組織的,不同的topic之間是互相獨立的,每個topic又可以分成不同的partition每個partition儲存一部分
- partion中的每條Message包含以下三個屬性:
offset | long |
---|---|
MessageSize | int32 |
data | messages的具體内容 |
- 3.4 Consumers的概念
- 消息和資料消費者,訂閱topic并處理其釋出的消息的過程叫做consumers.
-
在kafka中,我們可以認為一個group是一個“訂閱者”,一個topic中的每個partions隻會被一個“訂閱者”中的一個consumer
消費,不過一個consumer可以消費多個partitions中的消息
- Kafka的設計原理決定,對于一個topic,同一個group不能多于partition個數的consumer同時消費,否則将意味着某些 consumer無法得到消息