對於任何一個訊息引擎而言,吞吐量都是至關重要的效能指標。那麼何為吞吐量呢?通常來說,吞吐量是某種處理能力的最大值。而對於Kafka而言,它的吞吐量就是每秒能夠處理的訊息數或者每秒能夠處理的位元組數。很顯然,我們自然希望訊息引擎的吞吐量越大越好。
訊息引擎系統還有一個名為延時的效能指標。它衡量的是一段時間間隔,可能是發出某個操作與接收到操作響應(response)之間的時間,或者是在系統中導致某些物理變更的起始時刻與變更正式生效時刻之間的間隔。對於Kafka而言,延時可以表示客戶端發起請求與伺服器處理請求併發送響應給客戶端之間的這一段時間。顯而易見,延時間隔越短越好。
在實際使用場景中,這兩個指標通常是一對矛盾體,即調優其中一個指標通常會使另一個指標變差。在採取一定延時的同時採用批處理的思想,即一小批一小批(micro-batch)地傳送,則會大大提升吞吐量。
Kafka是如何做到高吞吐量、低延時的呢?首先,Kafka的寫入操作是很快的,這主要得益於它對磁碟的使用方法的不同。雖然Kafka會持久化所有資料到磁碟,但本質上每次寫入操作其實都只是把資料寫入到作業系統的頁快取(page cache)中,然後由作業系統自行決定什麼時候把頁快取中的資料寫回磁碟上。這樣的設計有3個主要優勢。
對於任何一個訊息引擎而言,吞吐量都是至關重要的效能指標。那麼何為吞吐量呢?通常來說,吞吐量是某種處理能力的最大值。而對於Kafka而言,它的吞吐量就是每秒能夠處理的訊息數或者每秒能夠處理的位元組數。很顯然,我們自然希望訊息引擎的吞吐量越大越好。
訊息引擎系統還有一個名為延時的效能指標。它衡量的是一段時間間隔,可能是發出某個操作與接收到操作響應(response)之間的時間,或者是在系統中導致某些物理變更的起始時刻與變更正式生效時刻之間的間隔。對於Kafka而言,延時可以表示客戶端發起請求與伺服器處理請求併發送響應給客戶端之間的這一段時間。顯而易見,延時間隔越短越好。
在實際使用場景中,這兩個指標通常是一對矛盾體,即調優其中一個指標通常會使另一個指標變差。在採取一定延時的同時採用批處理的思想,即一小批一小批(micro-batch)地傳送,則會大大提升吞吐量。
Kafka是如何做到高吞吐量、低延時的呢?首先,Kafka的寫入操作是很快的,這主要得益於它對磁碟的使用方法的不同。雖然Kafka會持久化所有資料到磁碟,但本質上每次寫入操作其實都只是把資料寫入到作業系統的頁快取(page cache)中,然後由作業系統自行決定什麼時候把頁快取中的資料寫回磁碟上。這樣的設計有3個主要優勢。