

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

# 自訂 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)。