Kafka 的生成者、消費者、broker 的基本概念
kafka是一款基于發布與訂閱的消息系統。它一般被稱為“分布式提交日志”或者“分布式流平臺”。文件系統或者數據庫提交日志用來提供所有事物的持久化記錄,通過重建這些日志可以重建系統的狀態。同樣地,kafka的數據是按照一定順序持久化保存的,可以按需讀取。
1、kafka拓撲結構
2、Kafka的特點
同時為分布和訂閱提供高吞吐量。據了解,Kafka每秒可以生產約25萬條消息(50MB),每秒處理55萬條消息(110MB)這里說條數,可能不上特別準確,因為消息的大小可能不一致;
可進行持久化操作,將消息持久化到到磁盤,以日志的形式存儲,因此可用于批量消費,例如ETL,以及實時應用程序。 通過將數據持久化到硬盤以及replication防止數據丟失。
分布式系統,易于向外拓展。所有的Producer、broker和consumer都會有多個,均為分布式。無需停機即可拓展機器。
消息被處理的狀態是在consumer端維護,而不是由server端維護,當失敗時能自動平衡。
支持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無法得到消息