專案動態|Apache Pulsar 2.7.4 版本釋出

ApachePulsar發表於2022-01-26

關於 Apache Pulsar

Apache Pulsar 是 Apache 軟體基金會頂級專案,是下一代雲原生分散式訊息流平臺,集訊息、儲存、輕量化函式式計算為一體,採用計算與儲存分離架構設計,支援多租戶、持久化儲存、多機房跨區域資料複製,具有強一致性、高吞吐、低延時及高可擴充套件性等流資料儲存特性。

GitHub 地址:http://github.com/apache/pulsar/

近期,Apache Pulsar 社群釋出了 Pulsar 2.7.4 版本!新版本涵蓋 32 位貢獻者提供的改進和錯誤修復,並提交了 98 次變更。

版本亮點

  • 將 Log4j 升級至 2.17.0 版本 - CVE-2021-45105[1]。 PR-13392[2]
  • 回收 OpAddEntry 時可以正確引用 ManagedLedgerPR-12103[3]
  • 當 ManagedLedger 關閉時,在 OpAddEntry 上不會發生 NPE。PR-12364[4]

本部落格按專案功能更新情況分組,介紹了 2.7.4 版本最值得關注的進展,如需瞭解所有效能升級和 bug 修復的完整列表,請查閱 Pulsar 2.7.4 釋出註記[5] 。

Bug 修復和功能增強

PR-13392[6]:將 log4j 升級至2.17.0 版本 - CVE-2021-45105[7]

問題: 關於 Log4j 的嚴重漏洞允許攻擊者遠端執行。該漏洞問題在 CVE-2021-44228[8] 描述和跟蹤。

解決方案: 將 log4j 升級至 2.17.0 版本。詳情參考部落格

PR-12103[9]:回收 OpAddEntry 時可以正確引用 ManagerLedger

問題: 此版本之前,在寫入失敗後,會在後檯安排一個任務來強制關閉 ledger 並觸發新 ledger 的建立。如果 OpAddEntry 例項已被回收,則可能導致 NPE 或未定義的行為。

解決方案: ManagedLedgerImpl 物件引用被複制到最終變數,後臺任務將不依賴於 OpAddEntry 例項的生命週期。

PR-12123[10]: BlobStoreBackedReadHandler 中沒有潛在的競態條件。

問題: 此版本之前,BlobStoreBackedReadHandler 在讀取 offload ledger 時進入無限迴圈。在讀取 entry 和關閉 BlobStoreBackedReadHandler 的操作之間存在競態條件。

解決方案: 在讀取 entry 之前新增了狀態檢查,並在 entryID 大於 lastEntryID 時使 BlobStoreBackedReadHandler 退出迴圈。

PR-12364[11]:當 ManagedLedger 關閉時,在 OpAddEntry 上不會發生 NPE。

問題 : 此版本之前,ManagedLedgerBkTest#managedLedgerClosed 測試在一些 asyncAddEntry 操作上關閉了 ManagedLedger 物件,並因 NPE 失敗。

解決方案: 當 ManagedLedger 通知 OpAddEntry 失敗時關閉 OpAddEntry。這樣就正確回收了OpAddEntry 物件併成功觸發失敗的回撥。

PR-11294[12]:通過分割槽的主題名稱正確設定主題策略。
問題: 此版本之前,分割槽的主題名稱不能用於設定主題策略。

解決方案: 通過在 SystemTopicBasedTopicPoliciesService 中轉換分割槽的主題名稱,允許通過分割槽的主題名稱設定主題策略。

PR-8611[13]:排程速率限制器對消費者生效。
問題: 此版本之前,由於 acquiredPermits 每秒重置為 0,因此在所有消費者在下一秒開始讀取的情況下,排程速率限制器不會生效。

解決方案: 將 DispatchRateLimiter 的行為變更為每秒減去 permits,而不是將 acquiredPermits 重置為 0。消費者暫時停止讀取 entry,直到 acquiredPermits 返回的值小於 permits

PR-11310[14]:執行 unload bundle 操作時不會發生 NPE。
問題: 在對持久分割槽主題進行壓力測試時,在執行 unload bundle 操作時會出現 NPE。同時,生產者沒有寫訊息。

解決方案: 新增更多安全性檢查來修復此問題。

PR-11346[15]:修復名稱空間 bundle 快取的不一致行為。
問題: 此版本之前,在名稱空間被刪除後,名稱空間 bundle 快取沒有失效。

解決方案: 當 bundle 快取失效時,名稱空間策略快取失效。

PR-11342[16]:刪除叢集后關閉複製機和複製客戶端。
問題: 此版本之前,刪除叢集后,複製機和複製客戶端沒有關閉。複製機的生產者會不斷嘗試重新連線到已刪除的叢集。

解決方案: 關閉相應的複製機與複製客戶端。

PR-10384[17]:釋出速率限制器按預期生效。
問題: 此版本之前,如果將 preciseTopicPublishRateLimiterEnable 設定為 true 以進行限制速率,會出現以下問題:

  • 將限制從有界限制更改為無界限制時,更新的限制不會設定邊界。
  • 每個主題會為每個限制器例項建立一個排程執行緒。
  • 當主題被解除安裝或操作關閉時,主題不釋出排程執行緒。
  • 更新限制不會關閉與被替換的限制器例項相關的排程執行緒。

解決方案

  • 在建立新的限制器例項之前清理以前的限制器例項。
  • 使用 brokerService.pulsar().getExecutor() 作為速率限制器例項的排程器。
  • 新增用於主題關閉(解除安裝)的資源清理 hook。

PR-12015[18]:如果無法更新 ZNode 列表,則清理新建立的 ledger。
問題: 在更新 ZNode 列表時,ZooKeeper 會丟擲異常並且不會清理已建立的 ledger。新建立的 ledger 未編入主題 managedLedger 列表的索引,因此無法作為主題保留清除。此外,如果丟擲 ZNode 版本不匹配異常,ZNode 數量會在 ZooKeeper 中增加。

解決方案: 當 ZNode 列表更新失敗時,無論何種異常型別,都從 broker 快取和 BookKeeper 中刪除已建立的 ledger。

參與其中

新版本使用

歡迎大家下載[19]並使用新版本!如果在使用中遇到問題,可以通過提 issue[20] 或在微信群交流的方式丟擲疑問並與社群交流。

加入 Apache Pulsar 社群

Pulsar 專案的成長來源於社群,也紮根於社群。一次次新版本的籌備與釋出離不開社群夥伴們的貢獻。你是否願意成為其中的一員呢?參與開源,可以獲得公司及社群內外的認可,結交來自各個領域、志同道合的小夥伴;同時也可以提高個人影響力,促進個人發展。參與開源不是碼農的專屬,社群、文件等各個方面都可以讓大家發揮一技之長。

作為全球性開源專案,截至目前,Apache Pulsar 已擁有 480 名貢獻者、10.2 K+ Star 、2.6 K+ Fork 。我們為大家提供了參與指南,歡迎越來越多的小夥伴助力 Apache Pulsar 專案的不斷髮展與前進。

相關閱讀

引用連結

[1] CVE-2021-45105: https://pulsar.apache.org/blo...

[2] PR-13392: https://github.com/apache/pul...

[3] PR-12103: https://github.com/apache/pul...

[4] PR-12364: https://github.com/apache/pul...

[5] Pulsar 2.7.4 釋出註記: https://pulsar.apache.org/rel...

[6] PR-13392: https://github.com/apache/pul...

[7] CVE-2021-45105: https://pulsar.apache.org/blo...

[8] CVE-2021-44228: https://nvd.nist.gov/vuln/det...

[9] PR-12103: https://github.com/apache/pul...

[10] PR-12123: https://github.com/apache/pul...

[11] PR-12364: https://github.com/apache/pul...

[12] PR-11294: https://github.com/apache/pul...

[13] PR-8611: https://github.com/apache/pul...

[14] PR-11310: https://github.com/apache/pul...

[15] PR-11346: https://github.com/apache/pul...

[16] PR-11342: https://github.com/apache/pul...

[17] PR-10384: https://github.com/apache/pul...

[18] PR-12015: https://github.com/apache/pul...

[19] 下載: https://pulsar.apache.org/en/...

[20] 提 issue: https://github.com/apache/pul...

[21] Apache Pulsar 官方貢獻指南: http://pulsar.apache.org/en/c...

關注公眾號「ApachePulsar」,獲取乾貨與動態

加入 Apache Pulsar 中文交流群 ??

相關文章