Kafka 的生成者、消費(fèi)者、broker 的基本概念
kafka是一款基于發(fā)布與訂閱的消息系統(tǒng)。它一般被稱為“分布式提交日志”或者“分布式流平臺(tái)”。文件系統(tǒng)或者數(shù)據(jù)庫提交日志用來提供所有事物的持久化記錄,通過重建這些日志可以重建系統(tǒng)的狀態(tài)。同樣地,kafka的數(shù)據(jù)是按照一定順序持久化保存的,可以按需讀取。
1、kafka拓?fù)浣Y(jié)構(gòu)
2、Kafka的特點(diǎn)
同時(shí)為分布和訂閱提供高吞吐量。據(jù)了解,Kafka每秒可以生產(chǎn)約25萬條消息(50MB),每秒處理55萬條消息(110MB)這里說條數(shù),可能不上特別準(zhǔn)確,因?yàn)橄⒌拇笮】赡懿灰恢拢?/p>
可進(jìn)行持久化操作,將消息持久化到到磁盤,以日志的形式存儲(chǔ),因此可用于批量消費(fèi),例如ETL,以及實(shí)時(shí)應(yīng)用程序。 通過將數(shù)據(jù)持久化到硬盤以及replication防止數(shù)據(jù)丟失。
分布式系統(tǒng),易于向外拓展。所有的Producer、broker和consumer都會(huì)有多個(gè),均為分布式。無需停機(jī)即可拓展機(jī)器。
消息被處理的狀態(tài)是在consumer端維護(hù),而不是由server端維護(hù),當(dāng)失敗時(shí)能自動(dòng)平衡。
支持Online和offline的場(chǎng)景。
3、Kafka的核心概念
名詞 解釋
Producer 消息的生成者
Consumer 消息的消費(fèi)者
ConsumerGroup 消費(fèi)者組,可以并行消費(fèi)Topic中的partition的消息
Broker 緩存代理,Kafka集群中的一臺(tái)或多臺(tái)服務(wù)器統(tǒng)稱broker.
Topic Kafka處理資源的消息源(feeds of messages)的不同分類
Partition Topic物理上的分組,一個(gè)topic可以分為多個(gè)partion,每個(gè)partion是一個(gè)有序的隊(duì)列。partion中每條消息都會(huì)被分 配一個(gè) 有序的Id(offset)
Message 消息,是通信的基本單位,每個(gè)producer可以向一個(gè)topic(主題)發(fā)布一些消息
Producers 消息和數(shù)據(jù)生成者,向Kafka的一個(gè)topic發(fā)布消息的 過程叫做producers
Consumers 消息和數(shù)據(jù)的消費(fèi)者,訂閱topic并處理其發(fā)布的消費(fèi)過程叫做consumers
3.1 Producers的概念
消息和數(shù)據(jù)生成者,向Kafka的一個(gè)topic發(fā)布消息的過程叫做producers
Producer將消息發(fā)布到指定的Topic中,同時(shí)Producer也能決定將此消息歸屬于哪個(gè)partition;比如基于round-robin方式 或者通過其他的一些算法等;
異步發(fā)送批量發(fā)送可以很有效的提高發(fā)送效率。kafka producer的異步發(fā)送模式允許進(jìn)行批量發(fā)送,先將消息緩存到內(nèi)存中,然后一次請(qǐng)求批量發(fā)送出去。
3.2 broker的概念:
Broker沒有副本機(jī)制,一旦broker宕機(jī),該broker的消息將都不可用。
Broker不保存訂閱者的狀態(tài),由訂閱者自己保存。
無狀態(tài)導(dǎo)致消息的刪除成為難題(可能刪除的消息正在被訂閱),Kafka采用基于時(shí)間的SLA(服務(wù)保證),消息保存一定時(shí)間(通常7天)后會(huì)刪除。
消費(fèi)訂閱者可以rewind back到任意位置重新進(jìn)行消費(fèi),當(dāng)訂閱者故障時(shí),可以選擇最小的offset(id)進(jìn)行重新讀取消費(fèi)消息
3.3 Message組成
Message消息:是通信的基本單位,每個(gè)producer可以向一個(gè)topic發(fā)布消息。
Kafka中的Message是以topic為基本單位組織的,不同的topic之間是相互獨(dú)立的,每個(gè)topic又可以分成不同的partition每個(gè)partition儲(chǔ)存一部分
partion中的每條Message包含以下三個(gè)屬性:
offset long
MessageSize int32
data messages的具體內(nèi)容
3.4 Consumers的概念
消息和數(shù)據(jù)消費(fèi)者,訂閱topic并處理其發(fā)布的消息的過程叫做consumers. 在kafka中,我們可以認(rèn)為一個(gè)group是一個(gè)“訂閱者”,一個(gè)topic中的每個(gè)partions只會(huì)被一個(gè)“訂閱者”中的一個(gè)consumer 消費(fèi),不過一個(gè)consumer可以消費(fèi)多個(gè)partitions中的消息 注: Kafka的設(shè)計(jì)原理決定,對(duì)于一個(gè)topic,同一個(gè)group不能多于partition個(gè)數(shù)的consumer同時(shí)消費(fèi),否則將意味著某些 consumer無法得到消息