Apache Kafka 3.0.0 稳定版发布,有哪些值得关心的变化?
Apache Kafka 3.0 于2021年9月21日正式發布。本文將介紹這個版本的新功能。以下文章翻譯自 《What's New in Apache Kafka 3.0.0》。
我很高興地代表 Apache Kafka? 社區宣布 Apache Kafka 3.0 的發布。Apache Kafka 3.0 是一個大版本,其引入了各種新功能、API 發生重大變化以及對 KRaft 的改進—— Apache Kafka 的內置共識機制將取代 Apache ZooKeeper?。
雖然 KRaft 還不推薦在生產中使用,但我們對 KRaft 元數據和 API 進行了許多改進。支持 Exactly-once 和分區重分配值得強調。我們推薦您查看 KRaft 的新功能并在開發環境中試用它。
從 Apache Kafka 3.0 開始,Producer 默認啟用最強的交付保證(acks=all,enable.idempotence=true)。這意味著默認情況下消息將有序并且持久性。
此外,不要錯過 Kafka Connect 任務重啟增強、Kafka Streams 基于時間戳同步的改進以及 MirrorMaker2 更靈活的配置選項。
要完整的特性和功能增強,可以到 release notes 里面了解。您還可以觀看發布視頻,了解 Apache Kafka 3.0.0 中新增功能的簡要介紹。
普通變化
KIP-750 (Part I): Deprecate support for Java 8 in Kafka?
Apache Kafka 項目的所有組件在 3.0 中都將 Java 8 標記為 deprecated。這給用戶足夠的時間在下一個主要版本(4.0)之前進行調整,那時候 4.0 將不再支持 Java 8。
KIP-751 (Part I): Deprecate support for Scala 2.12 in Kafka
Apache Kafka 項目的所有組件在 3.0 中都將 Scala 2.12 標記為 deprecated。這給用戶足夠的時間在下一個主要版本(4.0)之前進行調整,那時候 4.0 將不再支持 Scala 2.12。
Kafka Broker, Producer, Consumer 和 AdminClient 方面的改進
KIP-630: Kafka Raft Snapshot?
我們在 3.0 中引入的一個主要功能是 KRaft Controllers 和 KRaft Brokers,能夠為元數據主題 __cluster_metadata 的分區生成、復制和加載快照。Kafka 集群使用這個主題來存儲和復制有關集群的元數據信息,例如 Broker 配置、topic 分區分配、leadership 等。隨著此狀態的增長,Kafka Raft Snapshot 提供了一種有效的方式來存儲、加載和復制(replicate)這些信息 .
KIP-746: Revise KRaft Metadata Records
Kafka Raft Controller 第一版的經驗和持續開發表明,我們需要修改一些元數據記錄類型(metadata record types),這些元數據記錄類型在 Kafka 配置不使用 ZooKeeper 的時候需要使用。
KIP-730: Producer ID generation in KRaft mode?
在 KIP-730 中,Kafka Controller 現在完全接管生成 Kafka Producer ID 的功能。Controller 在 ZK 和 KRaft 模式下都是這么做的。這讓我們離橋式發布( bridge release)更近了一步,這將允許用戶從使用 ZK 的 Kafka 部署過渡到使用 KRaft 的新部署。
KIP-679: Producer will enable the strongest delivery guarantee by default?
從 3.0 開始,Kafka Producer 默認打開冪等性(enable.idempotence=true)以及所有副本的交付都需要確認(acks=all)。這使得默認情況下記錄的交付更加可靠。
KIP-735: Increase default consumer session timeout?
Kafka Consumer 的配置屬性 session.timeout.ms 的默認值從 10 秒增加到 45 秒。這將允許消費者在默認情況下更好地適應暫時的網絡故障,并避免當消費者只是暫時離開組時的連續重新平衡(consecutive rebalances)。
KIP-709: Extend OffsetFetch requests to accept multiple group ids?
支持請求 Kafka 消費者組的當前偏移量的功能已經存在一段時間了。但是獲取多個消費者組的偏移量需要對每個組進行單獨的請求。在 KIP-709 中,fetch 和 AdminClient API 被擴展為支持在單個請求/響應中同時讀取多個消費者組的偏移量。
KIP-699: Update FindCoordinator to resolve multiple Coordinators at a time
支持能夠同時高效地應用于多個消費者組的操作,在很大程度上取決于客戶有效地發現這些組的協調者的能力。這可以通過 KIP-699 實現,它增加了對通過一個請求發現多個組的協調器的支持。Kafka 客戶端已經更新在與新的支持此請求的 Kafka broker 交互時使用此優化。
KIP-724: Drop support for message formats v0 and v1?
自 2017 年 6 月隨 Kafka 0.11.0 推出四年以來,消息格式 v2 一直是默認消息格式。因此,由于已經有足夠多的場景使用這個格式,3.0 的主要發行版為我們提供了一個很好的機會來棄用舊的消息格式——即 v0 和 v1,這些格式現在很少使用。在 3.0 中,如果用戶將 Broker 配置為使用消息格式 v0 或 v1,則會收到警告。這個選項將在 Kafka 4.0 中被移除(有關v0和v1消息格式的棄用的細節和含義,請參閱 KIP-724)。
KIP-707: The future of KafkaFuture?
當 KafkaFuture 類型被引入以方便 Kafka AdminClient 的實現時,Java 8 之前的版本仍在廣泛使用,并且 Kafka 正式支持 Java 7。幾年后,Kafka 運行在支持 CompletionStage 和 CompletableFuture 類類型的 Java 版本上。通過 KIP-707,KafkaFuture 增加了一個方法來返回 CompletionStage 對象,以向后兼容的方式增強了 KafkaFuture 的可用性。
KIP-466: Add support for List serialization and deserialization
KIP-466 為 generic lists 的序列化和反序列化添加了新的類和方法——這一特性對 Kafka 客戶端和 Kafka Streams 都非常有用。
KIP-734: Improve AdminClient.listOffsets to return timestamp and offset for the record with the largest timestamp
用戶列出 Kafka 主題/分區偏移量的能力已得到擴展。使用 KIP-734,用戶現在可以要求 AdminClient 返回 topic/分區中具有最高時間戳的記錄的偏移量和時間戳。(不要將此與 AdminClient 已經返回的最新偏移量混淆,后者是要寫入 topic/分區中的下一個記錄的偏移量。) 對現有 ListOffsets API 的這個擴展允許用戶通過詢問最近寫入的記錄的偏移量以及它的時間戳來探測分區的活躍度。
Kafka Connect
KIP-745: Connect API to restart connector and tasks
在 Kafka Connect 中,connector 在運行時被表示為一組 Connector 類實例和一個或多個 Task 類實例,通過 Connect REST API 對 connectors 的大多數操作都可以應用到整個組中。一個值得注意的例外是 Connector 和 Task 實例的重啟端點(restart endpoints)。要重新啟動整個連接器,用戶必須單獨調用以重新啟動連接器實例和任務實例。在 3.0 中,KIP-745 使用戶能夠通過一次調用重新啟動所有或僅失敗的連接器的 Connector 和 Task 實例。此功能是一項附加功能,重啟 REST API 的先前行為保持不變。
KIP-738: Removal of Connect's internal converter properties?
在之前的主要版本(Apache Kafka 2.0)中棄用之后,internal.key.converter 和 internal.value.converter 作為配置屬性和前綴在 Connect worker 的配置中被刪除。接下來,內部 Connect 主題將專門使用 JsonConverter 來存儲沒有嵌入模式的記錄。任何使用不同轉換器的現有 Connect 集群都必須將其內部主題移植到新格式(有關升級路徑的詳細信息,請參閱 KIP-738)。
KIP-722: Enable connector client overrides by default?
從 Apache Kafka 2.3.0 開始,Connect worker 可以配置為允許連接器配置覆蓋連接器使用的 Kafka 客戶端屬性。這是一個廣泛使用的特性,現在隨著主要版本的發布,默認情況下啟用了覆蓋連接器客戶端屬性的功能(connector.client.config.override.policy 默認為 All)。
KIP-721: Enable connector log contexts in Connect Log4j configuration?
另一個在 2.3.0 中引入但到目前為止尚未默認啟用的功能是連接器日志上下文(connector log contexts)。這在 3.0 中發生了變化,連接器上下文默認添加到 Connect 工作器的 log4j 日志 pattern 中。從以前的版本升級到 3.0 將通過添加連接器上下文來更改log4j導出的日志行格式。
Kafka Streams
KIP-695: Further improve Kafka Streams timestamp synchronization
KIP-695 增強了 Streams 任務如何選擇獲取記錄的語義,并擴展了配置屬性 max.task.idle.ms 的含義和可用值。此更改需要 Kafka Consumer API 中名為 currentLag 的新方法;如果本地已知,它能夠返回一個特定分區的消費者延遲,并且不需要和 Kafka Broker 交互。
KIP-715: Expose committed offset in streams?
從 3.0 開始,TaskMetadata 接口增加了三個新方法:committedOffsets、endOffsets 和 timeCurrentIdlingStarted。這些方法允許 Streams 應用程序跟蹤任務的進度和運行狀況。
KIP-740: Clean up public API in TaskId?
KIP-740 中對 TaskId 類進行了重大更新。一些方法和所有內部字段都已棄用,新的 subtopology() 和 partition() getters 將取代舊的 topicGroupId 和分區字段(另請參閱 KIP-744 以了解相關更改和對 KIP-740 的修正)。
KIP-744: Migrate TaskMetadata and ThreadMetadata to an interface with internal implementation
KIP-744 對 KIP-740 中提出的更改做了進一步修改,并將實現與許多類的公共 API 分開。為了實現這一點,引入了新的接口 TaskMetadata、ThreadMetadata 和 StreamsMetadata,同時棄用了具有相同名稱的現有類。
KIP-666: Add Instant-based methods to ReadOnlySessionStore?
交互式查詢 API 使用 ReadOnlySessionStore 和 SessionStore 接口中的一組新方法進行了擴展,這些方法接受 Instant 數據類型的參數。此更改將影響需要實現新方法的任何自定義只讀交互式查詢會話存儲實現。
KIP-622: Add currentSystemTimeMs and currentStreamTimeMs to ProcessorContext?
ProcessorContext 在 3.0 中新增了兩個新方法:currentSystemTimeMs 和 currentStreamTimeMs。新方法使用戶能夠分別查詢緩存的系統時間和流時間(streams time),并且可以在生產和測試代碼中以統一的方式使用它們。
KIP-743: Remove config value 0.10.0-2.4 of Streams built-in metrics version config?
3.0 中取消了對 Streams 內置指標中遺留指標結構(legacy metrics structure)的支持。KIP-743 正在從配置屬性 built.in.metrics.version 中刪除 0.10.0-2.4 的值。這使得 latest 成為該屬性目前唯一有效值(從2.5開始就是默認值)。
KIP-741: Change default SerDe to be null?
刪除了默認 SerDe 屬性之前的默認值,Streams 之前的默認值為 ByteArraySerde。從 3.0 開始,沒有默認值,并且用戶需要在 API 中根據需要設置他們的 SerDe,或者在其 Streams 配置中通過 DEFAULT_KEY_SERDE_CLASS_CONFIG 和 DEFAULT_VALUE_SERDE_CLASS_CONFIG 設置默認值。先前的默認值幾乎總是不適用于實際應用程序,造成更多的混亂而不是方便。。
KIP-733: Change Kafka Streams default replication factor config
隨著主要版本的發布,Streams 配置屬性 replication.factor 的默認值從 1 更改為 -1。這將允許新的 Streams 應用使用在 Kafka Broker 中定義的默認復制因子,因此當它們遷移到生產環境時,不需要設置這個配置值。注意,新的默認值需要 Kafka Brokers 2.5 或更高版本。
KIP-732: Deprecate eos-alpha and replace eos-beta with eos-v2
另一個在 3.0 中被棄用的 Streams 配置值是 exactly_once 作為 processing.guarantee 屬性的值。exacly_once 值對應的是精確一次語義(Exactly Once Semantics,EOS)的原始實現,任何連接到 Kafka 集群版本 0.11.0 或更新版本的 Streams 應用程序都可以使用。EOS 的第一個實現已經被 Streams 中的EOS 的第二個實現所取代,后者由 processing.guarantee 屬性中的 exact_once_beta 配置表示。接下來,名稱 exactly_once_beta 也被棄用,并被新的 exactly_once_v2 取代。在下一個主要版本(4.0)中,exacly_once 和 exacly_once_beta 都將被刪除,僅留下 exacly_once_v2 作為 EOS 交付保證的唯一選項。
KIP-725: Streamlining configurations for WindowedSerializer and WindowedDeserializer?
配置屬性 default.windowed.key.serde.inner 和 default.windowed.value.serde.inner 被棄用,取而代之的是一個新的屬性 windowed.inner.class.serde,供Kafka 消費者使用。Kafka Streams 用戶被推薦配置他們的窗口 SerDe,通過傳遞這個到 SerDe 構造器,然后在所有的地方使用這個 SerDe。
KIP-633: Deprecate 24 hour default for the grace period in Streams
在 Kafka Streams 中,允許窗口操作根據一個稱為寬限期的配置屬性處理窗口外的記錄。以前,這個配置是可選的,很容易被忽略,導致默認為24小時。這經常使 Suppression 操作符的用戶感到困惑,因為它會緩沖記錄,直到寬限期結束,因此會增加 24 小時的延遲。在 3.0 中,Windows 類通過工廠方法得到增強,這些工廠方法要求使用自定義寬限期或根本沒有寬限期來構造它們。應用了默認的24小時寬限期的舊工廠方法已經被棄用,相應的 grace() api 與已經設置了此配置的新工廠方法不兼容。
KIP-623: Add "internal-topics" option to streams application reset tool?
通過添加新的命令行參數:--internal-topics,使用應用程序重置工具 kafka-streams-application-reset 的 Streams 變得更加靈活。新參數接受一個以逗號分隔的主題名稱列表,這些主題名稱對應于可以計劃使用此應用程序工具刪除的內部主題。將此新參數與現有參數 --dry-run 結合使用,允許用戶在實際執行刪除操作之前確認將刪除哪些主題并在必要時指定其中的一個子集。
MirrorMaker
KIP-720: Deprecate MirrorMaker v1?
在 3.0 版本中,不推薦使用 MirrorMaker 的第一個版本。今后,新功能和主要改進將集中在 MirrorMaker2 (MM2)上。
KIP-716: Allow configuring the location of the offset-syncs topic with MirrorMaker2
在 3.0 中,用戶現在可以配置 MirrorMaker2 創建和存儲用于轉換消費者組偏移量的內部主題的位置。這將允許 MirrorMaker2 的用戶將源 Kafka 集群維護為嚴格只讀的集群,并使用不同的 Kafka 集群來存儲偏移記錄(即目標 Kafka 集群,甚至是源和目標集群之外的第三個集群)。
總結
Apache Kafka 3.0 是 Apache Kafka 項目向前邁出的重要一步。了解更多:
查閱release notes 完整的更改列表;
觀看發布視頻了解更多信息;
下載 Apache Kafka 3.0.0 并使用其中的新功能。
這是一項巨大的社區努力,因此感謝為此版本做出貢獻的所有人,包括我們的所有用戶以及我們的 141 位作者和審閱者:
A. Sophie Blee-Goldman, Adil Houmadi, Akhilesh Dubey, Alec Thomas, Alexander Iskuskov, Almog Gavra, Alok Nikhil, Alok Thatikunta, Andrew Lee, Bill Bejeck, Boyang Chen, Bruno Cadonna, CHUN-HAO TANG, Cao Manh Dat, Cheng Tan, Chia-Ping Tsai, Chris Egerton, Colin P. McCabe, Cong Ding, Daniel Urban, Daniyar Yeralin, David Arthur, David Christle, David Jacot, David Mao, David Osvath, Davor Poldrugo, Dejan Stojadinovi?, Dhruvil Shah, Diego Erdody, Dong Lin, Dongjoon Hyun, Dániel Urbán, Edoardo Comar, Edwin Hobor, Eric Beaudet, Ewen Cheslack-Postava, Gardner Vickers, Gasparina Damien, Geordie, Greg Harris, Gunnar Morling, Guozhang Wang, Gwen (Chen) Shapira, Ignacio Acu?a Frías, Igor Soarez, Ismael Juma, Israel Ekpo, Ivan Ponomarev, Ivan Yurchenko, Jason Gustafson, Jeff Kim, Jim Galasyn, Jim Hurne, JoelWee, John Gray, John Roesler, Jorge Esteban Quilcate Otoya, Josep Prat, José Armando García Sancio, Juan Gonzalez-Zurita, Jun Rao, Justin Mclean, Justine Olshan, Kahn Cheny, Kalpesh Patel, Kamal Chandraprakash, Konstantine Karantasis, Kowshik Prakasam, Leah Thomas, Lee Dongjin, Lev Zemlyanov, Liu Qiang, Lucas Bradstreet, Luke Chen, Manikumar Reddy, Marco Aurelio Lotz, Matthew de Detrich, Matthias J. Sax, Michael G. Noll, Michael Noll, Mickael Maison, Nathan Lincoln, Niket Goel, Nikhil Bhatia, Omnia G H Ibrahim, Peng Lei, Phil Hardwick, Rajini Sivaram, Randall Hauch, Rohan Desai, Rohit Deshpande, Rohit Sachan, Ron Dagostino, Ryan Dielhenn, Ryanne Dolan, Sanjana Kaundinya, Sarwar Bhuiyan, Satish Duggana, Scott Hendricks, Sergio Pe?a, Shao Yang Hong, Shay Elkin, Stanislav Vodetskyi, Sven Erik Knop, Tom Bentley, UnityLung, Uwe Eisele, Vahid Hashemian, Valery Kokorev, Victoria Xia, Viktor Somogyi-Vass, Viswanathan Ranganathan, Vito Jeng, Walker Carlson, Warren Zhu, Xavier Léauté, YiDing-Duke, Zara Lim, Zhao Haiyuan, bmaidics, cyc, dengziming, feyman2016, high.lee, iamgd67, iczellion, ketulgupta1995, lamberken, loboya~, nicolasguyomar, prince-mahajan, runom, shenwenbing, thomaskwscott, tinawenqiao, vamossagar12, wenbingshen, wycccccc, xjin-Confluent, zhaohaidao
本文翻譯自:What's New in Apache Kafka 3.0.0
總結
以上是生活随笔為你收集整理的Apache Kafka 3.0.0 稳定版发布,有哪些值得关心的变化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机图形学——二维卡通人物交互设计
- 下一篇: 绘制cox生存分析结果的森林图