1. 程式人生 > >重磅:Kafka 迎來 1.0.0 版本,正式告別四位數版本號!

重磅:Kafka 迎來 1.0.0 版本,正式告別四位數版本號!

Kafka 從首次釋出之日起,已經走過了七個年頭。從最開始的大規模訊息系統,發展成為功能完善的分散式流式處理平臺,用於釋出和訂閱、儲存及實時地處理大規模流資料。來自世界各地的數千家公司在使用 Kafka,包括三分之一的 500 強公司。Kafka 以穩健的步伐向前邁進,首先加入了複製功能和無邊界的鍵值資料儲存,接著推出了用於整合外部儲存系統的 Connect API,後又推出了為實時應用和事件驅動應用提供原生流式處理能力的 Streams API,並於今年春季開始支援僅一次處理語義。如此廣泛的應用和完備的功能以及如此悠久的歷史,無一不在說明 Kafka 已經成為一款穩定的企業級產品。而更為激動人心的是,Kafka 現在正式迎來了 1.0.0 版本!

Kafka 1.0.0 釋出的主要內容如下:

  • 0.10.0 版本里開始引入的 Streams API 在 1.0.0 版本里繼續演進,改進了 builder API(KIP-120),新增了用於檢視執行時活躍任務的 API(KIP-130)和用於聚合分割槽的 cogroup API(KIP-150)。增強的 print() 和 writeAsText() 方法讓除錯變得更容易(KIP-160)。其他更多資訊可以參考 Streams 文件。

  • 改進了 Connect 的度量指標(KIP-196),新增了大量用於健康監測的度量指標(KIP-188),並提供了叢集的 GloabalTopicCount 和 GlobalPartitionCount 度量指標(KIP-168)。

  • 支援 Java 9,實現更快的 TLS 和 CRC32C,加快了加密速度,降低了計算開銷。

  • 調整了 SASL 認證模組的錯誤處理邏輯(KIP-152),原先的認證錯誤資訊現在被清晰地記錄到日誌當中。

  • 更好地支援磁碟容錯(KIP-112),更優雅地處理磁碟錯誤,單個 JBOD 上的磁碟錯誤不會導致整個叢集崩潰。

  • 0.11.0 版本中引入的冪等性生產者需要將 max.in.flight.requests.per.connection 引數設定為 1,這對吞吐量造成了一定的限制。而在 1.0.0 版本里,這個引數最大可以被設定為 5(KAFKA-5949),極大提升了吞吐量範圍。

關於新版本更多的變化可以檢視釋出說明:

https://dist.apache.org/repos/dist/release/kafka/1.0.0/RELEASE_NOTES.html

下載原始碼:

https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.0/kafka-1.0.0-src.tgz

二進位制包

Scala 2.11:

https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.0/kafka_2.11-1.0.0.tgz

Scala 2.12:

https://www.apache.org/dyn/closer.cgi?path=/kafka/1.0.0/kafka_2.12-1.0.0.tgz

正值 Kafka 1.0.0 正式版本釋出之際,我們梳理了一下公眾號上已釋出的 Kafka 技術乾貨,並選出了部分精華文章,希望能幫助大家溫故而知新。

崛起的 Kafka

Kafka 起初是由 LinkedIn 公司開發的一個分散式的訊息系統,後成為 Apache 的一部分,它使用 Scala 編寫,以可水平擴充套件和高吞吐率而被廣泛使用。目前越來越多的開源分散式處理系統如 Cloudera、Apache Storm、Spark 等都支援與 Kafka 整合。

隨著微服務的流行,很多公司都在嘗試將現有的系統進行架構升級。促成 Movio 公司架構改造的一項關鍵技術就是 Kafka 訊息佇列。

Kafka 作為分散式訊息佇列,在可靠性和可擴充套件性方面有非常大的優勢。它不僅成為了 Movio 公司基礎架構的關鍵組成部分,還為正在建立的系統架構提供了依據。

本文譯自 Braedon Vickers 釋出在 Movio 上的一篇文章,詳盡地探討了在微服務架構升級的過程中,如何使用 Kafka 將微服務之間的耦合降到最低,同時能讓整個系統在保證高可用的前提下做到高可擴充套件。

Kafka 全面解析

Kafka 資料可靠性深度解讀

Kafka 作為一個商業級訊息中介軟體,訊息可靠性的重要性可想而知。如何確保訊息的精確傳輸?如何確保訊息的準確儲存?如何確保訊息的正確消費?這些都是需要考慮的問題。

唯品會訊息中介軟體團隊首先從 Kafka 的架構著手,解釋了 Kafka 的基本原理,然後通過對 kakfa 的儲存機制、複製原理、同步原理、可靠性和永續性保證等等一步步對其可靠性進行分析,最後通過 benchmark 來增強對 Kafka 高可靠性的認知。

Kafka Stream 設計詳解

本文介紹了 Kafka Stream 的背景,如 Kafka Stream 是什麼,什麼是流式計算,以及為什麼要有 Kafka Stream。接著介紹了 Kafka Stream 的整體架構、並行模型、狀態儲存以及主要的兩種資料集 KStream 和 KTable。然後分析了 Kafka Stream 如何解決流式系統中的關鍵問題,如時間定義、視窗操作、Join 操作、聚合操作,以及如何處理亂序和提供容錯能力。最後結合示例講解了如何使用 Kafka Stream。

Kafka 不只是個訊息系統

Confluent 聯合創始人兼 CEO Jay Kreps 發表了一篇博文,指出了 Kafka 的真正定位——它不只是個訊息系統,它還是個儲存系統,而它的終極目標是要讓流式處理成為現代企業的主流開發正規化。

人們更多的是把 Kafka 當成了訊息佇列系統。訊息佇列有一些不成文的規則,比如“不要在訊息佇列裡儲存訊息”。傳統的訊息系統在設計上存在很多不足。從根本上講,任何一個非同步訊息系統都會儲存訊息,只是時間很短,有時候只有幾秒鐘,直到訊息被消費為止。

實際上,Kafka 並非傳統意義上的訊息佇列,它與 RabbitMQ 等訊息系統並不一樣。它更像是一個分散式的檔案系統或資料庫。Kafka 與傳統訊息系統之間有三個關鍵區別。

  • Kafka 持久化日誌,這些日誌可以被重複讀取和無限期保留

  • Kafka 是一個分散式系統:它以叢集的方式執行,可以靈活伸縮,在內部通過複製資料提升容錯能力和高可用性

  • Kafka 支援實時的流式處理

以上三點足以將 Kafka 與傳統的訊息佇列區別開,我們甚至可以把它看成是流式處理平臺。因此,在 Kafka 裡儲存資料並不是什麼瘋狂事,甚至可以說 Kafka 本來就是設計用來儲存資料的。資料經過校驗後被持久化在磁碟上,並通過複製副本提升容錯能力。再多的資料都不會拖慢 Kafka,在生產環境中,有些 Kafka 叢集甚至已經儲存超過 1 TB 的資料。

猜你喜歡

歡迎關注本公眾號:iteblog_hadoop:

0、回覆 電子書獲取 本站所有可下載的電子書

11、更多大資料文章歡迎訪問https://www.iteblog.com及本公眾號(iteblog_hadoop)12、Flink中文文件:http://flink.iteblog.com
640?wx_fmt=jpeg