選單

棄用 Java 8,Apache Kafka 3.0 釋出!

作者 | Java指南者

Apache Kafka 3。0 是一個涉及多方面的大版本,該版本引入了各種新功能、突破性的 API 更改以及對 KRaft 的改進——Apache Kafka 的內建共識機制將取代 Apache ZooKeeper™。

雖然 KRaft 尚未被推薦用於生產(已知差距列表),但我們對 KRaft 元資料和 API 進行了許多改進。Exactly-once 和分割槽重新分配支援值得強調。我們鼓勵您檢視 KRaft 的新功能並在開發環境中試用它。

從 Apache Kafka 3。0 開始,生產者預設啟用最強的交付保證 ( acks=all, enable。idempotence=true)。這意味著使用者現在預設獲得排序和永續性。

此外,不要錯過 Kafka Connect 任務重啟增強、KStreams 基於時間戳同步的改進以及 MirrorMaker2 更靈活的配置選項。

棄用 Java 8,Apache Kafka 3.0 釋出!

常規變化

KIP-750(第一部分):棄用 Kafka 中對 Java 8 的支援

在 3。0 中,Apache Kafka 專案的所有元件都已棄用對 Java 8 的支援。這將使使用者有時間在下一個主要版本 (4。0) 之前進行調整,屆時 Java 8 支援將被取消。

KIP-751(第一部分):棄用 Kafka 中對 Scala 2。12 的支援

對 Scala 2。12 的支援在 Apache Kafka 3。0 中也已棄用。與 Java 8 一樣,我們給使用者時間來適應,因為計劃在下一個主要版本 (4。0) 中刪除對 Scala 2。12 的支援。

Kafka代理、生產者、消費者和管理客戶端

KIP-630:Kafka Raft 快照

我們在 3。0 中引入的一個主要功能是 KRaft 控制器和 KRaft 代理能夠為名為 __cluster_metadata 的元資料主題分割槽生成、複製和載入快照。Kafka 叢集使用此主題來儲存和複製有關叢集的元資料資訊,如代理配置、主題分割槽分配、領導等。隨著此狀態的增長,Kafka Raft Snapshot 提供了一種有效的方式來儲存、載入和複製此資訊。

KIP-746:修改 KRaft 元資料記錄

自第一版 Kafka Raft 控制器以來的經驗和持續開發表明,需要修改一些元資料記錄型別,當 Kafka 被配置為在沒有 ZooKeeper (ZK) 的情況下執行時使用這些記錄型別。

KIP-730:KRaft 模式下的生產者 ID 生成

在 3。0 和KIP-730 中,Kafka 控制器現在完全接管了生成 Kafka 生產者 ID 的責任。控制器在 ZK 和 KRaft 模式下都這樣做。這讓我們更接近橋接版本,這將允許使用者從使用 ZK 的 Kafka 部署過渡到使用 KRaft 的新部署。

KIP-679:Producer 將預設啟用最強的交付保證

從 3。0 開始,Kafka 生產者預設開啟冪等性和所有副本的交付確認。這使得預設情況下記錄交付保證更強。

KIP-735:增加預設消費者會話超時

KIP-709:擴充套件 OffsetFetch 請求以接受多個組 ID

請求 Kafka 消費者組的當前偏移量已經有一段時間了。但是獲取多個消費者組的偏移量需要對每個組進行單獨的請求。在 3。0 和KIP-709 中,fetch 和 AdminClient API 被擴充套件為支援在單個請求/響應中同時讀取多個消費者組的偏移量。

KIP-699:更新 FindCoordinator 以一次解析多個 Coordinator

支援可以以有效方式同時應用於多個消費者組的操作在很大程度上取決於客戶端有效發現這些組的協調者的能力。這透過KIP-699成為可能,它增加了對透過一個請求發現多個組的協調器的支援。Kafka 客戶端已更新為在與支援此請求的新 Kafka 代理交談時使用此最佳化。

KIP-724:刪除對訊息格式 v0 和 v1 的支援

