為 Managed Service for Apache Kafka 叢集生成合成資料

瞭解如何使用 Google Cloud 控制台,為 Google Cloud Managed Service for Apache Kafka 叢集產生合成測試資料。

本指南使用 Dataflow 串流資料產生器範本,自動將遊戲遙測資料範例發布至 Managed Service for Apache Kafka 主題。串流資料產生器是 Dataflow 範本,可根據指定結構定義,以可設定的速率產生合成測試記錄。產生合成資料後,您就能觀察叢集活動、測試負載處理作業,以及驗證監控指標,不必安裝本機 Kafka 用戶端或編寫自訂的生產者程式碼。如要進一步瞭解範本,請參閱「Dataflow Streaming Data Generator 範本」。

事前準備

開始本教學課程前,請先建立新的 Managed Service for Apache Kafka 叢集。如果已有叢集,可以略過這個步驟。如要瞭解建立叢集所需的角色和權限,請參閱「建立及查看叢集」。如果按照該指南操作,請只完成「建立叢集」一節,然後返回本指南。

如何建立叢集

控制台

  1. 前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集)

  2. 按一下 「建立」
  3. 在「Cluster name」(叢集名稱) 方塊中輸入叢集的名稱。
  4. 在「Region」(區域) 清單中,選取叢集的位置。
  5. 如要進行「網路設定」,請設定可存取叢集的子網路:
    1. 在「Project」(專案) 部分,選取專案。
    2. 在「Network」(網路) 中選取虛擬私有雲網路。
    3. 在「子網路」中,選取子網路。
    4. 按一下「完成」
  6. 點選「建立」

按一下「建立」後,叢集狀態會顯示為 Creating。叢集準備就緒時,狀態會顯示 Active

gcloud

如要建立 Kafka 叢集,請執行 managed-kafka clusters create 指令。

gcloud managed-kafka clusters create KAFKA_CLUSTER \
--location=REGION \
--cpu=3 \
--memory=3GiB \
--subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
--async

更改下列內容:

  • KAFKA_CLUSTER:Kafka 叢集名稱
  • REGION:叢集位置
  • PROJECT_ID:專案 ID
  • SUBNET_NAME:要建立叢集的子網路,例如 default

如要瞭解支援的位置,請參閱「 Managed Service for Apache Kafka 位置」。

這項指令會以非同步方式執行,並傳回作業 ID:

Check operation [projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID] for status.

如要追蹤建立作業的進度,請使用 gcloud managed-kafka operations describe 指令:

gcloud managed-kafka operations describe OPERATION_ID \
  --location=REGION

叢集準備就緒後,這項指令的輸出內容會包含 state: ACTIVE 項目。詳情請參閱「 監控叢集建立作業」。

必要的角色

如要取得為叢集產生合成資料所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備為叢集生成合成資料所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要為叢集產生合成資料,必須具備下列權限:

  • dataflow.jobs.create
  • dataflow.jobs.get
  • managedkafka.clusters.get
  • managedkafka.topics.get
  • managedkafka.topics.create
  • managedkafka.topics.publish
  • resourcemanager.projects.setIamPolicy

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

如要確保 Compute Engine 預設服務帳戶具備執行 Dataflow 工作所需的權限,請要求管理員在專案中,將下列 IAM 角色授予 Compute Engine 預設服務帳戶

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

管理員或許也能透過自訂角色或其他預先定義的角色,將必要權限授予 Compute Engine 預設服務帳戶

如果您有權授予 IAM 角色,Google Cloud 控制台會在生成合成資料的過程中,提示您授予必要角色。如果您沒有授予角色的權限,控制台會顯示訊息,要求您請管理員授予必要權限。

產生合成資料

如要建立及啟動 Dataflow 工作,為 Kafka 主題生成合成資料,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集)

  2. 按一下叢集名稱,例如 test-cluster

  3. 選取「來源」分頁標籤。

  4. 在「來源」頁面的「產生合成資料」資訊卡中,按一下「建立 Dataflow 工作」。「產生資料」窗格隨即開啟。

  5. 在「Produce Data」窗格中,從「Kafka topic」下拉式清單選取主題,例如 test-topic。如果沒有主題,請建立一個:

    1. 在「Kafka topic」(Kafka 主題) 下拉式清單中,按一下「Create topic」(建立主題)。「建立主題」窗格隨即開啟。
    2. 在「Topic name」(主題名稱) 欄位中輸入 test-topic
    3. 保留「Partition count」(分區計數) (3) 和「Replication factor」(複寫因數) (3) 的預設值。
    4. 點選「建立」
  6. 在「輸出率 (QPS)」欄位中,輸入您希望產生器產生的每秒查詢次數率,例如 100。這可讓您測試叢集如何處理不同負載。

  7. 如果出現警告,指出 Dataflow 服務帳戶缺少必要權限,請按一下「授權」,指派下列角色:

    • Dataflow 工作者 (roles/dataflow.worker)
    • 代管 Kafka 用戶端 (roles/managedkafka.client)
  8. 在「產生資料」窗格中,按一下「建立」,啟動 Dataflow 工作。

    系統會顯示通知,指出已建立 Dataflow 工作。

  9. 在通知中按一下「查看工作」,開啟「Dataflow Job details」(Dataflow 工作詳細資料) 頁面,觀察工作圖表、狀態和執行指標。

