Apache Kafka 12個最佳實踐
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中的資料流。
相關文章
- Apache Kafka最佳化部署的十大最佳實踐ApacheKafka
- Kafka最佳實踐Kafka
- 使用Scala開發Apache Kafka的TOP 20大最佳實踐!ApacheKafka
- Apache Kafka在大型應用中的20項最佳實踐ApacheKafka
- Apache Airflow十條最佳實踐ApacheAI
- 最佳實踐|Apache Pulsar 在拉卡拉的技術實踐Apache
- Google:12 條 Golang 最佳實踐Golang
- springboot+kafka+郵件傳送(最佳實踐)Spring BootKafka
- Apache Kafka的4個混沌工程實驗 | IDCFApacheKafka
- Apache Kafka零複製最佳化原理ApacheKafka
- 最佳實踐|從Producer 到 Consumer,如何有效監控 KafkaKafka
- 5個async/await最佳實踐AI
- 7個API安全最佳實踐API
- WebGPU 的幾個最佳實踐WebGPU
- Apache Kafka 程式設計實戰ApacheKafka程式設計
- Apache Flink 在小米的穩定性最佳化和實踐Apache
- 8個雲成本最佳化的最佳實踐
- 10個Spring Boot效能最佳實踐Spring Boot
- 使用GitHub的十個最佳實踐Github
- [譯]使用者賬戶、授權和密碼管理的 12 個最佳實踐密碼
- 模擬測試生成Apache Kafka負載的最佳工具:KLoadGenApacheKafka負載
- 有效尋源的4個最佳實踐
- 有效的微服務:10 個最佳實踐微服務
- Kubernetes日誌的6個最佳實踐
- Apache Kafka教程--Kafka新手入門ApacheKafka
- Kafka 入門與實踐Kafka
- JavaScript 最佳實踐JavaScript
- JDBC 最佳實踐JDBC
- Java最佳實踐Java
- Serilog 最佳實踐
- Flutter 最佳實踐Flutter
- springDataJpa 最佳實踐Spring
- Gradle最佳實踐Gradle
- MongoDB 最佳實踐MongoDB
- Iptables 最佳實踐 !
- AutoMapper 最佳實踐APP
- 《.NET最佳實踐》
- Django 最佳實踐Django