

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 自訂 MSK Express 代理程式組態 （讀取/寫入存取）
<a name="msk-configuration-express-read-write"></a>

您可以使用 Amazon MSK 的更新組態[功能或使用 Apache Kafka 的 AlterConfig API 來更新讀取/寫入代理程式組態](msk-update-cluster-config.md)。 AlterConfig Apache Kafka 代理程式組態為靜態或動態。靜態組態需要重新啟動代理程式才能套用組態，而動態組態則不需要重新啟動代理程式。如需組態屬性和更新模式的詳細資訊，請參閱[更新代理程式組態](https://kafka.apache.org/documentation/#dynamicbrokerconfigs)。

**Topics**
+ [MSK Express 代理程式上的靜態組態](#msk-configuration-express-static-configuration)
+ [Express Brokers 上的動態組態](#msk-configuration-express-dynamic-configuration)
+ [Express Brokers 上的主題層級組態](#msk-configuration-express-topic-configuration)

## MSK Express 代理程式上的靜態組態
<a name="msk-configuration-express-static-configuration"></a>

您可以使用 Amazon MSK 建立自訂 MSK 組態檔案，以設定下列靜態屬性。Amazon MSK 會設定和管理您未設定的所有其他屬性。您可以從 MSK 主控台或使用組態[命令建立和更新靜態組態](msk-configuration-operations-create.md)檔案。


| 屬性 | Description | 預設值 | 
| --- | --- | --- | 
|  allow.everyone.if.no.acl.found  |  如果您想要將此屬性設定為 false，請先確定您為叢集定義 Apache Kafka ACLs。如果您將此屬性設定為 false，但未先定義 Apache Kafka ACLs，則會失去對叢集的存取權。如果發生這種情況，您可以再次更新組態，並將此屬性設為 true，以重新取得對叢集的存取。  |  true  | 
|  auto.create.topics.enable  |  在伺服器上啟用主題自動建立功能。  |  false  | 
| compression.type |  指定指定主題的最終壓縮類型。此組態接受標準壓縮轉碼器：gzip、Snappy、lz4、zstd。 此組態還會接受 `uncompressed`，這相當於沒有壓縮； 和 `producer`，這表示 會保留生產者設定的原始壓縮轉碼器。 | Apache Kafka 預設 | 
|  connections.max.idle.ms  |  閒置連線逾時 (以毫秒計)。伺服器插槽處理器執行緒會關閉閒置時間超過此屬性設定值的連線。  |  Apache Kafka 預設  | 
|  delete.topic.enable  |  啟用刪除主題操作。若此設定關閉，您將無法透過管理員工具刪除主題。  |  Apache Kafka 預設  | 
|  group.initial.rebalance.delay.ms  |   群組協調員在首次執行重新平衡前等待更多資料取用者加入新群組的時間。延遲越長，意味著重新平衡的次數越少，但處理開始前的等待時間會增加。  |  Apache Kafka 預設  | 
|  group.max.session.timeout.ms  |  已註冊取用者工作階段逾時值上限。逾時值越大，讓取用者處理活動訊號間的訊息的時間越長，偵測故障耗費的時間也越長。  |  Apache Kafka 預設  | 
|  leader.imbalance.per.broker.percentage  |  每個代理程式允許的領導者不平衡比率。如果每個代理程式的控制器超過此值，控制器會觸發領導者不平衡。此值是以百分比指定。  |  Apache Kafka 預設  | 
| log.cleanup.policy | 保留時段外的區段預設清除政策。以逗號分隔的有效政策清單。有效政策為 delete 和 compact。對於已啟用分層儲存的叢集，有效政策delete僅為 。 | Apache Kafka 預設 | 
| log.message.timestamp.after.max.ms |  訊息時間戳記與代理程式時間戳記之間的允許時間戳記差異。訊息時間戳記可以晚於或等於代理程式的時間戳記，其最大允許差異取決於此組態中設定的值。 如果 `log.message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`log.message.timestamp.type=LogAppendTime`。  | 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天） | 
| log.message.timestamp.before.max.ms |  中介裝置的時間戳記與訊息時間戳記之間的允許時間戳記差異。訊息時間戳記可以早於或等於中介裝置的時間戳記，其最大允許差異取決於此組態中設定的值。 如果 `log.message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`log.message.timestamp.type=LogAppendTime`。  | 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天） | 
| log.message.timestamp.type | 指定訊息內的時間戳記是訊息建立時間還是日誌附加時間。允許的值為 CreateTime 和 LogAppendTime。 | Apache Kafka 預設 | 
| log.retention.bytes | 日誌被刪除前的大小上限。 | Apache Kafka 預設 | 
| log.retention.ms | 刪除日誌檔案之前要保留的毫秒數。 | Apache Kafka 預設 | 
| max.connections.per.ip | 每個 IP 地址允許的連線數上限。0 如果使用 max.connections.per.ip.overrides 屬性設定覆寫，這可以設定為 。如果達到限制，則會捨棄來自 IP 地址的新連線。 | Apache Kafka 預設 | 
|  max.incremental.fetch.session.cache.slots  |  所保持的增量擷取工作階段數量上限。  |  Apache Kafka 預設  | 
| message.max.bytes |  Kafka 允許的最大記錄批次大小。若此值增加，且有取用者的版本低於 0.10.2，則必須上調取用者的擷取大小，取用者才能擷取此大小的記錄批次。 在最新的訊息格式版本中，訊息一律會分組進不同批次，以增進效率。在之前的訊息格式版本中，未壓縮的記錄不會分組進批次，當時，此限制僅適用於單一記錄。您可以使用主題層級`max.message.bytes`組態，為每個主題設定此值。  | Apache Kafka 預設 | 
|  num.partitions  |  每個主題的預設分割區數量。  |  1  | 
|  offsets.retention.minutes  |  取用者群組遺失所有取用者 (即變為空白) 後，其偏移會保留此值指定的時間，之後才會被捨棄。對於獨立消費者 （即使用手動指派的消費者），偏移會在最後一次遞交時間加上此保留期間之後過期。  |  Apache Kafka 預設  | 
|  replica.fetch.max.bytes  |  每個分割區嘗試擷取之訊息位元組數。此非絕對數量上限。若擷取的第一個非空白分區的第一個記錄批次大於此值，則會傳回此記錄批次，確保進度。message.max.bytes (代理程式組態) 或 max.message.bytes (主題組態) 會定義代理程式接受的記錄批次大小上限。  |  Apache Kafka 預設  | 
|  replica.selector.class  |  實作 ReplicaSelector 的完整類別名稱。代理程式會使用此值尋找偏好的讀取複本。如果您想要允許取用者從最近的複本擷取，請將此屬性設定為 `org.apache.kafka.common.replica.RackAwareReplicaSelector`。  |  Apache Kafka 預設  | 
|  socket.receive.buffer.bytes  |  通訊端伺服器通訊埠的 SO\$1RCVBUF 緩衝區。若此值為 -1，將採用 OS 預設值。  |  102400  | 
|  socket.request.max.bytes  |  通訊端要求內的位元組數量上限。  |  104857600  | 
|  socket.send.buffer.bytes  |  通訊端伺服器通訊埠的 SO\$1SNDBUF 緩衝區。若此值為 -1，將採用 OS 預設值。  |  102400  | 
|  transaction.max.timeout.ms  |  交易的最大逾時值。若用戶端請求的交易時間超過此值，代理程式會在 InitProducerIdRequest 中傳回錯誤。如此可避免用戶端逾時時間過長，拖延取用者讀取交易中的主題。  |  Apache Kafka 預設  | 
|  transactional.id.expiration.ms  |  在交易協調器將交易 ID 視為過期之前，等待接收目前交易的交易狀態更新所用的時間 (毫秒)。此設定也會影響生產者 ID 過期，因為它會導致生產者 IDs 在具有指定生產者 ID 的最後一次寫入後經過此時間時過期。如果生產者 ID 的上次寫入由於主題的保留設定而被刪除，該生產者 ID 可能會提早過期。此屬性的最小值為 1 毫秒。  |  Apache Kafka 預設  | 

## Express Brokers 上的動態組態
<a name="msk-configuration-express-dynamic-configuration"></a>

您可以使用 Apache Kafka AlterConfig API 或 Kafka-configs.sh 工具來編輯下列動態組態。Amazon MSK 會設定和管理您未設定的所有其他屬性。您可以動態設定不需要重新啟動代理程式的叢集層級和代理程式層級組態屬性。


| 屬性 | Description | 預設值 | 
| --- | --- | --- | 
|  advertised.listeners  |  如果與 `listeners` 組態屬性不同，則要發佈供用戶端使用的接聽程式。在 IaaS 環境中，這可能需要與代理程式繫結的界面不同。如果未設定，則會使用接聽程式的值。與接聽程式不同，公告 0.0.0.0 中繼地址無效。 與 不同`listeners`，此屬性中也有重複的連接埠，因此一個接聽程式可以設定為公告另一個接聽程式的地址。這在某些使用外部負載平衡器的情況下非常有用。 此屬性設定為每個代理程式層級。  |  null  | 
|  compression.type  |  特定主題的最終壓縮類型。您可將此屬性設定為標準壓縮轉碼器 (`gzip`、`snappy`、`lz4` 和 `zstd`)。它還可接受 `uncompressed`。這個值相當於無壓縮。如果將該值設定為 `producer`，就代表保留生產者設定的原始壓縮轉碼器。  | Apache Kafka 預設 | 
| log.cleaner.delete.retention.ms | 為日誌壓縮主題保留刪除 tombstone 標記的時間量。如果取用者從位移 0 開始取得有效的最終階段快照，則此設定也會限制取用者必須完成讀取的時間。否則，刪除陵墓可能會在它們完成掃描之前收集。 | 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天）、Apache Kafka 預設 | 
| log.cleaner.min.compaction.lag.ms | 訊息在日誌中保持不協調狀態的最短時間。此設定僅適用於正在壓縮的日誌。 | 0，Apache Kafka 預設 | 
| log.cleaner.max.compaction.lag.ms | 訊息在日誌中仍不符合壓縮資格的時間上限。此設定僅適用於正在壓縮的日誌。此組態將限制在 【7 天，Long.Max】 的範圍內。 | 9223372036854775807，Apache Kafka 預設 | 
|  log.cleanup.policy  |  保留時段外的區段預設清除政策。以逗號分隔的有效政策清單。有效政策為 `delete` 和 `compact`。對於已啟用分層儲存的叢集，有效政策`delete`僅為 。  | Apache Kafka 預設 | 
|  log.message.timestamp.after.max.ms  |  訊息時間戳記與代理程式時間戳記之間的允許時間戳記差異。訊息時間戳記可以晚於或等於代理程式的時間戳記，其最大允許差異取決於此組態中設定的值。如果 `log.message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`log.message.timestamp.type=LogAppendTime`。  | 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天） | 
|  log.message.timestamp.before.max.ms  |  中介裝置的時間戳記與訊息時間戳記之間的允許時間戳記差異。訊息時間戳記可以早於或等於中介裝置的時間戳記，其最大允許差異取決於此組態中設定的值。如果 `log.message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`log.message.timestamp.type=LogAppendTime`。  | 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天） | 
|  log.message.timestamp.type  |  指定訊息內的時間戳記是訊息建立時間還是日誌附加時間。允許的值為 `CreateTime` 和 `LogAppendTime`。  | Apache Kafka 預設 | 
|  log.retention.bytes  |  日誌被刪除前的大小上限。  |  Apache Kafka 預設  | 
|  log.retention.ms  |  刪除日誌檔案之前要保留的毫秒數。  |  Apache Kafka 預設  | 
|  max.connection.creation.rate  |  代理程式隨時允許的最大連線建立速率。  |  Apache Kafka 預設  | 
|  max.connections  |  中介裝置隨時允許的連線數上限。除了使用 設定的任何每個 IP 限制之外，也會套用此限制`max.connections.per.ip`。  |  Apache Kafka 預設  | 
|  max.connections.per.ip  |  每個 IP 地址允許的連線數上限。`0` 如果使用 max.connections.per.ip.overrides 屬性設定覆寫，則可以將此設定為 。如果達到限制，則會捨棄來自 IP 地址的新連線。  |  Apache Kafka 預設  | 
|  max.connections.per.ip.overrides  |  每個 IP 或主機名稱的逗號分隔清單會覆寫為預設的最大連線數。範例值為 `hostName:100,127.0.0.1:200`  | Apache Kafka 預設 | 
|  message.max.bytes  |  Kafka 允許的最大記錄批次大小。若此值增加，且有取用者的版本低於 0.10.2，則必須上調取用者的擷取大小，取用者才能擷取此大小的記錄批次。在最新的訊息格式版本中，訊息一律會分組進不同批次，以增進效率。在之前的訊息格式版本中，未壓縮的記錄不會分組進批次，當時，此限制僅適用於單一記錄。您可以使用主題層級`max.message.bytes`組態，為每個主題設定此值。  | Apache Kafka 預設 | 
|  producer.id.expiration.ms  |  主題分割區領導者在到期生產者 IDs 之前等待的時間，以毫秒為單位。當與其相關聯的交易仍在進行中時，生產者 IDs 不會過期。請注意，如果由於主題IDs保留設定而刪除生產者 ID 的最後一次寫入，生產者 ID 可能會更快過期。將此值設定為等於或高於 `delivery.timeout.ms` ，有助於防止重試期間過期，並防止訊息重複，但對於大多數使用案例，預設值應該是合理的。  | Apache Kafka 預設 | 

## Express Brokers 上的主題層級組態
<a name="msk-configuration-express-topic-configuration"></a>

您可使用 Apache Kafka 命令來設定或修改新的和現有主題的主題層級組態屬性。如果您無法提供任何主題層級的組態，Amazon MSK 會使用代理程式預設值。如同代理程式層級組態，Amazon MSK 可保護某些主題層級組態屬性免於變更。範例包括複寫係數 `min.insync.replicas`和 `unclean.leader.election.enable`。如果您嘗試使用 以外的複寫係數值建立主題`3`，Amazon MSK 預設會建立複寫係數為 的主題`3`。如需有關主題層級組態屬性的詳細資訊及其設定範例，請參閱 Apache Kafka 文件中的 [Topic-Level Configs](https://kafka.apache.org/documentation/#topicconfigs)。


| 屬性 | Description | 
| --- | --- | 
|  cleanup.policy  |  此組態會指定要在日誌區段上使用的保留政策。「刪除」政策 （預設為預設值） 會在達到保留時間或大小限制時捨棄舊區段。「壓縮」政策將啟用日誌壓縮，這會保留每個金鑰的最新值。您也可以在逗號分隔清單中指定這兩個政策 （例如，「delete，compact」)。在此情況下，會根據保留時間和大小組態捨棄舊區段，而保留區段則會壓縮。在分割區中的資料達到 256 MB 之後，就會觸發 Express 代理程式上的壓縮。  | 
|  compression.type  |  指定指定主題的最終壓縮類型。此組態接受標準壓縮轉碼器 (`gzip`、`snappy`、`lz4`、`zstd`)。此外，它會接受相當於沒有壓縮`uncompressed`的 ；`producer`這表示 會保留生產者設定的原始壓縮轉碼器。  | 
| delete.retention.ms |  為日誌壓縮主題保留刪除 tombstone 標記的時間量。如果取用者從位移 0 開始取得最終階段的有效快照，則此設定也會提供取用者必須完成讀取的時間限制。否則，刪除陵墓可能會在它們完成掃描之前收集。 此設定的預設值為 86400000 (24 \$1 60 \$1 60 \$1 1000 毫秒，即 1 天）、Apache Kafka 預設  | 
|  max.message.bytes  |  Kafka 允許的最大記錄批次大小 （壓縮後，如果啟用壓縮）。如果此值增加，而且有比 更舊的取用者`0.10.2`，則取用者的擷取大小也必須增加，才能擷取此大型的記錄批次。在最新的訊息格式版本中，記錄一律會分組進不同批次，以增進效率。在之前的訊息格式版本中，未壓縮的記錄不會分組進批次，當時此限制僅適用於單一記錄。這可以在主題層級 的每個主題設定`max.message.bytes config`。  | 
|  message.timestamp.after.max.ms  |  此組態會設定訊息時間戳記與代理程式時間戳記之間的允許時間戳記差異。訊息時間戳記可以晚於或等於代理程式的時間戳記，其最大允許差異取決於此組態中設定的值。如果 `message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`message.timestamp.type=LogAppendTime`。  | 
|  message.timestamp.before.max.ms  |  此組態會設定中介裝置的時間戳記與訊息時間戳記之間的允許時間戳記差異。訊息時間戳記可以早於或等於中介裝置的時間戳記，其最大允許差異取決於此組態中設定的值。如果 `message.timestamp.type=CreateTime`，當時間戳記的差異超過此指定的閾值時，訊息將被拒絕。如果 ，則會忽略此組態`message.timestamp.type=LogAppendTime`。  | 
|  message.timestamp.type  |  定義訊息中的時間戳記是訊息建立時間還是日誌附加時間。值應為 `CreateTime`或 `LogAppendTime`  | 
| min.compaction.lag.ms |  訊息在日誌中保持不協調狀態的最短時間。此設定僅適用於正在壓縮的日誌。 此設定的預設值為 0，Apache Kafka Default  | 
| max.compaction.lag.ms |  訊息在日誌中仍不符合壓縮資格的時間上限。此設定僅適用於正在壓縮的日誌。此組態將限制在 【7 天，Long.Max】 的範圍內。 此設定的預設值為 9223372036854775807，Apache Kafka Default。  | 
|  retention.bytes  |  此組態控制如果我們使用「刪除」保留政策，在我們捨棄舊日誌區段以釋放空間之前，分割區 （由日誌區段組成） 可以成長到的最大大小。根據預設，沒有只有時間限制的大小限制。由於此限制是在分割區層級強制執行，請將此限制乘以分割區數量，以位元組為單位計算主題保留。此外， 獨立於 `segment.ms`和 `segment.bytes`組態`retention.bytes configuration`運作。此外，如果 `retention.bytes` 設定為零，它會觸發新客群的滾動。  | 
|  retention.ms  |  若我們使用「刪除」保留政策，則此組態會控制在捨棄舊日誌區段以釋放空間之前保留日誌的時間上限。這表示消費者必須多快讀取其資料的 SLA。如果設定為 `-1`，則不會套用時間限制。此外，`retention.ms`組態會獨立於 `segment.ms`和 `segment.bytes`組態運作。此外，如果滿足`retention.ms`條件，它會觸發新客群的滾動。  | 