查看叢集指標

Dataflow 工作啟動後,請觀察流入叢集的合成資料:

  1. test-cluster 的「Cluster details」(叢集詳細資料) 頁面中,按一下「Monitoring」(監控) 分頁標籤。

  2. 查看「位元率」和「生產處理量最高的前 5 個主題」圖表,確認資料是否正積極產生至主題。

查看訊息

請使用下列其中一種方法,確認合成訊息是否發布至主題。

在 Kafka 指令列工具中查看

如要使用用戶端 VM 上的 Kafka CLI 工具,直接從叢集取用訊息,請按照下列步驟操作:

  1. 使用 SSH 連線至用戶端 VM。如果尚未設定用戶端 VM,請參閱「建立用戶端 VM」。

  2. 從 Google Cloud 控制台取得叢集的啟動伺服器位址,並在用戶端 VM 上設為環境變數:

    1. 在 Google Cloud 控制台中,前往「Managed Service for Apache Kafka」>「Clusters」(叢集) 頁面。

      前往「Clusters」(叢集)

    2. 按一下叢集名稱,例如 test-cluster

    3. 在「叢集詳細資料」頁面中,按一下「設定」

    4. 複製「Bootstrap URL」(啟動網址) 下方列出的值。

  3. 在用戶端 VM 上設定環境變數:

    ```sh
    export BOOTSTRAP="BOOTSTRAP_URL"
    ```
    

    BOOTSTRAP_URL 替換為您複製的啟動程序位址。

  4. 執行 kafka-console-consumer.sh 指令來讀取訊息:

    kafka-console-consumer.sh \
     --bootstrap-server $BOOTSTRAP \
     --topic TOPIC_ID \
     --from-beginning \
     --consumer.config client.properties
    

    TOPIC_ID 替換為主題名稱,例如 test-topic

    主控台會顯示所取用的串流合成遊戲資料記錄。

  5. 按下 Ctrl+C 鍵即可停止取用訊息。

在 BigQuery 中查看

如要將 Kafka 主題的資料串流至 BigQuery,並查看記錄,請按照下列步驟操作:

  1. 由於合成資料是原始 JSON,您必須先在 BigQuery 中手動建立目的地資料表,才能建立連接器。如要瞭解如何建立資料表,請參閱建立含有結構定義的空白資料表。在資料集中建立名為 test-topic 的資料表,並套用下列結構定義:

    [
      {"name": "eventId", "type": "STRING"},
      {"name": "eventTimestamp", "type": "INTEGER"},
      {"name": "ipv4", "type": "STRING"},
      {"name": "ipv6", "type": "STRING"},
      {"name": "country", "type": "STRING"},
      {"name": "username", "type": "STRING"},
      {"name": "quest", "type": "STRING"},
      {"name": "score", "type": "INTEGER"},
      {"name": "completed", "type": "BOOLEAN"}
    ]
    
  2. 在 Connect 叢集中建立 BigQuery 接收器連接器,將主題中的訊息串流至 BigQuery 資料表。設定連接器時,請使用下列範例屬性,並將 PROJECT_ID 替換為您的專案 ID:

    bigQueryPartitionDecorator=false
    connector.class=com.wepay.kafka.connect.bigquery.BigQuerySinkConnector
    defaultDataset=test_dataset
    key.converter=org.apache.kafka.connect.storage.StringConverter
    project=PROJECT_ID
    tasks.max=3
    topics=test-topic
    value.converter=org.apache.kafka.connect.json.JsonConverter
    value.converter.schemas.enable=false
    
  3. 連接器開始串流資料後,請前往 Google Cloud 控制台的「BigQuery」BigQuery頁面。

    前往「BigQuery」頁面

  4. 在「Explorer」面板中展開專案 ID,然後選取資料集 test_dataset

  5. 按一下資料表名稱 test-topic

  6. 按一下「預覽」分頁標籤,查看串流的綜合記錄。 或者,按一下「撰寫新查詢」,然後執行下列 SQL 查詢:

    SELECT * FROM `PROJECT_ID.DATASET_ID.TABLE_ID` LIMIT 10;
    

    更改下列內容:

    • PROJECT_ID:專案 ID
    • DATASET_ID:資料集 ID,例如 test_dataset
    • TABLE_ID:資料表 ID,例如 test-topic
  7. 按一下「執行」,即可在「查詢結果」窗格中查看範例記錄。

    注意:請勿使用 SELECT COUNT(*) 查詢驗證記錄。 由於連接器使用 BigQuery Streaming API,資料一開始會寫入串流緩衝區。使用 SELECT * 時,資料會立即顯示,但列數可能需要幾分鐘才會更新。

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。

  1. 前往 Google Cloud 控制台的「Dataflow Jobs」(Dataflow 工作) 頁面。

    前往 Dataflow 的「Jobs」(工作) 頁面

  2. 按一下為主題建立的工作名稱。

  3. 按一下「停止」

  4. 選取「取消」,然後點按「停止工作」

  5. 選用:如果不再需要 Kafka 叢集,請前往「Managed Service for Apache Kafka Clusters」(Managed Service for Apache Kafka 叢集) 頁面,選取 test-cluster,然後按一下「Delete」(刪除)

後續步驟