本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Amazon MSK叢集進行故障診斷
下列資訊可協助您疑難排解 Amazon MSK叢集可能發生的問題。您也可以將您的問題張貼到 AWS re:Post
主題
- 磁碟區取代因複寫過載而導致磁碟飽和
- 取用者群組停滯在 PreparingRebalance 狀態
- 將代理程式日誌傳送至 Amazon CloudWatch Logs 時發生錯誤
- 沒有預設安全群組
- 叢集似乎卡在 CREATING 狀態
- 叢集狀態從 CREATING變成 FAILED
- 叢集狀態為 ACTIVE,但生產者無法傳送資料或取用者無法接收資料
- AWS CLI 無法辨識 Amazon MSK
- 分割區離線或複本不同步
- 磁碟空間不足
- 記憶體不足
- 生產者取得 NotLeaderForPartitionException
- 大於零的複寫不足分割區 (URP)
- 叢集具有名為 __amazon_msk_canary 和 __amazon_msk_canary_state 的主題
- 分區複寫失敗
- 無法存取已開啟公開存取的叢集
- 無法從 內存取叢集 AWS:網路問題
- 身分驗證失敗:太多連線
- MSK 無伺服器:叢集建立失敗
磁碟區取代因複寫過載而導致磁碟飽和
在意外磁碟區硬體故障期間,Amazon MSK可能會將磁碟區取代為新的執行個體。Kafka 透過從叢集中的其他代理程式複寫分割區來重新填入新磁碟區。複寫並擷取分割區後,它們就有資格取得領導和同步複本 (ISR) 成員資格。
問題
在從磁碟區取代中復原的代理程式中,有些大小不同的分割區可能會比其他分割區先恢復上線。這可能會有問題,因為這些分割區可能從仍在擷取 (複寫) 其他分割區的相同代理程式提供流量。此複寫流量有時可能會使基礎磁碟區輸送量限制飽和,在預設情況下為每秒 250 MiB。發生此飽和時,任何已擷取的分割區都會受到影響,導致ISR與已擷取分割區共用的代理程式在叢集中延遲 (不只是由於遠端 acks 而導致的領導分割區acks=all
)。此問題較常見於大小不一且分割區數量較大的大型叢集。
建議
若要改善複寫 I/O 狀態,請確定最佳實務執行緒設定已就位。
若要降低基礎磁碟區飽和的可能性,請啟用輸送量較高的佈建儲存。對於高輸送量複寫案例,建議最小輸送量值為 500 MiB /s,但所需的實際值會因輸送量和使用案例而有所不同。 為 Amazon MSK叢集中的代理程式佈建儲存輸送量
若要將複寫壓力降至最低,請降低
num.replica.fetchers
至預設值2
。
取用者群組停滯在 PreparingRebalance
狀態
如果您的一個或多個取用者群組卡在永久重新平衡狀態,原因可能是 Apache Kafka 問題 KAFKA-9752
若要解決此問題,建議您將叢集升級至 Amazon MSK 錯誤修正 2.4.1.1 版,其中包含此問題的修正程式。如需將現有叢集更新至 Amazon MSK Bug-fix 2.4.1.1 版的相關資訊,請參閱 更新 Apache Kafka 版本。
在不將叢集升級至 Amazon MSK 錯誤修正版本 2.4.1.1 的情況下解決此問題的解決方法是將 Kafka 用戶端設定為使用 靜態成員通訊協定 ,或將 設定為卡住取用者群組的辨識與重新啟動協調代理節點。
實施靜態成員通訊協定
若要在您的用戶端實施靜態成員通訊協定,請執行以下操作:
將 Kafka Consumers
組態的 group.instance.id
屬性設定為靜態字串,且其可辨識群組中的取用者。確保組態的其他執行個體已更新為使用靜態字串。
將變更部署到您的 Kafka 取用者。
如果用戶端組態中的工作階段逾時設定的值足以讓取用者復原,而不過早觸發取用者群組再平衡,則使用靜態成員通訊協定會比較有效。例如,如果您的取用者應用程式可以容忍無法使用 5 分鐘,則工作階段逾時的合理值將是 4 分鐘,而不是 10 秒的預設值。
注意
使用靜態成員通訊協定只會降低遇到此問題的可能性。即使使用靜態成員通訊協定,您仍可能會遇到此問題。
重新啟動協調代理程式節點
若要重啟協調代理程式節點,請執行下列操作:
使用
kafka-consumer-groups.sh
指令辨識群組協調器。使用 RebootBrokerAPI動作重新啟動停滯取用者的群組協調器。
將代理程式日誌傳送至 Amazon CloudWatch Logs 時發生錯誤
當您嘗試設定叢集將代理程式日誌傳送至 Amazon CloudWatch Logs 時,您可能會收到兩個例外狀況之一。
如果出現 InvalidInput.LengthOfCloudWatchResourcePolicyLimitExceeded
例外狀況,請再試一次,但請使用開頭為 /aws/vendedlogs/
的日誌群組。如需詳細資訊,請參閱啟用從特定 Amazon Web Services 記錄日誌。
如果您收到InvalidInput.NumberOfCloudWatchResourcePoliciesLimitExceeded
例外狀況,請選擇您帳戶中現有的 Amazon CloudWatch Logs 政策,並將以下內容附加JSON至帳戶中。
{"Sid":"AWSLogDeliveryWrite","Effect":"Allow","Principal":{"Service":"delivery.logs.amazonaws.com"},"Action":["logs:CreateLogStream","logs:PutLogEvents"],"Resource":["*"]}
如果您嘗試將JSON上述 附加至現有政策,但出現錯誤,指出您已達到所選政策的長度上限,請嘗試將 附加JSON至另一個 Amazon CloudWatch Logs 政策。將 附加JSON至現有政策後,請再試一次以設定將代理程式日誌交付至 Amazon CloudWatch Logs。
沒有預設安全群組
如果您嘗試建立叢集並收到錯誤,指出沒有預設安全群組,這可能是因為您使用的是與您共用VPC的 。請您的管理員授予您許可,以描述此上的安全群組VPC,然後再試一次。如需允許此動作的政策範例,請參閱主控台 中的 Amazon EC2:允許以VPC程式設計方式管理與特定 相關聯的EC2安全群組。
叢集似乎卡在 CREATING 狀態
有時叢集建立最多需要 30 分鐘。等候 30 分鐘,然後再次檢查叢集的狀態。
叢集狀態從 CREATING變成 FAILED
請嘗試再次建立叢集。
叢集狀態為 ACTIVE,但生產者無法傳送資料或取用者無法接收資料
-
如果叢集建立成功 (叢集狀態為
ACTIVE
),但您無法傳送或接收資料,請確定您的生產者和取用者應用程式可以存取叢集。如需詳細資訊,請參閱 步驟 3:建立用戶端機器 中的指導。
-
如果您的生產者和消費者可以存取叢集,但仍遇到產生和耗用資料的問題,原因可能是 KAFKA-7697
,這會影響 Apache Kafka 2.1.0 版,並可能導致一個或多個代理程式發生鎖死。請考慮遷移到 Apache 卡夫卡 2.2.1,其不受此錯誤影響。如需有關如何遷移的資訊,請參閱 遷移至 Amazon MSK叢集。
AWS CLI 無法辨識 Amazon MSK
如果您 AWS CLI 已安裝 ,但無法識別 Amazon MSK命令,請將您的 升級 AWS CLI 到最新版本。如需如何升級 的詳細資訊 AWS CLI,請參閱安裝 AWS Command Line Interface。如需有關如何使用 AWS CLI 執行 Amazon MSK命令的資訊,請參閱 Amazon MSK:運作方式。
分割區離線或複本不同步
這些可能是磁碟空間不足的徵狀。請參閱 磁碟空間不足。
磁碟空間不足
請參閱管理磁碟空間中的下列最佳實務:監控磁碟空間 和 調整資料保留參數。
記憶體不足
如果您看到 MemoryUsed
指標過高或 MemoryFree
不足,這並不表示有問題。Apache Kafka 設計為盡可能地多使用記憶體,並且以最佳方式管理。
生產者取得 NotLeaderForPartitionException
這通常是暫時性錯誤。將生產者的 retries
組態參數設定為高於目前的值。
大於零的複寫不足分割區 (URP)
UnderReplicatedPartitions
是重要的監控指標。在運作狀態良好的MSK叢集中,此指標的值為 0。如果它大於零,可能是由於下列原因之一。
叢集具有名為 __amazon_msk_canary 和 __amazon_msk_canary_state 的主題
您可能會看到MSK叢集有一個名為 的主題__amazon_msk_canary
,另一個名為 的主題__amazon_msk_canary_state
。這些是 Amazon 為叢集運作狀態和診斷指標MSK建立和使用的內部主題。這些主題的大小可以忽略不計,且無法被刪除。
分區複寫失敗
請確定您尚未在 CLUSTER_ ACLs上設定 ACTIONS。
無法存取已開啟公開存取的叢集
如果您的叢集已開啟公開存取,但仍無法從網際網路存取,請依照下列步驟執行:
確定叢集安全群組的傳入規則允許您的 IP 地址和叢集的連接埠。如需叢集連接埠號碼的清單,請參閱連接埠資訊。同時確保安全群組的傳出規則允許傳出通訊。如需安全群組及其傳入和傳出規則的詳細資訊,請參閱 Amazon VPC使用者指南中的 的安全群組VPC。
請確定您的 IP 地址和叢集的連接埠在叢集VPC網路 的傳入規則中是允許的ACL。與安全群組不同,網路ACLs是無狀態的。這意味著您必須同時設定傳入和傳出規則。在傳出規則中,允許所有流量 (連接埠範圍:0-65535) 傳送到您的 IP 地址。如需詳細資訊,請參閱 Amazon VPC使用者指南中的新增和刪除規則。
-
確定您是使用公開存取 bootstrap-broker 字串來存取叢集。已開啟公有存取權的MSK叢集有兩個不同的 bootstrap-broker 字串,一個用於公有存取,另一個用於從 內存取 AWS。如需詳細資訊,請參閱使用 取得引導代理程式 AWS Management Console。
無法從 內存取叢集 AWS:網路問題
如果您的 Apache Kafka 應用程式無法與MSK叢集成功通訊,請先執行下列連線測試。
使用 取得 Amazon MSK叢集的引導代理程式 中描述的任何方法來取得引導代理程式的地址。
-
在下列命令中取代
bootstrap-broker
您在上一個步驟中取得的其中一個代理程式地址。Replace (取代)port-number
如果叢集設定為使用TLS身分驗證,則為 9094。如果叢集未使用TLS身分驗證,請取代port-number
搭配 9092。從用戶端機器執行命令。telnet
bootstrap-broker
port-number
其中 port-number 為:
如果叢集設定為使用TLS身分驗證,則為 9094。
9092 如果叢集未使用TLS身分驗證。
如果已啟用公有存取,則需要不同的連接埠號碼。
從用戶端機器執行命令。
-
對所有引導代理程式重複前面的命令。
如果用戶端機器能夠存取代理程式,這表示沒有連線問題。在這種情況下,執行下列命令來檢查您的 Apache Kafka 用戶端是否已正確設定。若要取得 bootstrap-brokers
,請使用 中所述的任何方法取得 Amazon MSK叢集的引導代理程式。Replace (取代) topic
您的主題名稱。
<path-to-your-kafka-installation>
/bin/kafka-console-producer.sh --broker-listbootstrap-brokers
--producer.config client.properties --topictopic
如果上一個命令成功,這表示您的用戶端已正確設定。如果您仍然無法從應用程式生產和使用,請在應用程式層級偵錯問題。
如果用戶端機器無法存取代理程式,請參閱下列子節,以取得以用戶端機器設定為基礎的指引。
相同 中的 Amazon EC2用戶端和MSK叢集 VPC
如果用戶端機器與VPCMSK叢集位於相同位置,請確定叢集的安全群組具有接受來自用戶端機器安全群組流量的傳入規則。如需設定這些規則的資訊,請參閱安全群組規則。如需如何從與叢集位於相同 的 Amazon EC2執行個體存取VPC叢集的範例,請參閱 開始使用 Amazon MSK。
Amazon EC2用戶端和MSK叢集位於不同的 VPCs
如果用戶端機器和叢集位於兩個不同的 中VPCs,請確定下列事項:
-
兩者VPCs是對等的。
-
對等連線的狀態為作用中。
-
兩者的路由表VPCs已正確設定。
如需VPC對等的相關資訊,請參閱使用VPC對等連線。
內部部署用戶端
如果內部部署用戶端設定為使用 連線至MSK叢集 AWS VPN,請確保下列事項:
-
VPN 連線狀態為
UP
。如需有關如何檢查VPN連線狀態的資訊,請參閱如何檢查VPN通道的目前狀態? -
叢集的路由表VPC包含CIDR目標具有 格式 的內部部署路由
Virtual private gateway(vgw-xxxxxxxx)
。 -
MSK 叢集的安全群組允許連接埠 2181、連接埠 9092 (如果您的叢集接受純文字流量) 和連接埠 9094 (如果您的叢集接受 TLS加密流量) 上的流量。
如需更多 AWS VPN 疑難排解指南,請參閱疑難排解用戶端 VPN。
AWS Direct Connect
如果用戶端使用 AWS Direct Connect,請參閱疑難排解 AWS Direct Connect。
如果先前的故障診斷指南無法解決問題,請確定沒有防火牆封鎖網路流量。如需進一步偵錯,請使用 tcpdump
和 等工具Wireshark
來分析流量,並確保其到達MSK叢集。
身分驗證失敗:太多連線
Failed authentication ... Too many connects
錯誤表示代理程式正在保護自己,因為一個或多個IAM用戶端正在嘗試以積極的速率連線到它。若要協助代理程式接受更高速率的新IAM連線,您可以增加reconnect.backoff.ms
若要深入了解每個代理程式新連線的速率限制,請參閱Amazon MSK 配額頁面。
MSK 無伺服器:叢集建立失敗
如果您嘗試建立無MSK伺服器叢集,但工作流程失敗,您可能沒有建立VPC端點的許可。確認您的管理員已透過允許 ec2:CreateVpcEndpoint
動作授予您建立VPC端點的許可。
如需執行所有 Amazon MSK動作所需的完整許可清單,請參閱 AWS 受管政策:mazonMSKFull存取。