自訂 Amazon MSK組態 - Amazon Managed Streaming for Apache Kafka

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

自訂 Amazon MSK組態

您可以使用 Amazon MSK 來建立自訂MSK組態,並在其中設定下列屬性。未明確設定其值的屬性將採用 預設 Amazon MSK組態 內的值。如需組態屬性的詳細資訊,請參閱 Apache Kafka 組態

Apache Kafka 組態屬性
名稱 描述
allow.everyone.if.no.acl.found 如果您想要將此屬性設定為 false,請先確定已ACLs為叢集定義 Apache Kafka。如果您將此屬性設定為 ,false而且未先定義 Apache Kafka ACLs,則會失去對叢集的存取權。如果發生這種狀況,您可以再次更新組態並將此屬性設定為 true,以重新獲得對叢集的存取權。
auto.create.topics.enable 啟用伺服器的主題自動建立功能。
compression.type 特定主題的最終壓縮類型。您可將此屬性設定為標準壓縮轉碼器 (gzipsnappylz4zstd)。它還可接受 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 保留時段外的區段預設清除政策。以逗號分隔的有效政策清單。有效政策為 deletecompact。對於已啟用分層儲存的叢集,有效政策僅限 delete
log.flush.interval.messages 訊息排清到磁碟前,日誌分區上累積的訊息數量。
log.flush.interval.ms 訊息排清到磁碟前,主題訊息保留在記憶體內的時間上限 (毫秒)。如未設定此值,將採用 log.flush.scheduler.interval.ms 的值。最小值為 0。
log.message.timestamp.difference.max.ms 代理程式接收訊息的時間戳記與訊息中指定的時間戳記之時間差值上限。如果 log.message.timestamp.type=CreateTime,則如果時間戳記的差異超過此閾值,則會拒絕訊息。如果 log.message.timestamp.type=,則會忽略此組態LogAppendTime。
log.message.timestamp.type 指定訊息內的時間戳記是訊息建立時間還是日誌附加時間。允許的值為 CreateTimeLogAppendTime
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:10000

MaxValue = 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 版)
replica.socket.receive.buffer.bytes 網路請求的插槽接收緩衝。
socket.receive.buffer.bytes 通訊端伺服器通訊端的 SO_RCVBUF 緩衝區。您可以為此屬性設定的最小值為 -1。如果值為 -1,Amazon MSK會使用作業系統預設值。
socket.request.max.bytes 通訊端要求內的位元組數量上限。
socket.send.buffer.bytes 通訊端伺服器通訊端的 SO_SNDBUF 緩衝區。您可以為此屬性設定的最小值為 -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 的最後一次寫入後過了這段時間時IDs過期。如果由於主題的保留設定而刪除生產者 ID 的上次寫入,生產者IDs可能會提早過期。此屬性的最小值為 1 毫秒。
unclean.leader.election.enable 指示未位於 ISR 集合中的複本是否應作為最後一個補充的領導者,即使這可能會導致資料遺失。
zookeeper.connection.timeout.ms

ZooKeeper 模式叢集。用戶端等待建立 連線的時間上限 ZooKeeper。如未設定此值,將採用 zookeeper.session.timeout.ms 的值。

MinValue = 6000

MaxValue (包含) = 18000

zookeeper.session.timeout.ms

ZooKeeper 模式叢集。Apache ZooKeeper 工作階段逾時,以毫秒為單位。

MinValue = 6000

MaxValue (包含) = 18000

若要了解如何建立自訂MSK組態、列出所有組態或描述這些組態,請參閱 Amazon MSK組態操作。若要使用自訂MSK組態建立MSK叢集,或使用新的自訂組態更新叢集,請參閱 Amazon MSK:運作方式

當您使用自訂MSK組態更新現有MSK叢集時,Amazon 會在必要時進行MSK滾動重新啟動,並使用最佳實務將客戶停機時間降至最低。例如,在 Amazon MSK重新啟動每個代理程式之後,Amazon MSK 會嘗試讓代理程式在組態更新期間追蹤代理程式可能遺漏的資料,然後再移至下一個代理程式。

動態 Amazon MSK組態

除了 Amazon MSK提供的組態屬性之外,您還可以動態設定不需要代理程式重新啟動的叢集層級和代理程式層級組態屬性。您可以動態設定某些組態屬性。這些是在 Apache Kafka 文件內代理程式組態下表格中未標記為唯讀的組態屬性。如需有關動態組態及範例命令的資訊,請參閱 Apache Kafka 文件中的 Updating Broker Configs

注意

您可以設定 advertised.listeners 屬性,但不能設定 listeners 屬性。

主題層級 Amazon MSK組態

您可使用 Apache Kafka 命令來設定或修改新的和現有主題的主題層級組態屬性。如需有關主題層級組態屬性的詳細資訊及其設定範例,請參閱 Apache Kafka 文件中的 Topic-Level Configs

Amazon MSK組態狀態

Amazon MSK組態可以處於下列其中一種狀態。若要對組態執行操作,組態必須處於 ACTIVEDELETE_FAILED 狀態:

  • ACTIVE

  • DELETING

  • DELETE_FAILED