自 2017 年 6 月隨Kafka 0。11。0推出四年以來,訊息格式 v2 一直是預設訊息格式。因此,在橋下流過足夠多的水(或溪流)後,3。0 的主要版本為我們提供了棄用舊訊息格式(即 v0 和 v1)的好機會。這些格式今天很少使用。在 3。0 中,如果使用者將代理配置為使用訊息格式 v0 或 v1,他們將收到警告。此選項將在 Kafka 4。0 中刪除(有關詳細資訊和棄用 v0 和 v1 訊息格式的影響,請參閱KIP-724)。

KIP-707:KafkaFuture 的未來

當KafkaFuture引入該型別以促進 Kafka AdminClient 的實現時,Java 8 之前的版本仍在廣泛使用,並且 Kafka 正式支援 Java 7。快進幾年後,現在 Kafka 執行在支援CompletionStage和CompletableFuture類型別的Java 版本上。使用KIP-707,KafkaFuture添加了一種返回CompletionStage物件的方法,並以KafkaFuture向後相容的方式增強了可用性。

KIP-466:新增對 List 序列化和反序列化的支援

KIP-466為泛型列表的序列化和反序列化添加了新的類和方法——這一特性對 Kafka 客戶端和 Kafka Streams 都非常有用。

KIP-734:改進 AdminClient。listOffsets 以返回時間戳和具有最大時間戳的記錄的偏移量

使用者列出 Kafka 主題/分割槽偏移量的功能已得到擴充套件。使用KIP-734,使用者現在可以要求 AdminClient 返回主題/分割槽中具有最高時間戳的記錄的偏移量和時間戳。(這是不是與什麼的AdminClient收益已經為最新的偏移,這是下一個記錄的偏移,在主題/分割槽寫入混淆。)這個擴充套件現有ListOffsets API允許使用者探測生動活潑的透過詢問哪個是最近寫入的記錄的偏移量以及它的時間戳是什麼來分割槽。

Kafka Connect

KIP-745:連線 API 以重新啟動聯結器和任務

在 Kafka Connect 中,聯結器在執行時表示為一組Connector類例項和一個或多個Task類例項,並且透過 Connect REST API 可用的聯結器上的大多數操作都可以應用於整個組。從一開始,一個值得注意的例外restart是Connector和Task例項的端點。要重新啟動整個聯結器,使用者必須單獨呼叫以重新啟動聯結器例項和任務例項。在 3。0 中,KIP-745使使用者能夠透過一次呼叫重新啟動所有或僅失敗的聯結器Connector和Task例項。此功能是附加功能,restartREST API的先前行為保持不變。

KIP-738:刪除 Connect 的內部轉換器屬性

KIP-722:預設啟用聯結器客戶端覆蓋

KIP-721:在連線Log4j配置中啟用聯結器日誌上下文

另一個在 2。3。0 中引入但到目前為止尚未預設啟用的功能是聯結器日誌上下文。這在 3。0 中發生了變化,聯結器上下文預設新增log4j到 Connect 工作器的日誌模式中。從以前的版本升級到 3。0 將log4j透過在適當的情況下新增聯結器上下文來更改匯出的日誌行的格式。

Kafka Streams

KIP-695:進一步改進 Kafka Streams 時間戳同步

KIP-715:在流中公開提交的偏移量

3。0開始,三個新的方法新增到TaskMetadata介面:committedOffsets,endOffsets,和timeCurrentIdlingStarted。這些方法可以允許 Streams 應用程式跟蹤其任務的進度和執行狀況。

KIP-740:清理公共 API TaskId

KIP-740代表了TaskId該類的重大革新。有幾種方法和所有內部欄位已被棄用,新的subtopology()和partition()干將替換舊topicGroupId和partition欄位(參見KIP-744的相關變化和修正KIP-740)。

KIP-744:遷移TaskMetadata,並ThreadMetadata與內部實現的介面

KIP-744將KIP-740提出的更改更進一步,並將實現與許多類的公共 API 分開。為了實現這一點,引入了新的介面TaskMetadata、ThreadMetadata和StreamsMetadata,而棄用了具有相同名稱的現有類。

KIP-666:新增Instant基於方法到ReadOnlySessionStore

互動式查詢 API 擴充套件了ReadOnlySessionStore和SessionStore介面中的一組新方法,這些方法接受Instant資料型別的引數。此更改將影響需要實現新方法的任何自定義只讀互動式查詢會話儲存實現。

