Apache Kafka 12個最佳實踐

banq發表於2022-11-27

Apache Kafka,也被稱為Kafka,是一個企業級的訊息傳遞和流媒體代理系統。Kafka是一項偉大的技術,可用於架構和建立實時資料管道和流媒體應用程式。
我強烈建議架構師們熟悉Kafka生態系統,特別是Kafka叢集、代理、主題、分割槽、消費者、生產者和偏移的概念。

本文將強調我在使用Kafka時學到的12條重要經驗:
  • 為了實現訊息的並行處理,在一個主題中建立多個分割槽。這使得多個消費者能夠平行地處理訊息。在一個消費者組中,每個分割槽只能被一個消費者消費。因此,如果一個消費者組中有多個消費者,他們可以消費不同分割槽的訊息。因此,如果我們想使訊息的消費並行化,就在一個主題中建立多個分割槽。
  • 每條訊息都會傳給訂閱了某個主題/分割槽的每個消費者組,但在一個組內,它只傳給一個消費者。因此,所有訂閱了主題的消費者組都會得到訊息,但在一個消費者組內只有一個消費者會得到一個分割槽的訊息。因此,如果你想把訊息廣播給多個消費者,請給他們分配不同的消費者組。
  • Kafka中訊息大小的預設設定是1MB。訊息在被傳遞到Kafka之前可以被壓縮。為了在一個主題中儲存更多的資料,我們可以在多個伺服器上建立多個分割槽
  • 確保需要釋出或消費的訊息是可序列化的。要特別注意日期時間和巢狀結構。
  • 使用函式 seek(TopicPartition, long) 來指定新的位置。
  • 如果我們在設計一個應用程式時,訊息的順序很重要,我們希望訊息的順序得到保證,那麼在所有的訊息中使用相同的Partition Id。原因是,排序保證適用於分割槽級別。因此,如果你在一個主題中有多個分割槽,你需要確保你被要求出現的訊息有相同的分割槽ID。所有被推送到一個主題的分割槽中的訊息,如果它們有相同的分割槽ID,就會被正確排序。
  • 如果我們想在所有的主題中進行全域性排序,請使用單個分割槽的主題。
  • 保持你的日誌可管理,並定期監測磁碟空間。
  • 為了設計一個持久的系統,確保在Kafka設定中設定一個高複製係數。Kafka會在多個伺服器上覆制每個主題的分割槽的日誌。當一個伺服器發生故障時,這允許自動故障切換到這些副本,因為在故障的情況下,訊息仍然可用。我們可以在每個主題的基礎上設定複製因子。另外,我們可以將生產者的批次大小設定為1。這將確保每條訊息都儲存在磁碟上,而且訊息不會被分批重新整理。這將影響效能。對於持久和高可用的系統,有高主題複製是很重要的。通常情況下,為了實現可靠的故障轉移,建議至少有3個broker伺服器。
  • 如果我們想刪除舊的訊息,可以使用壓縮的主題,當新的事件釋出到主題時,一個鍵的舊事件就會被刪除。
  • 為了保證Kafka的安全,可以使用TLS客戶端證照,對訊息進行加密,並新增使用者許可權。
  • 我們還可以使用Java DSL或Kafka的類似SQL的流語言來建立和處理儲存在Kafka中的資料流。

相關文章