使用Kafka的12個最佳實踐

聞數起舞 發佈 2022-12-02T22:55:24.699360+00:00

我強烈建議架構師們熟悉Kafka生態系統,特別是Kafka集群、代理、主題、分區、消費者、生產者和偏移的概念。

我在使用Kafka時學到的主要經驗

Apache Kafka,也被稱為Kafka,是一個企業級的消息傳遞和流數據代理系統。Kafka是一項偉大的技術,可用於架構和建立實時數據管道和流媒體應用程式。

我強烈建議架構師們熟悉Kafka生態系統,特別是Kafka集群、代理、主題、分區、消費者、生產者和偏移的概念。

文章宗旨

本文將強調我在使用Kafka時學到的12條重要經驗。

  • 為了實現消息的並行處理,在一個主題中創建多個分區。這使得多個消費者能夠平行地處理消息。在一個消費者組中,每個分區只能被一個消費者消費。因此,如果一個消費者組中有多個消費者,他們可以消費不同分區的消息。因此,如果我們想並行處理消息,在一個主題中創建多個分區。
  • 每條消息都會傳給訂閱了某個主題/分區的每個消費者組,但在一個組內,它只傳給一個消費者。因此,所有訂閱了主題的消費者組都會得到消息,但在一個消費者組內只有一個消費者會得到分區的消息。因此,如果你想把消息廣播給多個消費者,請給他們分配不同的消費者組。
  • Kafka中消息大小的默認設置是1MB。消息在交付給Kafka之前可以進行壓縮。為了在一個主題中存儲更多的數據,我們可以在多個伺服器上創建多個分區
  • 確保需要發布或消費的消息是可序列化的。要特別注意日期時間和嵌套結構。
  • 使用函數 seek(TopicPartition, long) 來指定新的位置。
  • 如果我們在設計一個應用程式時,消息的順序很重要,而且我們希望消息的順序得到保證,那麼在所有的消息中使用相同的分區標識。原因是,順序保證適用於分區層面。因此,如果你在一個主題中有多個分區,你需要確保你被要求出現的消息有相同的分區ID。所有被推送到一個主題的分區中的消息,如果有相同的分區ID,將被正確排序。
  • 如果我們想在所有的主題中進行全局排序,請使用一個單一的分區主題。
  • 保持你的日誌可管理,並定期監測磁碟空間。
  • 為了設計一個持久的系統,確保在Kafka設置中設置一個高複製係數。Kafka會在多個伺服器上 複製每個主題的分區的 日誌。當一個伺服器發生故障時,這允許自動故障轉移到這些副本,因為在故障情況下,消息仍然可用。我們可以在每個主題的基礎上設置複製因子。另外,我們可以把生產者的批次大小設置為1。這將確保每條消息都被保存到磁碟上,而且消息不會被分批刷新。這將影響性能。對於持久和高可用的系統,有高主題複製是很重要的。通常情況下,為了實現可靠的故障轉移,建議至少有3個Broker。
  • 如果我們想刪除較早的信息,可以使用壓縮主題,當較新的事件發布到主題時,同一個鍵的較早的事件就會被刪除。
  • 為了保證Kafka的安全,使用TLS客戶端證書,對消息進行加密,並添加用戶權限。
  • 我們也可以用Java DSL或Kafka的類SQL流語言來創建和處理存儲在Kafka中的數據流。

摘要

這篇文章強調了我在使用Kafka時學到的12條重要經驗。

關鍵字: