關於 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
時可以正確引用ManagedLedger
。PR-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 專案的不斷髮展與前進。
- Apache Pulsar 官方貢獻指南[21]
- 加入 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 中文交流群 ??