瞭解保留磁碟用量

瞭解所建立的主題和分割區以及您套用的配置設定如何使用 Event Streams 實例的可用儲存體。

首先,請務必注意 Event Streams 實例的已定義儲存體是可用的儲存體。 這表示您不需要擔心抄本所使用的儲存體 (因為所有主題都將其抄寫因數設為 3),而不會從可用的儲存體中取得。 這會保持簡單,而且您可以計劃如何將那些訊息的保留對映至儲存體使用情形。

瞭解 Kafka 如何儲存資料

Kafka 可讓使用者配置主題的保留限制。

retention.bytes 配置是針對主題的每個分割區,配置給訊息的位元組總數。 如果超出此值,Kafka 會刪除最舊的訊息。 因此,例如,如果您通常每天將 200 MB 的訊息傳送至單一分割區主題,且您想要將它們保留 5 天,請將 retention.bytes 設為 1 GB (200 MB x 5 天)。

如果超過 10 個分割區,則您會設定 retention.bytes = 100 MB (1 GB/10 個分割區)。

Kafka 會在內部將每個分割區分割成數個日誌區段。 這也是您可以設定的內容 log.segment.size,預設值是 512 MB。 當我們提到 Kafka 會刪除最舊的訊息時,它實際上會刪除最舊的日誌區段。 因此,除了滿足 retention.bytes 配置所需的日誌區段數目之外,Kafka 還需要保留一個額外日誌區段的空間。

請參閱下列範例。

 retention.bytes = 1 GB
 log.segment.size = 512 MB
 Kafka needs approximately 1.5 GB per partition for the topic storage.

 retention.bytes = 100 MB
 log.segment.size = 512 MB
 Kafka needs approximately 1 GB per partition for the topic storage.

索引每個分割區需要更多儲存體。 對於每一個日誌區段,Kafka 也會儲存兩個索引。 其大小由 segment.index.size定義,也可配置且預設值為 10 MB。 如需參照,索引所使用的儲存體計算如下:

 2 x number.of.log.segments x segment.index.size

其中

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

使用 Event Streams 管理儲存空間

執行主題管理作業 (例如建立主題、建立分割區或變更主題配置) 時,Event Streams 可確保有足夠的儲存體可滿足作業。 為此,對於每一個主題,Event Streams 會使用下列方法來計算每一個主題的「保留大小」。

對於 cleanup.policy 設定為 compact 的主題,每個分割區所耗用的保留大小一律為 1 GB。 當主題的 cleanup.policy 設為 compact 時,會忽略用於 retention.bytesretention.ms 主題設定的任何值。

對於 cleanup.policy 設定為 deletecompact, delete 的主題,針對每一個分割區所耗用的保留大小計算如下:

 Reserved size = retention.bytes + log.segment.size + (2 x segment.index.size x number.of.log.segments)

其中

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

保留儲存體百分比總計也會由 ibm_eventstreams_instance_reserved_disk_space_percent 度量 顯示在 IBM Cloud Monitoring 中。

如果建立新主題或將分割區新增至現有主題的要求會導致保留儲存體總量超過為 Event Streams 實例配置之儲存體的 90% [1],則會拒絕這些要求。 拒絕的要求會收到 PolicyViolation 錯誤,說明已達到實例的保留儲存體限制。 如果達到保留儲存體限制,您需要先刪除主題或增加為實例配置的儲存體數量,然後才能建立進一步主題。

如果更新 Kafka 儲存體需求,則未來可能會變更保留大小計算。

範例

不明顯的效果是根據您的主題配置,Kafka 可以保留比預期更多的儲存體。 請參閱下列範例。

  1. 主題的 retention.bytes 為 1 GB,且日誌區段大小為 512 MB:

    使用一個分割區時,它會保留大約 1.5 GB 的儲存空間。
    在此情況下,保留的大小會明顯大於保留大小。

  2. 主題的 retention.bytes 為 50 GB,且日誌區段大小為 512 MB:

    使用一個分割區時,它會保留大約 50.5 GB 的儲存空間。

    在此情況下,保留的大小會與保留大小非常接近。

  3. 主題的 retention.bytes 為 1 GB,且日誌區段大小為 128 MB:

    使用一個分割區時,它會保留大約 1.1 GB 的儲存空間。

    在此情況下,保留的大小會與保留大小非常接近。


  1. Event Streams 會將指派給實例的部分儲存體用於內部管理功能,並作為適合刪除之日誌區段的作業保留。 ↩︎