

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

# Amazon MSK 佈建組態
<a name="msk-configuration"></a>

Amazon MSK 提供代理程式、主題和中繼資料節點的預設組態。您也可建立自訂組態，將其用於建立新的 MSK 叢集或更新現有叢集。MSK 組態包含一組屬性及其對應值。根據您在叢集中使用的代理程式類型，您可以修改不同的組態預設值集和不同的組態集。如需如何設定標準和快速代理程式的詳細資訊，請參閱以下各節。

**Topics**
+ [標準代理程式組態](msk-configuration-standard.md)
+ [快速代理程式組態](msk-configuration-express.md)
+ [中介裝置組態操作](msk-configuration-operations.md)

# 標準代理程式組態
<a name="msk-configuration-standard"></a>

本節說明標準代理程式的組態屬性。

**Topics**
+ [自訂 Amazon MSK 組態](msk-configuration-properties.md)
+ [預設 Amazon MSK 組態](msk-default-configuration.md)
+ [Amazon MSK 分層儲存主題層級組態的指導方針](msk-guidelines-tiered-storage-topic-level-config.md)

# 自訂 Amazon MSK 組態
<a name="msk-configuration-properties"></a>

您可以使用 Amazon MSK 建立自訂 MSK 組態，並在其中設定下列 Apache Kafka 組態屬性。未明確設定其值的屬性將採用 [預設 Amazon MSK 組態](msk-default-configuration.md) 內的值。如需組態屬性的詳細資訊，請參閱 [Apache Kafka 組態](https://kafka.apache.org/documentation/#configuration)。


| 名稱 | 描述 | 
| --- | --- | 
| allow.everyone.if.no.acl.found | 如果要將此屬性設定為 false，請先確定您已為叢集定義 Apache Kafka ACL。如果將此屬性設定為 false，但卻並未先定義 Apache Kafka ACL，您就會失去對叢集的存取權。如果發生這種狀況，您可以再次更新組態並將此屬性設定為 true，以重新獲得對叢集的存取權。 | 
| auto.create.topics.enable | 啟用伺服器的主題自動建立功能。 | 
| compression.type | 特定主題的最終壓縮類型。您可將此屬性設定為標準壓縮轉碼器 (gzip、snappy、lz4 和 zstd)。它還可接受 uncompressed。這個值相當於無壓縮。如果將該值設定為 producer，就代表保留生產者設定的原始壓縮轉碼器。 | 
|  connections.max.idle.ms  | 閒置連線逾時 (以毫秒計)。伺服器插槽處理器執行緒會關閉閒置時間超過此屬性設定值的連線。 | 
| default.replication.factor | 自動建立主題的預設複寫係數。 | 
| delete.topic.enable | 啟用刪除主題操作。若此設定關閉，您將無法透過管理員工具刪除主題。 | 
| group.initial.rebalance.delay.ms | 群組協調員在首次執行重新平衡前等待更多資料取用者加入新群組的時間。延遲越長，意味著重新平衡的次數越少，但處理開始前的等待時間會增加。 | 
| group.max.session.timeout.ms | 已註冊取用者工作階段逾時值上限。逾時值越大，讓取用者處理活動訊號間的訊息的時間越長，偵測故障耗費的時間也越長。 | 
| group.min.session.timeout.ms | 已註冊取用者工作階段逾時值下限。逾時值越小，故障偵測的速度越快，但取用者活動訊號會越頻繁。這可能會耗盡代理程式的資源。 | 
| leader.imbalance.per.broker.percentage | 每個代理程式允許的領導者不平衡比率。如果每個代理程式的控制器超過此值，控制器會觸發領導者不平衡。此值是以百分比指定。 | 
| log.cleaner.delete.retention.ms | 您希望 Apache Kafka 保留刪除記錄的時間。最小值為 0。 | 
| log.cleaner.min.cleanable.ratio |  此組態屬性的值介於 0 和 1 之間。此值決定日誌壓縮器嘗試清除日誌的頻率 (如果已啟用日誌壓縮)。根據預設，如果超過 50% 的日誌已壓縮，Apache Kafka 會避免清除日誌。這個比率限制了日誌重複浪費的空間上限 (如果是 50%，意味著最多 50% 的日誌可能是重複的)。比率越高，意味著清除作業次數越少但清除效率越高，但日誌中浪費的空間也越多。  | 
| log.cleanup.policy | 保留時段外的區段預設清除政策。以逗號分隔的有效政策清單。有效政策為 delete 和 compact。對於已啟用分層儲存的叢集，有效政策僅限 delete。 | 
| log.flush.interval.messages | 訊息排清到磁碟前，日誌分區上累積的訊息數量。 | 
| log.flush.interval.ms | 訊息排清到磁碟前，主題訊息保留在記憶體內的時間上限 (毫秒)。如未設定此值，將採用 log.flush.scheduler.interval.ms 的值。最小值為 0。 | 
| log.message.timestamp.difference.max.ms | Kafka 3.6.0 已棄用此組態。已新增兩個組態 log.message.timestamp.after.max.mslog.message.timestamp.before.max.ms和 。代理程式接收訊息的時間戳記與訊息中指定的時間戳記之時間差值上限。若 log.message.timestamp.type=CreateTime，且時間戳記差值超過此閾值，則訊息會被拒絕。若 log.message.timestamp.type=LogAppendTime，則此組態會被忽略。 | 
| log.message.timestamp.type | 指定訊息內的時間戳記是訊息建立時間還是日誌附加時間。允許的值為 CreateTime 和 LogAppendTime。 | 
| log.retention.bytes | 日誌被刪除前的大小上限。 | 
| log.retention.hours | 日誌檔案被刪除前的保留時數，為 log.retention.ms 屬性的第三順位值。 | 
| log.retention.minutes | 日誌檔案被刪除前的保留分鐘數，為 log.retention.ms 屬性的第二順位值。如未設定此值，將採用 log.retention.hours 的值。 | 
| log.retention.ms | 日誌檔案被刪除前的保留時間 (毫秒)，如未設定，將採用 log.retention.minutes 的值。 | 
| log.roll.ms | 新日誌區段推出前的最長時間 (毫秒)。如未設定此屬性，將採用 log.roll.hours 的值。此屬性的最小可能值為 1。 | 
| log.segment.bytes | 單一日誌檔案的大小上限。 | 
| max.incremental.fetch.session.cache.slots | 所保持的增量擷取工作階段數量上限。 | 
| message.max.bytes |  Kafka 允許的最大記錄批次大小。若此值增加，且有取用者的版本低於 0.10.2，則必須上調取用者的擷取大小，取用者才能擷取此大小的記錄批次。 在最新的訊息格式版本中，訊息一律會分組進不同批次，以增進效率。在之前的訊息格式版本中，未壓縮的記錄不會分組進批次，當時，此限制僅適用於單一記錄。 可使用主題層級 max.message.bytes 組態，為每個主題設定此值。  | 
| min.insync.replicas |  生產者將 ACK 設定為 `"all"` (或 `"-1"`) 時，min.insync.replicas 的值會指定寫入視為成功前，須接受的最小複本數量。若無法達成此最小值，則生產者會引發例外狀況 (NotEnoughReplicas 或 NotEnoughReplicasAfterAppend)。 您可以利用 min.insync.replicas 和 ACK 當中的值強制執行更大數量的耐久性保證。例如，您可以建立複寫係數為 3 的主題，將 min.insync.replicas 設定為 2，ACK 設為 `"all"` 來產生。若多數複本未接收寫入，如此可確保生產者會引發例外狀況。  | 
| num.io.threads | 伺服器用於處理要求的執行緒數量，可能包含磁碟 I/O。 | 
| num.network.threads | 伺服器從網路接收請求並對其傳送回應所用的執行緒數量。 | 
| num.partitions | 每個主題的日誌磁碟分割預設數量。 | 
| num.recovery.threads.per.data.dir | 啟動時日誌復原和關機時排清日誌所用的每個資料目錄執行緒數量。 | 
| num.replica.fetchers | 從來源代理程式複寫訊息所用的擷取執行緒數量。此值若增加，追隨代理程式的 I/O 平行處理程度會增加。 | 
| offsets.retention.minutes | 取用者群組遺失所有取用者 (即變為空白) 後，其偏移會保留此值指定的時間，之後才會被捨棄。對獨立 (即手動指派) 取用者而言，偏移會在最後一次遞交加上此保留期間後過期。 | 
| offsets.topic.replication.factor | 偏移主題的複寫係數。將此值設定得更高能確保可用性。在叢集大小符合此複寫係數要求前，內部主題建立會失敗。 | 
| replica.fetch.max.bytes | 每個分割區嘗試擷取之訊息位元組數。此非絕對數量上限。若擷取的第一個非空白分區的第一個記錄批次大於此值，則會傳回此記錄批次，確保進度。message.max.bytes (代理程式組態) 或 max.message.bytes (主題組態) 會定義代理程式接受的記錄批次大小上限。 | 
| replica.fetch.response.max.bytes | 整個擷取回應預期的位元組數量上限。記錄會分批次擷取，若擷取的第一個非空白分區的第一個記錄批次大於此值，則會傳回此記錄批次，確保進度。此非絕對數量上限。message.max.bytes (代理程式組態) 或 max.message.bytes (主題組態) 屬性會指定代理程式接受的最大記錄批次大小。 | 
| replica.lag.time.max.ms | 如果追隨者並未傳送任何擷取請求，或是並未在至少這個毫秒數，使用到領導者的日誌端偏移上限，則領導者會從 ISR 中移除跟隨者。MinValue：10000MaxValue = 30000 | 
| replica.selector.class | 實作 ReplicaSelector 的完整類別名稱。代理程式會使用此值尋找偏好的讀取複本。如果您使用 Apache Kafka 2.4.1 及以上版本，且想要允許取用者從最接近的複本進行擷取，請將此屬性設為 org.apache.kafka.common.replica.RackAwareReplicaSelector。如需詳細資訊，請參閱[Apache Kafka 2.4.1 版 (改為使用 2.4.1.1 版)](supported-kafka-versions.md#2.4.1)。 | 
| replica.socket.receive.buffer.bytes | 網路請求的插槽接收緩衝。 | 
| socket.receive.buffer.bytes | 通訊端伺服器通訊埠的 SO\$1RCVBUF 緩衝區。您可以為此屬性設定的最小值為 -1。如果值為 -1，則 Amazon MSK 會使用作業系統預設值。 | 
| socket.request.max.bytes | 通訊端要求內的位元組數量上限。 | 
| socket.send.buffer.bytes | 通訊端伺服器通訊埠的 SO\$1SNDBUF 緩衝區。您可以為此屬性設定的最小值為 -1。如果值為 -1，則 Amazon MSK 會使用作業系統預設值。 | 
| transaction.max.timeout.ms | 交易的最大逾時值。若用戶端請求的交易時間超過此值，代理程式會在 InitProducerIdRequest 中傳回錯誤。如此可避免用戶端逾時時間過長，拖延取用者讀取交易中的主題。 | 
| transaction.state.log.min.isr | 覆寫交易主題的 min.insync.replicas 組態。 | 
| transaction.state.log.replication.factor | 交易主題的複寫係數。設定此屬性為更高的值，能增加可用性。在叢集大小符合此複寫係數要求前，內部主題建立會失敗。 | 
| transactional.id.expiration.ms | 在交易協調器將交易 ID 視為過期之前，等待接收目前交易的交易狀態更新所用的時間 (毫秒)。此設定也會影響生產者 ID 過期時間，因為只要在指定生產者 ID 上次寫入後過了這麼多時間，該生產者 ID 就會過期。如果生產者 ID 的上次寫入由於主題的保留設定而被刪除，該生產者 ID 可能會提早過期。此屬性的最小值為 1 毫秒。 | 
| unclean.leader.election.enable | 指示不在 ISR 集中的複本是否應該作為領導者與最後手段，即使這可能會導致資料遺失。 | 
| zookeeper.connection.timeout.ms | ZooKeeper 模式叢集。用戶端與 ZooKeeper 建立連線的等待時間上限。如未設定此值，將採用 zookeeper.session.timeout.ms 的值。 MinValue = 6000 MaxValue (包含) = 18000 我們建議您在 T3.small 上將此值設定為 10，000，以避免叢集停機。  | 
| zookeeper.session.timeout.ms |  ZooKeeper 模式叢集。以毫秒為單位的 Apache ZooKeeper 工作階段逾時。 MinValue = 6000 MaxValue (包含) = 18000  | 

若要了解如何建立自訂 MSK 組態、列出所有組態或描述它們，請參閱 [中介裝置組態操作](msk-configuration-operations.md)。若要使用自訂 MSK 組態建立 MSK 叢集，或使用新的自訂組態更新叢集，請參閱[Amazon MSK 主要功能和概念](operations.md)。

使用自訂 MSK 組態更新現有 MSK 叢集時，Amazon MSK 會在必要時以滾動方式重新啟動，並依最佳實務最小化客戶停機時間。例如，Amazon MSK 重新啟動每個代理程式後，會試圖讓每個代理程式補上組態更新期間錯過的資料，之後才會移往下一個代理程式。

## 動態 Amazon MSK 組態
<a name="msk-dynamic-confinguration"></a>

除了 Amazon MSK 提供的組態屬性，您亦可動態設定無須重新啟動代理程式的叢集層級和代理程式層級的組態屬性。您可以動態設定某些組態屬性。這些是在 Apache Kafka 文件內[代理程式組態](https://kafka.apache.org/documentation/#brokerconfigs)下表格中未標記為唯讀的組態屬性。如需有關動態組態及範例命令的資訊，請參閱 Apache Kafka 文件中的 [Updating Broker Configs](https://kafka.apache.org/documentation/#dynamicbrokerconfigs)。

**注意**  
您可以設定 `advertised.listeners` 屬性，但不能設定 `listeners` 屬性。

## 主題層級 Amazon MSK 組態
<a name="msk-topic-confinguration"></a>

您可使用 Apache Kafka 命令來設定或修改新的和現有主題的主題層級組態屬性。如需有關主題層級組態屬性的詳細資訊及其設定範例，請參閱 Apache Kafka 文件中的 [Topic-Level Configs](https://kafka.apache.org/documentation/#topicconfigs)。

# 預設 Amazon MSK 組態
<a name="msk-default-configuration"></a>

建立 MSK 叢集且未指定自訂 MSK 組態時，Amazon MSK 會建立並使用預設組態，組態中的值則列於下表中。對於不在此表格中的屬性，Amazon MSK 會使用與您的 Apache Kafka 版本相關聯的預設值。如需這些預設值的清單，請參閱 [Apache Kafka Configuration](https://kafka.apache.org/documentation/#configuration)。


| 名稱 | 描述 | 非分層儲存叢集的預設值 | 已啟用分層儲存之叢集的預設值 | 
| --- | --- | --- | --- | 
| allow.everyone.if.no.acl.found | 如果沒有資源模式符合特定資源，資源就沒有相關聯的 ACL。在此情況下，若此屬性設定為 true，則所有使用者均可存取資源，而非僅限超級使用者。 | true | true | 
| auto.create.topics.enable | 在伺服器上啟用主題自動建立功能。 | false | false | 
| auto.leader.rebalance.enable | 啟用自動領導者平衡。背景執行緒會視需要以固定間隔檢查並啟動領導者平衡。 | true | true | 
| default.replication.factor | 自動建立主題的預設複寫係數。 | 如果是 3 個可用區域中的叢集，則是 3，如果是 2 個可用區域中的叢集，則是 2。 | 如果是 3 個可用區域中的叢集，則是 3，如果是 2 個可用區域中的叢集，則是 2。 | 
|  local.retention.bytes  |  刪除舊區段之前分區的本機日誌區段大小上限。如未設定此值，將採用 log.retention.bytes 的值。有效值應該一律小於或等於 log.retention.bytes 值。預設值 -2 指示本機保留沒有限制。這對應於 -1 的 retention.ms/bytes 設定值。local.retention.ms 和 local.retention.bytes 的屬性與 log.retention 類似，因為它們都是用於確定日誌區段應該在本地儲存保留多長時間。現有的 log.retention.\$1 組態是主題分區的保留組態。這同時包括本地和遠程儲存。有效值：[-2; \$1Inf] 中的整數  | -2 表示無限制 | -2 表示無限制 | 
|  local.retention.ms  | 本機日誌區段刪除前保留的時間 (毫秒)。如未設定此值，Amazon MSK 將採用 log.retention.ms 的值。有效值應該一律小於或等於 log.retention.bytes 值。預設值 -2 指示本機保留沒有限制。這對應於 -1 的 retention.ms/bytes 設定值。local.retention.ms 和 local.retention.bytes 的值類似 log.retention。MSK 會使用此組態來確定日誌區段應該在本地儲存保留多長時間。現有的 log.retention.\$1 組態是主題分區的保留組態。這同時包括本地和遠程儲存。有效值為大於 0 的整數。 | -2 表示無限制 | -2 表示無限制 | 
|  log.message.timestamp.difference.max.ms  | Kafka 3.6.0 已棄用此組態。已新增兩個組態 log.message.timestamp.after.max.mslog.message.timestamp.before.max.ms和 。代理程式接收訊息的時間戳記與訊息中指定的時間戳記之最大允許差值。若 log.message.timestamp.type=CreateTime，且時間戳記差值超過此閾值，則訊息將被拒絕。若 log.message.timestamp.type=LogAppendTime，則此組態會被忽略。允許的時間戳記差值上限不應該大於 log.retention.ms，以避免不必要地頻繁滾動日誌。 | 9223372036854775807 | 86400000 表示 Kafka 2.8.2.tiered 和 Kafka 3.7.x 分層。 | 
| log.segment.bytes | 單一日誌檔案的大小上限。 | 1073741824 | 134217728 | 
| min.insync.replicas |  生產者將 ACK (生產者從 Kafka 代理程式獲取的確認) 值設定為 `"all"` (或 `"-1"`) 後，min.insync.replicas 的值會指定確認寫入視為成功前，須接受的複本數量下限。若未達到此下限，則生產者會引發例外狀況 (NotEnoughReplicas 或 NotEnoughReplicasAfterAppend)。 若同時使用 min.insync.replicas 和 ACK 的值，您可強制執行更大數量的耐用性保證。例如，您可以建立複寫係數為 3 的主題，將 min.insync.replicas 設定為 2，ACK 設為 `"all"` 來產生。若多數複本未接收寫入，如此可確保生產者會引發例外狀況。  | 如果是 3 個可用區域中的叢集，則是 2，如果是 2 個可用區域中的叢集，則是 1。 | 如果是 3 個可用區域中的叢集，則是 2，如果是 2 個可用區域中的叢集，則是 1。 | 
| num.io.threads | 伺服器用於生產請求的執行緒數量，可能包含磁碟 I/O。 | 8 | 最大值 (8 個，vCPU)，vCPU 數量取決於代理程式的執行個體大小 | 
| num.network.threads | 伺服器用來從網路接收請求並將回應傳送到網路的執行緒數量。 | 5 | 最大值 (5 個，vCPU/2 個)，vCPU 數量取決於代理程式的執行個體大小 | 
| num.partitions | 每個主題的日誌磁碟分割預設數量。 | 1 | 1 | 
| num.replica.fetchers | 用於從來源代理程式複寫訊息的擷取器執行緒數量。增加此值就可以增加追隨代理程式中的 I/O 平行處理程度。 | 2 | 最大值 (2 個，vCPU/4 個)，vCPU 數量取決於代理程式的執行個體大小 | 
|  remote.log.msk.disable.policy  |  與 remote.storage.enable 搭配使用以停用分層儲存。將此政策設定為「刪除」即指示，當您將 remote.storage.enable 設定為 false 時，會刪除分層儲存中的資料。  | N/A | 無 | 
| remote.log.reader.threads | 遠端日誌讀取器執行緒集區大小，用於排程從遠端儲存擷取資料的任務。 | N/A | 最大值 (10 個，vCPU \$1 0.67)，vCPU 數量取決於代理程式的執行個體大小 | 
|  remote.storage.enable  | 如果設定為 true，會啟用主題的分層 (遠端) 儲存。如果設定為 false 且 remote.log.msk.disable.policy 設定為「刪除」，會停用主題層級分層儲存。停用分層儲存時，會從遠端儲存刪除資料。主題的分層儲存停用後就無法再次啟用。 | false | false | 
| replica.lag.time.max.ms | 如果追隨者並未傳送任何擷取請求，或是並未在至少這個毫秒數，使用到領導者的日誌端偏移上限，則領導者會從 ISR 中移除跟隨者。 | 30000 | 30000 | 
|  retention.ms  |  必要欄位。最短時間為 3 天。沒有預設值，因為該設定是強制性的。 Amazon MSK 使用保留 retention.ms 的值搭配 local.retention.ms 來確定資料從本機移至分層儲存的時間。local.retention.ms 的值指定何時將資料從本地移至分層儲存。retention.ms 值指定何時從分層儲存中移除資料 （也就是從叢集中移除）。有效值：[-1; \$1Inf] 中的整數  | 至少 259,200,000 毫秒 (3 天)。-1 表示無限保留。 | 至少 259,200,000 毫秒 (3 天)。-1 表示無限保留。 | 
| socket.receive.buffer.bytes | 通訊端伺服器通訊埠的 SO\$1RCVBUF 緩衝區。若此值為 -1，將採用 OS 預設值。 | 102400 | 102400 | 
| socket.request.max.bytes | 通訊端要求內的位元組數量上限。 | 104857600 | 104857600 | 
| socket.send.buffer.bytes | 通訊端伺服器通訊埠的 SO\$1SNDBUF 緩衝區。若此值為 -1，將採用 OS 預設值。 | 102400 | 102400 | 
| unclean.leader.election.enable | 指示您是否不在 ISR 集中的複本作為領導者與最後手段，即使這可能會導致資料遺失。 | true | false | 
| zookeeper.session.timeout.ms |  以毫秒為單位的 Apache ZooKeeper 工作階段逾時。  | 18000 | 18000 | 
| zookeeper.set.acl | 設定使用安全 ACL的用戶端。 | false | false | 

如需如何指定自訂組態值的資訊，請參閱 [自訂 Amazon MSK 組態](msk-configuration-properties.md)。

# Amazon MSK 分層儲存主題層級組態的指導方針
<a name="msk-guidelines-tiered-storage-topic-level-config"></a>

以下是您在主題層級設定分層儲存時的預設設定和限制。
+ 對於已啟用分層儲存的主題，Amazon MSK 不支援較小的日誌區段大小。如果您要建立區段，最小日誌區段大小為 48 MiB，或最小區段滾動時間為 10 分鐘。這些值會對應 segment.bytes 和 segment.ms 屬性。
+ local.retention.ms/bytes 的值不能等於或超過 retention.ms/bytes 的值。這是分層儲存保留設定。
+ local.retention.ms/bytes 的預設值為 -2。這意味著 retention.ms 的值會用於 local.retention.ms/bytes。在這種情況下，資料會同時保留在本機儲存和分層儲存 (每個儲存中一個副本) 中，而且會同時過期。對於此選項，本機資料的副本會保留至遠端儲存。在這種情況下，從取用流量讀取的資料來自本地儲存。
+ retention.ms 的預設值為 7 天。retention.bytes 沒有預設大小限制。
+ retention.ms/bytes 的最小值為 -1。這意味著無限保留。
+ local.retention.ms/bytes 的最小值為 -2。這意味著在本地儲存中無限保留。它與 retention.ms/bytes 設定為 -1 時相符。
+ 對於已啟用分層儲存的主題，主題層級組態 retention.ms 是強制性的。retention.ms 最小值為 3 天。

如需分層儲存限制的詳細資訊，請參閱 [Amazon MSK 叢集的分層儲存限制和約束](msk-tiered-storage.md#msk-tiered-storage-constraints)。

# 快速代理程式組態
<a name="msk-configuration-express"></a>

Apache Kafka 有數百個代理程式組態，可用來調校 MSK 佈建叢集的效能。設定錯誤或次佳的值可能會影響叢集的可靠性和效能。快速代理程式透過設定關鍵組態的最佳值並保護它們免受常見的錯誤組態影響，來改善 MSK 佈建叢集的可用性和耐久性。根據讀取和寫入存取，有三種組態類別：[讀取/寫入 （可編輯）](msk-configuration-express-read-write.md)、[唯讀](msk-configuration-express-read-only.md)和非讀取/寫入組態。有些組態仍會針對叢集正在執行的 Apache Kafka 版本使用 Apache Kafka 的預設值。我們將這些標記為 Apache Kafka 預設。

**Topics**
+ [自訂 MSK Express 代理程式組態 （讀取/寫入存取）](msk-configuration-express-read-write.md)
+ [Express 代理程式唯讀組態](msk-configuration-express-read-only.md)

# 自訂 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`條件，它會觸發新客群的滾動。  | 

# Express 代理程式唯讀組態
<a name="msk-configuration-express-read-only"></a>

Amazon MSK 會設定這些組態的值，並保護它們免受可能影響叢集可用性的變更。這些值可能會根據叢集上執行的 Apache Kafka 版本而變更，因此請記得檢查特定叢集中的值。

下表列出 Express 代理程式的唯讀組態。


| 屬性 | Description | Express Broker 值 | 
| --- | --- | --- | 
| broker.id | 此伺服器的中介裝置 ID。 | 1，2，3... | 
| broker.rack | 代理程式的機架。這將用於容錯能力的機架感知複寫指派。範例：`RACK1`、`us-east-1d` | AZ ID 或子網路 ID | 
|  default.replication.factor  |  所有主題的預設複寫因素。  |  3  | 
| fetch.max.bytes | 為擷取請求傳回的最大位元組數。 | Apache Kafka 預設 | 
| group.max.size | 單一取用者群組可容納的取用者數量上限。 | Apache Kafka 預設 | 
| inter.broker.listener.name | 用於代理程式之間通訊的接聽程式名稱。 | REPLICATION\$1SECURE 或 REPLICATION | 
| inter.broker.protocol.version | 指定使用哪個版本的中介協定。 | Apache Kafka 預設 | 
| 接聽程式 | 接聽程式清單 - 我們將接聽的 URIs 逗號分隔清單和接聽程式名稱。您可以設定 advertised.listeners property，但不能設定 listeners 屬性。 | MSK 產生的 | 
| log.message.format.version | 指定代理程式用來將訊息附加至日誌的訊息格式版本。 | Apache Kafka 預設 | 
| min.insync.replicas | 當生產者將 ack 設定為 `all`（或 `-1`) 時， 中的值會`min.insync.replicas`指定必須確認寫入才能視為成功的複本數目下限。如果無法達到此最小值，生產者會引發例外狀況 ( `NotEnoughReplicas`或 `NotEnoughReplicasAfterAppend`)。 您可以使用生產者提供的 ack 值來強制執行更高的耐用性保證。透過將 acks 設定為「全部」。若多數複本未接收寫入，如此可確保生產者會引發例外狀況。 | 2 | 
| num.io.threads | 伺服器用來產生請求的執行緒數量，其中可能包括磁碟 I/O. (m7g.large， 8)、(m7g.xlarge， 8)、(m7g.2xlarge， 16)、(m7g.4xlarge， 32)、(m7g.8xlarge， 64)、(m7g.12xlarge， 96)、(m7g.16xlarge， 128) | 根據執行個體類型。=Math.max(8， 2 \$1 vCPUs | 
| num.network.threads | 伺服器用來從網路接收請求並將回應傳送到網路的執行緒數目。(m7g.large， 8)、(m7g.xlarge， 8)、(m7g.2xlarge， 8)、(m7g.4xlarge， 16)、(m7g.8xlarge， 32)、(m7g.12xlarge， 48)、(m7g.16xlarge， 64) | 根據執行個體類型。=Math.max(8， vCPUs | 
| replica.fetch.response.max.bytes | 整個擷取回應預期的位元組數量上限。記錄會分批次擷取，若擷取的第一個非空白分區的第一個記錄批次大於此值，則會傳回此記錄批次，確保進度。此非絕對數量上限。message.max.bytes （代理程式組態） 或 max.message.bytes（主題組態） 屬性指定代理程式接受的記錄批次大小上限。 | Apache Kafka 預設 | 
| request.timeout.ms | 組態控制用戶端等待請求回應的時間上限。如果在逾時之前未收到回應，用戶端將視需要重新傳送請求，如果重試用盡，則請求會失敗。 | Apache Kafka 預設 | 
| transaction.state.log.min.isr | 交易主題的覆寫min.insync.replicas組態。 | 2 | 
| transaction.state.log.replication.factor | 交易主題的複寫係數。 | Apache Kafka 預設 | 
| unclean.leader.election.enable | 允許不在 ISR 集合中的複本做為最後手段的領導者，即使這可能會導致資料遺失。 | FALSE | 

# 中介裝置組態操作
<a name="msk-configuration-operations"></a>

Apache Kafka 代理程式組態為靜態或動態。靜態組態需要重新啟動代理程式，才能套用組態。動態組態不需要重新啟動代理程式，即可更新組態。如需組態屬性和更新模式的詳細資訊，請參閱 Apache Kafka 組態。

此主題說明如何建立自訂 MSK 組態，以及如何對其執行操作。如需如何使用 MSK 組態來建立或更新叢集的資訊，請參閱 [Amazon MSK 主要功能和概念](operations.md)。

**Topics**
+ [建立組態](msk-configuration-operations-create.md)
+ [更新組態](msk-configuration-operations-update.md)
+ [刪除組態](msk-configuration-operations-delete.md)
+ [取得組態中繼資料](msk-configuration-operations-describe.md)
+ [取得組態修訂的詳細資訊](msk-configuration-operations-describe-revision.md)
+ [列出您帳戶中目前區域的組態](msk-configuration-operations-list.md)
+ [Amazon MSK 組態狀態](msk-configuration-states.md)

# 建立組態
<a name="msk-configuration-operations-create"></a>

此程序說明如何建立自訂 Amazon MSK 組態，以及如何對其執行操作。

1. 建立一個檔案，在其中指定欲設定的組態屬性及欲指派的值。以下為範例組態檔案的內容。

   ```
   auto.create.topics.enable = true
   
   log.roll.ms = 604800000
   ```

1. 執行下列 AWS CLI 命令，並將 *config-file-path* 取代為您在上一個步驟中儲存組態之檔案的路徑。
**注意**  
您為組態選擇的名稱必須符合以下規則運算式："^[0-9A-Za-z][0-9A-Za-z-]\$10,\$1\$1"。

   ```
   aws kafka create-configuration --name "ExampleConfigurationName" --description "Example configuration description." --kafka-versions "1.1.1" --server-properties fileb://config-file-path
   ```

   以下是執行此命令後成功回應的範例。

   ```
   {
       "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-1234-abcd-1234-abcd123e8e8e-1",
       "CreationTime": "2019-05-21T19:37:40.626Z",
       "LatestRevision": {
           "CreationTime": "2019-05-21T19:37:40.626Z",
           "Description": "Example configuration description.",
           "Revision": 1
       },
       "Name": "ExampleConfigurationName"
   }
   ```

1. 上一個命令會傳回新組態的 Amazon Resource Name (ARN)。儲存此 ARN，因為其他命令須用其來參照此組態。若您遺失組態 ARN，可列出帳戶內的所有組態來找到它。

# 更新組態
<a name="msk-configuration-operations-update"></a>

此程序說明如何更新自訂 Amazon MSK 組態。

1. 建立一個檔案，在其中指定欲更新的組態屬性及欲指派的值。以下為範例組態檔案的內容。

   ```
   auto.create.topics.enable = true
   
   min.insync.replicas = 2
   ```

1. 執行下列 AWS CLI 命令，使用您在上一步中儲存組態的檔案路徑取代 *config-file-path*。

   使用建立組態時取得的 ARN 取代 *configuration-arn*。若您建立組態時未儲存 ARN，則可使用 `list-configurations` 命令來列出帳戶內的所有組態。清單中列出的所需組態會顯示在回應中。組態 ARN 也會出現於該清單中。

   ```
   aws kafka update-configuration --arn configuration-arn --description "Example configuration revision description." --server-properties fileb://config-file-path
   ```

1. 以下是執行此命令後成功回應的範例。

   ```
   {
       "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-1234-abcd-1234-abcd123e8e8e-1",
       "LatestRevision": {
           "CreationTime": "2020-08-27T19:37:40.626Z",
           "Description": "Example configuration revision description.",
           "Revision": 2
       }
   }
   ```

# 刪除組態
<a name="msk-configuration-operations-delete"></a>

下列程序說明如何刪除未連接至叢集的組態。您無法刪除連接至叢集的組態。

1. 若要執行此範例，請使用建立組態時取得的 ARN 取代 *configuration-arn*。若您建立組態時未儲存 ARN，則可使用 `list-configurations` 命令來列出帳戶內的所有組態。清單中列出的所需組態會顯示在回應中。組態 ARN 也會出現於該清單中。

   ```
   aws kafka delete-configuration --arn configuration-arn
   ```

1. 以下是執行此命令後成功回應的範例。

   ```
   {
       "arn": " arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-1234-abcd-1234-abcd123e8e8e-1",
       "state": "DELETING"
   }
   ```

# 取得組態中繼資料
<a name="msk-configuration-operations-describe"></a>

下列程序說明如何描述 Amazon MSK 組態，以取得組態的中繼資料。

1. 下列命令會傳回組態的中繼資料。若要取得組態的詳細描述，請執行 `describe-configuration-revision`。

   若要執行此範例，請使用建立組態時取得的 ARN 取代 *configuration-arn*。若您建立組態時未儲存 ARN，則可使用 `list-configurations` 命令來列出帳戶內的所有組態。清單中列出的所需組態會顯示在回應中。組態 ARN 也會出現於該清單中。

   ```
   aws kafka describe-configuration --arn configuration-arn
   ```

1. 以下是執行此命令後成功回應的範例。

   ```
   {
       "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-abcd-1234-abcd-abcd123e8e8e-1",
       "CreationTime": "2019-05-21T00:54:23.591Z",
       "Description": "Example configuration description.",
       "KafkaVersions": [
           "1.1.1"
       ],
       "LatestRevision": {
           "CreationTime": "2019-05-21T00:54:23.591Z",
           "Description": "Example configuration description.",
           "Revision": 1
       },
       "Name": "SomeTest"
   }
   ```

# 取得組態修訂的詳細資訊
<a name="msk-configuration-operations-describe-revision"></a>

此程序會為您提供 Amazon MSK 組態修訂的詳細說明。

如果您使用 `describe-configuration` 命令來描述 MSK 組態，您會看到組態的中繼資料。若要取得組態的描述，請改用此命令：`describe-configuration-revision`。
+ 執行下列命令，請使用建立組態時取得的 ARN 取代 *configuration-arn*。若您建立組態時未儲存 ARN，則可使用 `list-configurations` 命令來列出帳戶內的所有組態。清單中列出的所需組態會顯示在回應中。組態 ARN 也會出現於該清單中。

  ```
  aws kafka describe-configuration-revision --arn configuration-arn --revision 1
  ```

  以下是執行此命令後成功回應的範例。

  ```
  {
      "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-abcd-1234-abcd-abcd123e8e8e-1",
      "CreationTime": "2019-05-21T00:54:23.591Z",
      "Description": "Example configuration description.",
      "Revision": 1,
      "ServerProperties": "YXV0by5jcmVhdGUudG9waWNzLmVuYWJsZSA9IHRydWUKCgp6b29rZWVwZXIuY29ubmVjdGlvbi50aW1lb3V0Lm1zID0gMTAwMAoKCmxvZy5yb2xsLm1zID0gNjA0ODAwMDAw"
  }
  ```

  `ServerProperties` 的值採用 Base64 編碼。若您使用 Base64 解碼器 (如 https://www.base64decode.org/) 來手動解碼，則會取得用來建立自訂組態的原始組態檔案內容。在此情況下，您會取得下列內容：

  ```
  auto.create.topics.enable = true
  
  log.roll.ms = 604800000
  ```

# 列出您帳戶中目前區域的組態
<a name="msk-configuration-operations-list"></a>

此程序說明如何列出您帳戶中目前 AWS 區域的所有 Amazon MSK 組態。
+ 執行下列命令。

  ```
  aws kafka list-configurations
  ```

  以下是執行此命令後成功回應的範例。

  ```
  {
      "Configurations": [
          {
              "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-abcd-1234-abcd-abcd123e8e8e-1",
              "CreationTime": "2019-05-21T00:54:23.591Z",
              "Description": "Example configuration description.",
              "KafkaVersions": [
                  "1.1.1"
              ],
              "LatestRevision": {
                  "CreationTime": "2019-05-21T00:54:23.591Z",
                  "Description": "Example configuration description.",
                  "Revision": 1
              },
              "Name": "SomeTest"
          },
          {
              "Arn": "arn:aws:kafka:us-east-1:123456789012:configuration/SomeTest/abcdabcd-1234-abcd-1234-abcd123e8e8e-1",
              "CreationTime": "2019-05-03T23:08:29.446Z",
              "Description": "Example configuration description.",
              "KafkaVersions": [
                  "1.1.1"
              ],
              "LatestRevision": {
                  "CreationTime": "2019-05-03T23:08:29.446Z",
                  "Description": "Example configuration description.",
                  "Revision": 1
              },
              "Name": "ExampleConfigurationName"
          }
      ]
  }
  ```

# Amazon MSK 組態狀態
<a name="msk-configuration-states"></a>

Amazon MSK 組態可以是下列狀態之一。若要對組態執行操作，組態必須處於 `ACTIVE` 或 `DELETE_FAILED` 狀態：
+ `ACTIVE`
+ `DELETING`
+ `DELETE_FAILED`