KIP-622:新增currentSystemTimeMs和currentStreamTimeMs到ProcessorContext

該ProcessorContext增加在3。0兩個新的方法,currentSystemTimeMs和currentStreamTimeMs。新方法使使用者能夠分別查詢快取的系統時間和流時間,並且可以在生產和測試程式碼中以統一的方式使用它們。

KIP-743:刪除0。10。0-2。4Streams 內建指標版本配置的配置值

KIP-741:將預設 SerDe 更改為 null

刪除了預設 SerDe 屬性的先前預設值。流過去預設為ByteArraySerde。 用3。0開始,沒有預設,和使用者需要任一組其的SerDes根據需要在API中或透過設定預設DEFAULT_KEY_SERDE_CLASS_CONFIG和DEFAULT_VALUE_SERDE_CLASS_CONFIG在它們的流配置。先前的預設值幾乎總是不適用於實際應用程式,並且造成的混亂多於方便。

KIP-733:更改 Kafka Streams 預設複製因子配置

有了主要版本的機會,Streams 配置屬性的預設值replication。factor會從 1 更改為 -1。這將允許新的 Streams 應用程式使用在 Kafka 代理中定義的預設複製因子,因此在它們轉移到生產時不需要設定此配置值。請注意,新的預設值需要 Kafka Brokers 2。5 或更高版本。

KIP-732:棄用 eos-alpha 並用 eos-v2 替換 eos-beta

在 3。0 中不推薦使用的另一個 Streams 配置值是exactly_once作為屬性的值processing。guarantee。該值exactly_once對應於 Exactly Once Semantics (EOS) 的原始實現,可用於連線到 Kafka 叢集版本 0。11。0 或更高版本的任何 Streams 應用程式。此EOS的第一實現已經透過流第二實施EOS的,這是由值表示取代exactly_once_beta在processing。guarantee性質。展望未來,該名稱exactly_once_beta也已棄用並替換為新名稱exactly_once_v2。在下一個主要版本 (4。0) 中,exactly_once和exactly_once_beta都將被刪除,exactly_once_v2作為 EOS 交付保證的唯一選項。

KIP-725:最佳化 WindowedSerializer 和 WindowedDeserializer 的配置

KIP-633:棄用 Streams 中寬限期的 24 小時預設值

在 Kafka Streams 中,允許視窗操作根據稱為寬限期的配置屬性處理視窗外的記錄。以前,這個配置是可選的,很容易錯過,導致預設為24小時。這是Suppression運營商使用者經常感到困惑的原因,因為它會緩衝記錄直到寬限期結束,因此會增加 24 小時的延遲。在 3。0 中,Windows類透過工廠方法得到增強,這些工廠方法要求它們使用自定義寬限期或根本沒有寬限期來構造。已棄用預設寬限期為 24 小時的舊工廠方法,以及與grace()已設定此配置的新工廠方法不相容的相應API。

KIP-623:internal-topics為流應用程式重置工具新增“ ”選項

透過kafka-streams-application-reset新增新的命令列引數,應用程式重置工具的 Streams 使用變得更加靈活:——internal-topics。 新引數接受逗號分隔的主題名稱列表,這些名稱對應於可以使用此應用程式工具安排刪除的內部主題。將此新引數與現有引數相結合,——dry-run允許使用者在實際執行刪除操作之前確認將刪除哪些主題並在必要時指定它們的子集。

MirrorMaker

KIP-720:棄用 MirrorMaker v1

在 3。0 中,不推薦使用 MirrorMaker 的第一個版本。展望未來,新功能的開發和重大改進將集中在 MirrorMaker 2 (MM2) 上。

KIP-716:允許使用 MirrorMaker2 配置偏移同步主題的位置

在 3。0 中,使用者現在可以配置 MirrorMaker2 建立和儲存用於轉換消費者組偏移量的內部主題的位置。這將允許 MirrorMaker2 的使用者將源 Kafka 叢集維護為嚴格只讀的叢集,並使用不同的 Kafka 叢集來儲存偏移記錄(即目標 Kafka 叢集,甚至是源和目標叢集之外的第三個叢集)。

Apache Kafka 3。0 是 Apache Kafka 專案向前邁出的重要一步。