社群知識庫|常見問答 FAQ 集合第 2 期:Topic 配置、ACK 等問題的解決

ApachePulsar發表於2022-01-19

關於 FAQ 知識庫

平時在 Pulsar 交流群中,我們發現大家在接觸和使用 Pulsar 的過程中,會反覆遇到相類似的問題。為了更高效地解決大家這些“高頻疑問”,同時也對提出優質問題的朋友表示感謝,我們特別建立了 FAQ 知識庫,以便於收集及解答大家的疑問。

我們將定期收集篩選社群內提出的高頻問題,由社群專家甄別篩選出其中優質的提問進行回答,整合優化後分享給社群的小夥伴們作為遇到問題時的優先參考,希望可以幫助大家解決使用 Pulsar 過程中的問題。

下面來看看本期收集的問題吧:

統計 Topic 下訊息條數

問題 1: 如何使用統計 Topic 下所有的訊息條數(非 Entry 條數 )?

解答:目前還沒有這個特性,可以根據當前 Message Index 的特性來支援 Message Level 的 Backlog。相對來說,對於 Exclusive (獨佔)和 Failover (災備)模式的處理會簡單一些,對於支援單條訊息不連續簽收的訂閱來說會比較複雜一些。

百萬量級 Topic 配置

問題 2: 百萬量級 Topic 下如何配置 Bookies、Broker 以及硬體?

解答:容量評估需要結合訊息的大小/業務中實際可以接收的 Batch 大小等因素。假如一個訊息 100 Bytes,一個客戶端傳送,客戶端每 2ms 打包傳送,資料寫兩個副本,那基本 2 臺機器就夠了,但是這明顯不符合實際的應用場景。對於 Pulsar 來講容量評估主要考慮幾個方面的因素:

  1. 訊息吞吐量:直接決定對網路卡和磁碟的需求,硬體支援的最大吞吐必須要 >= 期望的吞吐;
  2. 實際 Batch 的影響:決定了對 CPU 的需求,這個要根據具體的測試資料來,通過設定不同 Batch 大小做一些 Benchmark,再根據實際業務的情況來做評估;
  3. Topic 數量:決定對 Metadata Service 的需求,如果有幾千個/幾萬個 Topic,那不用太考慮這個方面的影響;如果幾十萬及以上的 Topic,那要給 ZooKeeper 一些比較好的資源,尤其是在磁碟上,比如 Log Data 和 Data 分開,儘量使用 Nvme SSD 等。

相關配置:

  • Broker 配置:主要配置是網路卡和 CPU,建議使用萬兆網路卡,Broker 會並行寫多個副本到 Bookie,所以單個 Broker 能夠承載的寫入頻寬要除以副本數。
  • Bookie 配置:主要配置是網路卡和磁碟,建議使用萬兆網路卡,Journal 盤如果使用 HDD 要關閉同步刷盤,不然刷盤的延遲會直接影響寫入的吞吐。

以上只是一些比較常規的考慮因素和建議,容量評估還是要結合實際的測試結果得出。社群也有不少簡單好用的工具,比如 Pulsar 自帶的 Pulsar-perf 或者 Openmessaging Benchmark, 可以容易的在指定的 Pulsar 叢集上進行效能測試。

磁碟被寫滿如何清理檔案

問題 3: Pulsar 磁碟被寫滿後需要清理哪些檔案?

解答:清理 Bookie 不能通過直接清理檔案的方式進行,這會導致整個 Bookie 狀態的不一致,並且一旦檔案被刪除可能會導致不可逆的災難。

處理這個檔案需視環境而定。如果是測試環境或者不會關心資料丟失的其他環境,那麼可以直接使用 Admin 刪除掉叢集的所有的 Topic,然後逐個 Bookie 節點觸發手動 GC curl,Bookie 就可以逐漸釋放磁碟空間。

如果是線上環境,肯定是不能直接把 Topic 都刪除掉的。首先,優先考慮擴容保證服務不會中斷,然後根據 Topic 使用的儲存大小來檢查是哪些 Topic 佔用了大量的儲存空間。Pulsar 的機制是 Subscription 沒有 Ack 的訊息是不會被刪除掉的。因此如果發現是某些不用的 Subscription 導致 Topic 資料無法刪除,可以檢查 Subscription 是不是還再用/可以清理掉。總之,找出那些可以清理資料的 Topic,讓不用的資料過期或被刪除,然後再到 Bookie 節點觸發手動 GC 來清理資料。

消費位點與 Ack

問題 4: Pulsar 新接入的消費者,都是從最新開消費嗎?

解答:如果沒有訂閱過,就從最新開始消費。

問題 5: 哪個引數可以指定消費位點的?

解答:ConsumerBuilder#subscriptionInitialPosition。預設是 latest,可以改成 earliest。如果已經訂閱過,如何改動都是最新。需要改的話用 Consumer#seek 來改變位置。

問題 6: 預設訊息被 Ack,如果沒有保留策略那麼就會被立即刪除、無法回溯?

解答:標記為刪除不是立即刪除。如果沒有被實際刪除的話可以 Seek 回溯。

BookKeeper Ledger 寫滿

問題 7: 單個 Ledger 目錄寫滿,但是其他目錄空閒。

解答:BookKeeper PR-2121 已通過避免 entry 日誌停止壓縮解決該問題,請確保使用 4.10 或以上版本的 BookKeeper。

微服務場景-例項訂閱

問題 8: 在微服務場景中,可能一個服務有多個例項。這些例項都使用不同的訂閱名稱嗎?

解答:每個訂閱在 Pulsar 中對可以讀取一份完整的 Topic 資料。根據你的使用場景,如果你希望每個例項都拿到一份完整的 Topic 資料,每個例項應該使用不同的訂閱名稱;如果不同的例項共享一份 Topic 資料,則應該使用同一個訂閱名稱。大多數場景會是後者。

以上就是第 2 期社群 FAQ 彙總,在此感謝參與社群日常提問與解答的小夥伴們。讓我們期待下一期的 FAQ 內容吧!

相關推薦

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

加入 Apache Pulsar 中文交流群 ??

相關文章