如何對 Amazon MSK 叢集的連線錯誤進行疑難排解?
當我嘗試連線到 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集時收到錯誤。
解決方法
對您收到的錯誤訊息執行以下疑難排解步驟。
"java.lang.OutOfMemoryError: Java heap space"
在沒有用戶端屬性檔案的情況下執行叢集操作命令時,您可能會收到上述錯誤。若要解決此問題,請根據 client.properties 檔案中的驗證類型包含屬性。
僅具有 AWS Identity and Access Management (IAM) 驗證連接埠的命令範例:
./kafka-topics.sh --create --bootstrap-server $BOOTSTRAP:9098 --replication-factor 3 --partitions 1 --topic TestTopic
具有 IAM 驗證連接埠和 client properties 檔案的命令範例:
./kafka-topics.sh --create --bootstrap-server $BOOTSTRAP:9098 --command-config client.properties --replication-factor 3 --partitions 1 --topic TestTopic
"org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.Call: createTopics"
當用戶端應用程式與 Amazon MSK 叢集之間存在網路設定錯誤時,您可能會收到上述錯誤。
若要對此問題進行疑難排解,請從用戶端電腦執行下列 telnet 命令以測試連線狀況:
telnet bootstrap-broker port-number
注意: 使用 Amazon MSK 叢集中的其中一個代理程式地址取代 bootstrap-broker。根據您叢集啟用的驗證,將 port-number 替換為連接埠值。
如果用戶端電腦可以存取代理程式,就不存在連線問題。如果用戶端電腦無法存取代理程式,請檢查網路連線組態設定。檢查安全群組的傳入和傳出規則。
"org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test_topic]"
當您使用 IAM 驗證且存取政策封鎖主題作業 (如 WriteData 和 ReadData) 時,您可能會收到上述錯誤。
注意: 許可界限和服務控制策略 (SPC) 也會封鎖未獲得授權的使用者連線至叢集。
如果您使用非 IAM 的驗證,請檢查是否新增了封鎖作業的主題層級存取控制清單 (ACL)。
執行下列命令以列出套用至主題的 ACL:
bin/kafka-acls.sh --bootstrap-server $BOOTSTRAP:PORT --command-config adminclient-configs.conf --list --topic testtopic
"ZooKeeperClientTimeoutException"
當用戶端嘗試透過 Apache ZooKeeper 字串連線至叢集並且無法建立連線時,您可能會收到上述錯誤。當 Apache ZooKeeper 字串不正確時,您也可能會收到此錯誤。
錯誤的 Apache Zookeeper 字串範例:
./kafka-topics.sh --zookeeper z-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181,z-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181,z-3.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:2181 --list[2020-04-10 23:58:47,963] WARN Client session timed out, have not heard from server in 10756ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn)
輸出範例:
[2020-04-10 23:58:58,581] WARN Client session timed out, have not heard from server in 10508ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn)[2020-04-10 23:59:08,689] WARN Client session timed out, have not heard from server in 10004ms for sessionid 0x0 (org.apache.zookeeper.ClientCnxn) Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING at kafka.zookeeper.ZooKeeperClient.$anonfun$waitUntilConnected$3(ZooKeeperClient.scala:259) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:253) at kafka.zookeeper.ZooKeeperClient.waitUntilConnected(ZooKeeperClient.scala:255) at kafka.zookeeper.ZooKeeperClient.<init>(ZooKeeperClient.scala:113) at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1858) at kafka.admin.TopicCommand$ZookeeperTopicService$.apply(TopicCommand.scala:321) at kafka.admin.TopicCommand$.main(TopicCommand.scala:54) at kafka.admin.TopicCommand.main(TopicCommand.scala)
若要解決此問題,請採取以下動作:
- 確認您使用的是正確的 Apache ZooKeeper 字串。
- 確認您的 Amazon MSK 叢集的安全群組在 Apache ZooKeeper 連接埠上允許來自用戶端安全群組的傳入流量。
- 如果您的 Apache ZooKeeper 節點與 MSK 代理程式或用戶端關聯至不同的安全群組,請檢查您的組態需求。用戶端的安全群組必須允許在必要的 ZooKeeper 連接埠上連線至與 ZooKeeper 節點關聯的安全群組。ZooKeeper 網路介面安全群組的輸入規則必須允許來自用戶端的連線。
"Broker may not be unavailable"
<topicName><node-id><broker-host><broker-ip><port>"Topic not present in metadata after 60000 ms. or Connection to node - (/:) could not be established.Broker may not be available. (org.apache.kafka.clients.NetworkClient)"
當下列情況之一成立時,您可能會收到上述錯誤:
- 生產者或取用者無法連線至代理程式主機和連接埠。
- 代理程式字串不正確。
如果用戶端或代理程式連線最初能正常運作,您仍收到此錯誤,則表示代理程式可能無法使用。
當您使用代理程式字串從虛擬私有雲端 (VPC) 外部存取叢集時,可能會發生此錯誤。
生產者代理程式字串範例:
./kafka-console-producer.sh --broker-list b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092 --topic test
輸出範例:
[2020-04-10 23:51:57,668] ERROR Error when sending message to topic test with key: null, value: 1 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms.
取用者代理程式字串範例:
./kafka-console-consumer.sh --bootstrap-server b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092,b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com:9092 --topic test
輸出範例:
[2020-04-11 00:03:21,157] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -1 (b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.6.19:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)[2020-04-11 00:04:36,818] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -2 (b-1.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.44.252:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2020-04-11 00:05:53,228] WARN [Consumer clientId=consumer-console-consumer-88994-1, groupId=console-consumer-88994] Connection to node -1 (b-2.encryption.3a3zuy.c7.kafka.us-east-1.amazonaws.com/172.31.6.19:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
若要對此問題進行疑難排解,請執行下列動作:
- 確認您使用正確的代理程式字串和連接埠。
- 如果 ZooKeeper 管理的叢集中,代理程式無法使用,請檢查 ActiveControllerCount () Amazon CloudWatch 指標。然後,確認控制器在該期間內是否處於作用中狀態。如果指標的值不是 1,則叢集中的某個代理程式可能無法使用。使用 1 分鐘期間的總和統計值來檢視指標。
- 檢查 ZooKeeperSessionState 指標以確認代理程式與 Apache ZooKeeper 節點持續保持通訊。
- 若要了解代理程式失敗的原因,請檢查 KafkaDataLogsDiskUsed 指標,以確定代理程式的儲存空間是否用盡。如需更多資訊,請參閱 Amazon MSK metrics for monitoring Standard brokers with CloudWatch (使用 CloudWatch 監控標準代理程式的 Amazon MSK 指標)。
- 檢查是否是網路組態導致了該問題。Amazon MSK 資源是在 VPC 中佈建。您必須連線到 Amazon MSK 叢集,或在相同 VPC 內的私有網路中進行生產。如需資訊,請參閱 Unable to access cluster from within AWS: networking issues (無法從 AWS 內部存取叢集:網路問題)。另外,請參閱 Amazon MSK FAQ (Amazon MSK 常見問答) 中的 How do I connect to my Amazon MSK cluster from inside AWS network but outside the cluster's Amazon VPC? (如何從 AWS 網路內部但處於叢集的 Amazon VPC 外部連線至我的 Amazon MSK 叢集?)。
"Topic not present in metadata"
"org.apache.kafka.common.errors.TimeoutException: Topic test not present in metadata after 60000 ms"
當您嘗試寫入的主題不存在於 Amazon MSK 中時,您可能會收到上述錯誤。檢查您的 Amazon MSK 叢集中是否存在該主題。確認您在用戶端組態中使用的是正確的代理程式字串和連接埠。如果該主題不存在,請在 Amazon MSK 中建立主題,或在叢集組態中將 auto.create.enable 設為 true。
注意: 當 auto.create.enable 設為 true 時,會自動建立主題。
當主題存在但分區不存在時,您也可能會收到此錯誤。例如,您有一個分區 [0],而您的生產者嘗試傳送到分區 [1]。
確認 Amazon MSK 叢集的安全群組允許來自用戶端應用程式安全群組的必要連接埠的傳入流量。
如果系統先前正常運作後突然發生錯誤,請採取下列步驟檢查 Amazon MSK 代理程式的狀態:
- 對於 ZooKeeper 管理的叢集,請檢查 ActiveControllerCount 指標。值必須為 1。如果指標為任何其他值,則表示叢集中的其中一個代理程式無法使用。使用 1 分鐘期間的總和統計值來檢視指標。
- 檢查 ZooKeeprSessionState 指標,以確認代理程式與 ZooKeeper 節點持續保持通訊。
- 監控 KafkaDataLogsDiskUsed 指標,以確保代理程式的儲存空間沒有用盡。
確認您沒有嘗試在沒有正確組態的情況下從 VPC 外部存取叢集。預設情況下,Amazon MSK 資源是在 VPC 中佈建。您必須透過同一 VPC 中的私有網路進行連線。
如果您嘗試從 VPC 外部存取叢集,請確保已為該 AWS 服務設定必要的網路組態,例如 AWS Client VPN 或 AWS Direct Connect。
相關資訊
Connect to an Amazon MSK Provisioned cluster (連線到 Amazon MSK 佈建叢集)
如何對在使用已啟用 SASL/SCRAM 驗證的 Amazon MSK 叢集時,發生的驗證與權限問題進行疑難排解?
Troubleshoot your Amazon MSK cluster (Amazon MSK 叢集疑難排解)
- 語言
- 中文 (繁體)

This article was reviewed and updated on 2026-03-06.
相關內容
已提問 3 年前
已提問 2 年前
已提問 2 年前