使用 Kafka 事件生產者
Code Engine Kafka 訂閱會監控 Kafka 實例中是否出現新訊息。 當您建立一組主題的訂閱時,您的應用程式或工作會針對出現在其中一個主題中的每一則新訊息收到個別事件。 每個專案最多可建立 100 個 Kafka 訂閱。
雖然您可以使用任何 Kafka 實例,但本主題中的範例均採用 IBM® Event Streams for IBM Cloud® 服務。Event Streams 是一項 IBM 事件串流服務,專門用於處理 Kafka 事件。 如需有關此服務的更多資訊,請參閱 Event Streams 的文件。
設定 Kafka 事件生產者
您可以設定您的 Kafka 訊息發送端,使其將訊息傳送至 Code Engine Kafka 的事件訂閱。 利用您的 Code Engine Kafka 事件訂閱,在收到 Kafka 訊息時觸發應用程式或工作。
若要開始使用,請為事件串流服務 建立 Event Streams 服務實例。 雖然您可以使用主控台或 CLI,但下列步驟說明如何使用 CLI 來設定 Event Streams 事件生產者。
設定 Event Streams CLI 環境
-
下載並安裝 IBM Cloud CLI。 登入 IBM Cloud CLI。
ibmcloud login -
下載並安裝 Code Engine CLI。
ibmcloud plugin install code-engine -f -
若要使用 Event Streams 服務來建立 Kafka 實例,請下載並安裝 Event Streams CLI。
ibmcloud plugin install event-streams -f -
登入 IBM Cloud 帳戶,並以資源群組為目標。 執行下列指令將資源群組設為目標。 若要取得您的資源群組清單,請執行
ibmcloud resource groups指令。ibmcloud target -g <resource_group>
設定您的 Kafka 實例
-
建立 Event Streams的服務實例。 Event Streams CLI 服務的名稱是
messagehub。 在此範例中,建立名為myeventstream的 Event Streams 服務實例。ibmcloud resource service-instance-create myeventstream messagehub lite us-south -
建立服務金鑰以提供認證給服務實例。
ibmcloud resource service-key-create myeventstream-key Manager --instance-name myeventstream輸出範例
Creating service key of service instance myeventstream under account <user_account>... OK Service key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd was created. Name: myeventstream-key ID: crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd Created At: Mon Mar 21 18:36:09 UTC 2022 State: active Credentials: api_key: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh apikey: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh iam_apikey_description: Auto-generated for key crn:v1:bluemix:public:messagehub:us-south:a/e43abfcbd191404cb17ef650e9681dd3:c0736069-3f4a-438a-b614-6846877d692d:resource-key:4c8edfdb-abcd-abcd-abcd-abcdabcdabcd iam_apikey_name: myeventstream-key iam_role_crn: crn:v1:bluemix:public:iam::::serviceRole:Manager iam_serviceid_crn: crn:v1:bluemix:public:iam-identity::a/e43abfcbd191404cb17ef650e9681dd3::serviceid:ServiceId-3e99caa5-b174-4f04-9845-5c5d783b8bc7 instance_id: c0736069-3f4a-438a-b614-6846877d692d kafka_admin_url: https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com kafka_brokers_sasl: [broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093] kafka_http_url: https://abcdabcdabcdabcd.svc07.us-south.eventstreams.cloud.ibm.com password: abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh user: token記下服務金鑰的
user、password及kafka-brokers_sasl值。 當您設定 Code Engine Kafka 訂閱時,需要此資訊。password和apikey的值在 Event Streams 服務實例的服務金鑰中是相同的。 您也可以使用ibmcloud resource service-key myeventstream-key指令來擷取服務金鑰資訊。 -
起始設定相對於 Event Streams 服務實例的 Event Streams 外掛程式。
ibmcloud es init --instance-name myeventstream -
建立 Event Streams 主題。
ibmcloud es topic-create kafka-topic1
設定 Code Engine 範例應用程式以產生 Kafka 訊息
在此實務範例中,讓我們使用 Code Engine 應用程式作為 Kafka 訊息的事件生產者。 此應用程式的目的是連接至 Event Streams 實例並傳送 Kafka 訊息。 此應用程式使用 Code Engine Kafka 傳送者範例應用程式 來傳送 Kafka 訊息。
此範例傳送端映像檔需要 BROKERS 環境變數及包含 password 認證的密鑰。 您可以透過控制台或使用 CLI 來建立此應用程式。
當您向 Event Streams 發送 Kafka 訊息時,請務必指定 Content-Type 標頭。 指定此標頭,以便消費者可以接收具有預期內容類型的訊息; 例如,application/json。
使用 Kafka 範例所需的認證來建立密鑰
在建立 Code Engine 應用程式以傳送 Kafka 訊息之前,請先建立包含必要認證的 Code Engine 密鑰。
開始之前
- 判定您要使用的 Code Engine 專案,並確定已選取此專案。 請參閱 建立及使用專案。
為簡化此情境,請建立一個名為「kafka-subscription-secret」的機密,用以存放「Kafka」發送者範例應用程式與「Kafka」事件訂閱所需的憑證,後者使用「Kafka」接收者範例。 這些憑證是為了讓範例發送端應用程式 Kafka 以及 Code Engine Kafka 事件訂閱,能夠與 Event Streams 的服務實例進行通訊所必需的。 雖然您在建立「Kafka」發送者應用程式和事件訂閱之前,並不需要先建立此密鑰,但此操作可簡化後續的必要步驟。
從主控台使用 Kafka 範例所需的認證建立密鑰
若要從主控台建立 kafka-subscription-secret 密鑰,請跳至 密鑰及配置對映,然後按一下 建立,並選取您要建立的密鑰。 如需相關資訊,請參閱 從主控台建立密鑰。
- 使用 Event Streams 服務實例中服務認證的詳細資料中列出的
user值來指定username金鑰。 對於 Event Streams 服務實例,此值為token。 Code Engine Kafka 事件訂閱與 Kafka 訊息分配管理系統之間的鑑別需要此金鑰。 - 使用 Event Streams 服務實例中服務認證的詳細資料中列出的
apikey值來指定password金鑰。 寄件者範例以及啟用 Code Engine Kafka 事件訂閱與 Kafka 訊息分配管理系統之間的通訊需要此金鑰。
使用 CLI 建立具有 Kafka 範例所需認證的密鑰
若要使用 CLI 來建立 kafka-subscription-secret 密鑰,請為 password 及 username 新增文字環境變數。 如需相關資訊,請參閱 使用 CLI 建立密鑰。
-
使用 Event Streams 服務實例中服務認證的詳細資料中列出的
user值來指定username金鑰。 對於 Event Streams 服務實例,此值為token。 Code Engine Kafka 事件訂閱與 Kafka 訊息分配管理系統之間的鑑別需要此金鑰。 -
使用 Event Streams 服務實例中服務認證的詳細資料中列出的
apikey值來指定password金鑰。 寄件者範例以及啟用 Code Engine Kafka 事件訂閱與 Kafka 訊息分配管理系統之間的通訊需要此金鑰。ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=<value_of_apikey> --from-literal username=<value_of_user>例如,
ibmcloud ce secret create --name kafka-subscription-secret --from-literal password=abcdeH9tu3qE5Sn8VbJfcDEWtjR_l0iPisB3abcdefgh --from-literal username=token
建立 Code Engine 應用程式以傳送事件
建立一個 Code Engine 應用程式,用以連線至您的 Event Streams 實例,並向 Kafka 訊息的接收者( Kafka 消費者)發送 Kafka 訊息。
建立 Code Engine 應用程式以從主控台傳送事件
若要從主控台建立 kafka-sender-app 應用程式,請完成下列步驟。
-
建立 Code Engine 應用程式,稱為
kafka-sender-app,具有下列資訊。- 參照此應用程式的
icr.io/codeengine/kafka-sender容器映像檔。 此映像檔是從sender.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。 此範例傳送端應用程式需要password及BROKERS的值。 - 在 環境變數 (選用) 區段中,新增下列環境變數。
- 新增文字環境變數
BROKERS。 對於此金鑰的值,請指定一或多個分配管理系統主機,這些主機列在 Event Streams 服務實例中服務認證的詳細資料中。 - 新增另一個環境變數以 參照完整密鑰
kafka-subscription-secret。 此密鑰包含password的認證。
- 新增文字環境變數
- (選用) 在 資源及調整大小 區段中,針對實例數下限指定
1,以便應用程式一律具有執行中且未調整為零的實例。 當您檢視日誌時,將應用程式配置成一律具有執行中實例非常有用。 如果您在正式作業環境中執行,請考量保留應用程式執行中實例的成本,或者您是否想要 Code Engine 自動調整為零。 依預設,不在使用中時,應用程式會調整為零。 - 按一下 建立,以建立並部署您的應用程式。
- 參照此應用程式的
-
確認此應用程式處於
ready狀態。
建立 Code Engine 應用程式以使用 CLI 傳送事件
若要使用 CLI 來建立 kafka-sender-app 應用程式,請使用下列指令。
-
建立 Code Engine 應用程式,稱為
kafka-sender-app,具有下列資訊。- 指定
--image選項以參照icr.io/codeengine/kafka-sender儲存器映像檔。 此映像檔是從sender.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。 此範例傳送端應用程式需要儲存在kafka-subscription-secret中的password認證,並且它需要BROKERS環境變數。 - 指定
--env-from-secret選項以參照包含password認證的完整密鑰kafka-subscription-secret。 - 指定
--env選項以新增文字環境變數BROKERS,並提供 Event Streams 服務實例中服務認證詳細資料所列出其中一個分配管理系統主機的名稱。 不過,如果您想要指定多個分配管理系統主機名稱,請使用--env BROKERS-broker1,broker2,broker3格式。 - (選用) 指定
--min-scale=1選項,讓應用程式一律具有執行中且不會調整為零的實例。 當您檢視日誌時,將應用程式配置成一律具有執行中實例非常有用。 如果您在正式作業環境中執行,請考量保留應用程式執行中實例的成本,或者您是否想要 Code Engine 自動調整為零。 依預設,不在使用中時,應用程式會調整為零。
ibmcloud ce app create --name kafka-sender-app --image icr.io/codeengine/kafka-sender --env-from-secret kafka-subscription-secret --env BROKERS=broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --min-scale 1 - 指定
設定 Code Engine 以接收應用程式的 Kafka 事件
若要讓 Code Engine 與 Kafka 事件協同運作,請透過控制台或 CLI 設定 Code Engine Kafka 事件訂閱,以連線至 Kafka 事件中介伺服器,並監聽 Kafka 事件。 此外,請設定一個「Code Engine」應用程式(或工作),用以接收「Kafka」事件。 Kafka 事件訂閱定義了 Kafka 事件產生者(發送方)與事件接收者(接收方)之間的關係。
Code Engine Kafka 事件訂閱連線至您的 Kafka 訊息經紀人,並針對每個傳入的 Kafka 訊息向接收者應用程式傳送 HTTP Post 請求。 如需詳細資訊,請參閱 HTTP 事件的標頭和正文資訊。
從主控台訂閱應用程式的 Kafka 事件
您可以使用控制台設定 Kafka 事件訂閱,以便將事件傳送至 Code Engine 應用程式。
建立 Code Engine 應用程式以從主控台接收 Kafka 事件
- 建立 Code Engine 應用程式,以充當 Kafka 訊息的事件消費者,並接收 Kafka 事件。 例如,建立一個稱為
kafka-receiver-app的應用程式,以使用icr.io/codeengine/kafka-receiver映像檔。 此映像檔是從receiver.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。 此範例不需要任何環境變數。 - 部署此應用程式之後,請確認它處於
ready狀態。
當您使用主控台時,在建立「Kafka」事件訂閱之前,用於接收「Kafka」事件的應用程式或工作未必需要已經存在。 不過,當您建立事件訂閱時,如果應用程式或工作不存在,則訂閱的狀態會反映消費者不存在。 您必須在訂閱處於備妥狀態之前建立應用程式或工作,並且可以透過此訂閱接收事件。
從主控台建立應用程式的 Code Engine Kafka 事件訂閱
Kafka 事件訂閱定義了 Kafka 事件產生者(發送方)與事件接收者(接收方)之間的關係。
開始之前
- 判定您要使用的 Code Engine 專案,並確定已選取此專案。 請參閱 建立及使用專案。
完成下列步驟,以從主控台建立應用程式的 Kafka 事件訂閱。
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱。
- 從「事件訂閱」頁面中,按一下 建立 以建立訂閱。
- 從「建立事件訂閱」頁面中,選取
Event Streams / Kafka磚以指定事件類型。 - 對於 一般,提供
Event Streams / Kafka訂閱的名稱。 請按「下一步」繼續。 - 有關訊息中介服務的詳細資訊,
- 請指定 Kafka 訊息中介伺服器的主機,這些訊息佇列中的訊息將透過此訂閱作為事件接收。 若要取得分配管理系統主機、主題及存取認證的相關資訊,請在 Event Streams 主控台中檢視服務實例的服務認證詳細資料。 例如,針對
myeventstream-key服務實例的訊息分配管理系統主機指定"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"。 您可以在 Event Streams 的Kafka_brokers_sasl欄位中找到服務實例的分配管理系統。 - 按一下 配置,以配置對訊息分配管理系統的存取權。 若要從 Code Engine 向 Kafka 或 Event Streams 實例進行鑑別,您需要提供訊息分配管理系統存取密碼。
- 您可以建立新密鑰、選擇現有密鑰,或者如果不需要認證來存取訊息分配管理系統,則選擇
None。 - 若要建立密鑰,請按一下 建立。 提供密鑰名稱,以及
username和password的值。username和password的值必須符合 Kafka 或 Event Streams 實例之服務認證中的值。 例如,username的值是user的值,列在 Event Streams 服務實例中服務認證的詳細資料中。password的值是apikey的值,列在 Event Streams 服務實例中服務認證的詳細資料中。 - 在此範例中,請使用先前建立的現有
kafka-subscription-secret密鑰。
- 您可以建立新密鑰、選擇現有密鑰,或者如果不需要認證來存取訊息分配管理系統,則選擇
- 指定訊息佇列的現有主題名稱。 例如,
kafka-topic1。 若要取得服務實例現有主題的相關資訊,請移至 Event Streams 主控台中的服務實例,並檢視 主題。 - (選用) 指定消費者群組。 Kafka 訊息的消費者可以分組為 消費者群組。 如果您使用消費者群組,主題配置會控制消費者群組中消費者的訊息流程。 每當在消費者群組中新增或移除消費者時,該主題中的訊息流程可能會變更。 此動作可能導致現有消費者不再接收來自該主題的訊息。
- 請按「下一步」繼續。
- 請指定 Kafka 訊息中介伺服器的主機,這些訊息佇列中的訊息將透過此訂閱作為事件接收。 若要取得分配管理系統主機、主題及存取認證的相關資訊,請在 Event Streams 主控台中檢視服務實例的服務認證詳細資料。 例如,針對
- 對於 事件消費者,請指定 Code Engine 應用程式以接收事件。 請注意,您可以從已定義的應用程式及工作清單中選擇,也可以提供尚未建立之應用程式 (或工作) 的名稱。 當您使用主控台建立事件訂閱時,不需要應用程式或工作存在。 不過,當建立訂閱時,訂閱的狀態會反映消費者不存在。 您必須在訂閱處於備妥狀態之前建立應用程式或工作,並且可以透過此訂閱接收事件。 在此範例中,請使用參照
icr.io/codeengine/kafka-receiver影像的kafka-receiver-app應用程式。 如果您的應用程式不存在,請提供應用程式的名稱,並在建立 Kafka 訂閱之後 建立應用程式。 僅限應用程式,您可以選擇性地指定路徑。 預設情況下,事件會路由到目的地應用程式的根 URL。 您可以透過指定路徑,將事件傳送至應用程式內的不同目的地。 例如,如果訂閱路徑指定/events,則事件會傳送至https://<base application URL>/events。 請按「下一步」繼續。 - 對於 摘要,請檢閱 Kafka 事件訂閱的設定並進行變更 (必要的話)。 備妥時,按一下 建立 以建立 Kafka 訂閱。
從主控台將事件傳送至接收端應用程式
既然您已建立引用 kafka-receiver-app 應用程式的 Kafka 事件訂閱,請使用 kafka-sender-app 將訊息事件傳送至接收端應用程式。
-
開始將接收端應用程式記載至 從主控台檢視應用程式日誌,以查看事件。
-
(選用) 開始將傳送端應用程式記載至 從主控台檢視應用程式日誌,以查看所傳送事件的相關資訊。
-
啟動記錄後,以
curl來呼叫kafka-sender-app應用程式,並指定kafka-sender-app的公開 URL、您的主題名稱,以及要傳送的訊息數目。 您可以從應用程式的網域對應索引標籤取得此應用程式的公開 URL。 例如,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
請務必將值包裝成引號內的 curl,以確保將它視為單一字串。
使用 CLI 訂閱應用程式的 Kafka 事件
您可以使用 CLI 設定 Kafka 事件訂閱,以便將事件傳送至 Code Engine 應用程式。
事件會以 HTTP POST 請求的形式傳送至應用程式。 如需進一步了解 Kafka 事件所包含的資訊,請參閱 HTTP 中的事件標頭與內文資訊。 若您的事件被傳送至 Code Engine 工作,該工作會將事件作為環境變數接收。 如需進一步了解 Kafka 訂閱的環境變數,請參閱「事件的環境變數」。
建立 Code Engine 應用程式以使用 CLI 接收 Kafka 事件
開始之前
-
建立 Code Engine 應用程式,以充當 Kafka 訊息的事件消費者,並接收 Kafka 事件。 例如,建立一個稱為
kafka-receiver-app2的應用程式,以使用icr.io/codeengine/kafka-receiver映像檔。 此映像檔是從receiver.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。 此範例不需要任何環境變數。 您可以選擇性地指定--min-scale=1選項,讓應用程式一律具有執行中且不會調整為零的實例。 當您檢視日誌時,將應用程式配置成一律具有執行中實例非常有用。 如果您在正式作業環境中執行,請考量保留應用程式執行中實例的成本,或者您是否想要 Code Engine 自動調整為零。 依預設,不在使用中時,應用程式會調整為零。ibmcloud ce app create -n kafka-receiver-app2 --image icr.io/codeengine/kafka-receiver --min-scale 1預設情況下,事件會路由到目的地應用程式的根 URL。 您可以使用
--path選項,將事件傳送至應用程式內的不同目的地。 例如,如果您的訂閱指定--path /event,則事件會傳送至https://<base application URL>/events。 -
部署此應用程式之後,請執行
app get指令,以確認應用程式處於ready狀態。ibmcloud ce app get -n kafka-receiver-app2
使用 CLI 為應用程式建立 Code Engine Kafka 事件訂閱
您可以使用 CLI 建立 Kafka 事件訂閱,藉此定義 Kafka 事件發佈者(發送方)與訂閱者(接收方)之間的關係。
-
使用
ibmcloud ce sub kafka create指令,為 Kafka 事件建立 Code Engine Kafka 事件訂閱。 使用您先前建立的kafka-subscription-secret密鑰來存取訊息分配管理系統。 根據 Kafka 資源的服務認證資訊來指定分配管理系統資訊。 在此範例中,您可以從ibmcloud resource service-key myeventstream-key指令的輸出取得分配管理系統資訊。 請注意,您必須為主題的每一個分配管理系統指定--broker選項。--destination選項指定接收事件的 Code Engine 資源。ibmcloud ce sub kafka create --name mykafkasubscription --destination kafka-receiver-app2 --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 -
顯示 Kafka 事件訂閱的詳細資料。
ibmcloud ce sub kafka get -n mykafkasubscription輸出範例
Getting Kafka event subscription 'mykafkasubscription'... OK Name: mykafkasubscription [...] Destination Type: app Destination: kafka-receiver-app2 Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340 Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true Conditions: Type OK Age Reason ConnectionEstablished true 24s InitialOffsetsCommitted true 24s Ready true 24s Scheduled true 24s SinkProvided true 24s Events: Type Reason Age Source Messages Normal FinalizerUpdate 26s kafkasource-controller Updated "mykafkasubscription" finalizers
使用 CLI 將事件傳送至接收端應用程式
既然您已建立引用 kafka-receiver-app 應用程式的 Kafka 事件訂閱,請使用 kafka-sender-app 將訊息事件傳送至接收端應用程式。
-
取得目的地應用程式的公開 URL,
kafka-sender-app,方法是使用ibmcloud ce app get命令,使用--output url選項找到您應用程式的 URL。ibmcloud ce app get -n kafka-sender-app --output url輸出範例
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
執行 Kafka 事件生產者應用程式
kafka-sender-app,以將事件傳送至目的地 Code Engine 應用程式。 使用curl呼叫kafka-sender-app應用程式,並指定主題及訊息數的值。 使用ibmcloud ce app get指令的輸出,找出您應用程式的公開 URL。 請務必將值包裝成引號內的 curl,以確保將它視為單一字串。curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"例如,
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
檢視日誌中的事件。 當您使用有效的分配管理系統、主題及存取密鑰建立 Kafka 事件訂閱時,如果您有一個 Kafka 應用程式會產生該主題的訊息 (例如
kafka-sender-app),則您可以在日誌中看到目的地 Code Engine 應用程式的事件,該應用程式會接收 Kafka 訊息,例如kafka-receiver-app。 當您使用 Kafka 接收端應用程式 (icr.io/codeengine/kafka-receiver) 時,請在接收端應用程式的日誌中搜尋Event data,以查看收到的訊息。ibmcloud ce app logs -n kafka-receiver-app2輸出範例
Getting logs for all instances of application 'kafka-receiver-app2'... OK kafka-receiver-app2-00001-deployment-66976f7988-9xttm/user-container: 2022/03/31 22:19:45 Listening on port 8080 2022/03/31 22:19:46 ---------- 2022/03/31 22:19:46 Path: / 2022/03/31 22:19:46 Header: Accept-Encoding=[gzip] 2022/03/31 22:19:46 Header: Ce-Id=[partition:0/offset:167] 2022/03/31 22:19:46 Header: Ce-Source=[/apis/v1/namespaces/glxo4k7nj7d/kafkasources/mykafkasubscription#kafka-topic1] 2022/03/31 22:19:46 Header: Ce-Specversion=[1.0] 2022/03/31 22:19:46 Header: Ce-Subject=[partition:0#167] 2022/03/31 22:19:46 Header: Ce-Time=[2022-03-31T22:19:36.499Z] 2022/03/31 22:19:46 Header: Ce-Type=[dev.knative.kafka.event] 2022/03/31 22:19:46 Header: Content-Length=[8] 2022/03/31 22:19:46 Header: Forwarded=[for=172.30.208.213;proto=http, for=127.0.0.6] 2022/03/31 22:19:46 Header: K-Proxy-Request=[activator] 2022/03/31 22:19:46 Header: Traceparent=[00-b033708685c715a7c2384cdf05797785-65540b0937e9b0ce-00] 2022/03/31 22:19:46 Header: User-Agent=[Go-http-client/1.1] 2022/03/31 22:19:46 Header: X-B3-Parentspanid=[e1a785d7fdbead6c] 2022/03/31 22:19:46 Header: X-B3-Sampled=[1] 2022/03/31 22:19:46 Header: X-B3-Spanid=[abcde9901e6bf83f] 2022/03/31 22:19:46 Header: X-B3-Traceid=[abcde490a426573772fa0bf60caf5ddb] 2022/03/31 22:19:46 Header: X-Envoy-Attempt-Count=[1] 2022/03/31 22:19:46 Header: X-Forwarded-For=[172.30.208.213, 127.0.0.6, 127.0.0.6] 2022/03/31 22:19:46 Header: X-Forwarded-Proto=[http] 2022/03/31 22:19:46 Header: X-Request-Id=[abcdeb4e-c5ac-abcd-abcd-60e6278abcde] 2022/03/31 22:19:46 Event data: test1: 1請注意,應用程式的日誌資訊只會持續一小時。 如需檢視應用程式 (或工作) 日誌的相關資訊,請參閱 檢視日誌。
遞送至應用程式之 Kafka 事件的標頭及內文資訊
傳送至應用程式的所有事件,均以 HTTP POST 訊息的形式接收。 事件包含某些 HTTP 標頭,可協助您無需查看事件的主體(業務邏輯),即可快速掌握事件的關鍵資訊。 如需相關資訊,請參閱 CloudEvents 規格。
應用程式的標頭
| 標頭 | 說明 |
|---|---|
ce-id |
事件的唯一 ID,除非重播事件,在此情況下,會指派相同的 ID 給事件。 |
ce-source |
指出此事件源自事件生產者內的 URI 參照。 對於 Kafka 事件,此標頭採用下列格式: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/[KAFKA_SUBSCRIPTION_NAME]#[TOPIC_NAME]。 |
ce-specversion |
CloudEvents 規格的版本。 此值始終為 1.0。 |
ce-subject |
Kafka 分割區號碼及偏移。 例如,partition:0#1 是指分割區 0 及偏移 1。 |
ce-time |
產生該事件的時間。 |
ce-type |
事件的類型。 對於 Kafka 事件,這是 dev.knative.kafka.event。 |
輸出範例
Ce-Id=[partition:0/offset:0]
Ce-Source=[/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription#kafka-topic1]
Ce-Specversion=[1.0]
Ce-Subject=[partition:0#0]
Ce-Time=[2021-09-27T16:39:01.36Z]
Ce-Type=[dev.knative.kafka.event]
HTTP 應用程式機身
HTTP 正文包含 Kafka 訊息,格式是您在建立或更新訂閱時指定的。
設定 Code Engine 以接收工作的 Kafka 事件
若要讓 Code Engine 與 Kafka 事件協同運作,請透過控制台或 CLI 設定 Code Engine Kafka 事件訂閱,以連線至 Kafka 事件中介伺服器,並監聽 Kafka 事件。 此外,請設定一個「Code Engine」工作(或應用程式),用以接收「Kafka」事件。 Kafka 事件訂閱定義了 Kafka 事件產生者(發送方)與事件接收者(接收方)之間的關係。
從主控台訂閱工作的 Kafka 事件
您可以使用主控台設定「Kafka」事件訂閱,以便將事件傳送至「Code Engine」工作。
當您為工作建立事件訂閱時,會針對所觸發的每一個事件建立工作執行。 此工作執行具有與工作相關的環境變數。 Code Engine Kafka 事件訂閱會連線至您的 Kafka 訊息中介伺服器,並傳送與該工作相關的環境變數。 有關由 Kafka 傳送的環境變數的更多資訊,請參閱「事件的環境變數」。
建立 Code Engine 工作以從主控台接收 Kafka 事件
- 建立 Code Engine 工作,以充當 Kafka 訊息的事件消費者並接收 Kafka 事件。 例如,建立名為
kafka-receiver-job的工作,其使用範例icr.io/codeengine/codeengine映像檔。 此映像檔是從codeengine.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。 此範例不需要任何環境變數。 - 建立此工作之後,請確認它處於
ready狀態。
當您使用主控台時,在建立「Kafka」事件訂閱之前,用於接收「Kafka」事件的應用程式或工作未必需要已經存在。 不過,當您建立事件訂閱時,如果應用程式或工作不存在,則訂閱的狀態會反映消費者不存在。 您必須在訂閱處於備妥狀態之前建立應用程式或工作,並且可以透過此訂閱接收事件。
從主控台為工作建立 Code Engine Kafka 事件訂閱
Kafka 事件訂閱定義了 Kafka 事件產生者(發送方)與事件接收者(接收方)之間的關係。
開始之前
- 判定您要使用的 Code Engine 專案,並確定已選取此專案。 請參閱 建立及使用專案。
完成下列步驟,以從主控台建立應用程式的 Kafka 事件訂閱。
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱。
- 從「事件訂閱」頁面中,按一下 建立 以建立訂閱。
- 從「建立事件訂閱」頁面中,選取
Event Streams / Kafka磚以指定事件類型。 - 對於 一般,提供
Event Streams / Kafka訂閱的名稱。 請按「下一步」繼續。 - 有關訊息中介服務的詳細資訊,
- 請指定 Kafka 訊息中介伺服器的主機,這些訊息佇列中的訊息將透過此訂閱作為事件接收。 若要取得分配管理系統主機、主題及存取認證的相關資訊,請在 Event Streams 主控台中檢視服務實例的服務認證詳細資料。 例如,針對
myeventstream-key服務實例的訊息分配管理系統主機指定"broker-0-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093", "broker-1-abcdabcdabcdabcd.kafka.svc01.us-south.eventstreams.cloud.ibm.com:9093"。 - 按一下 配置,以配置對訊息分配管理系統的存取權。 若要從 Code Engine 向 Kafka 或 Event Streams 實例進行鑑別,您需要提供訊息分配管理系統存取密碼。
- 您可以建立新密鑰、選擇現有密鑰,或者如果不需要認證來存取訊息分配管理系統,則選擇
None。 - 若要建立密鑰,請按一下 建立。 提供密鑰名稱,以及
username和password的值。username和password的值必須符合 Kafka 或 Event Streams 實例之服務認證中的值。 例如,username的值是user的值,列在 Event Streams 服務實例中服務認證的詳細資料中。password的值是apikey的值,列在 Event Streams 服務實例中服務認證的詳細資料中。 - 在此範例中,請使用先前建立的現有
kafka-subscription-secret密鑰。
- 您可以建立新密鑰、選擇現有密鑰,或者如果不需要認證來存取訊息分配管理系統,則選擇
- 指定訊息佇列的現有主題名稱。 例如,
kafka-topic1。 若要取得服務實例現有主題的相關資訊,請移至 Event Streams 主控台中的服務實例,並檢視 主題。 - (選用) 指定消費者群組。 Kafka 訊息的消費者可以分組為 消費者群組。 如果您使用消費者群組,主題配置會控制消費者群組中消費者的訊息流程。 每當在消費者群組中新增或移除消費者時,該主題中的訊息流程可能會變更。 此動作可能導致現有消費者不再接收來自該主題的訊息。
- 請按「下一步」繼續。
- 請指定 Kafka 訊息中介伺服器的主機,這些訊息佇列中的訊息將透過此訂閱作為事件接收。 若要取得分配管理系統主機、主題及存取認證的相關資訊,請在 Event Streams 主控台中檢視服務實例的服務認證詳細資料。 例如,針對
- 對於 事件消費者,請指定 Code Engine 工作以接收事件。 請注意,您可以從已定義工作及應用程式的清單中選擇,也可以提供尚未建立之工作 (或應用程式) 的名稱。 當您使用主控台建立事件訂閱時,不需要應用程式或工作存在。 不過,當建立訂閱時,訂閱的狀態會反映消費者不存在。 您必須在訂閱處於備妥狀態之前建立工作 (或應用程式),並且可以透過此訂閱接收事件。 在此範例中,選取
job作為元件類型,並使用參照icr.io/codeengine/codeengine影像的kafka-receiver-job工作作為元件來接收事件。 如果您的工作不存在,請提供工作的名稱,並在建立 Kafka 訂閱之後 建立工作。 僅限應用程式,您可以選擇性地指定路徑。 請按「下一步」繼續。 - 對於 摘要,請檢閱 Kafka 事件訂閱的設定並進行變更 (必要的話)。 備妥時,按一下 建立 以建立 Kafka 訂閱。
從主控台將事件傳送至接收端工作
既然您已建立引用 kafka-receiver-job 工作項目的 Kafka 事件訂閱,請使用 kafka-sender-app 將訊息事件傳送至接收工作項目。
-
開始記載接收端工作 從主控台檢視工作日誌,以查看事件。
-
(選用) 開始將傳送端應用程式記載至 從主控台檢視應用程式日誌,以查看所傳送事件的相關資訊。
-
啟動記錄後,以
curl來呼叫kafka-sender-app應用程式,並指定kafka-sender-app的公開 URL、您的主題名稱,以及要傳送的訊息數目。 您可以從應用程式的網域對應索引標籤取得此應用程式的公開 URL。 例如,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"
請務必將值包裝成引號內的 curl,以確保將它視為單一字串。
使用分配管理系統、主題及有效的存取密鑰建立 Kafka 訂閱時,如果您有 Kafka 工作產生該主題的訊息 (例如 kafka-sender-app),則您可以在日誌中看到 Code Engine 工作的事件,該工作接收 Kafka 訊息,例如 kafka-receiver-job。 當您使用 Kafka 接收端工作 (icr.io/codeengine/codeengine) 時,請在日誌中搜尋接收端工作的
CE_DATA,以查看收到的訊息。
使用 CLI 訂閱工作的 Kafka 事件
您可以使用命令列介面 (CLI) 設定 Kafka 事件訂閱,以便將事件傳送至 Code Engine 工作。
當您為工作建立事件訂閱時,會針對所觸發的每一個事件建立工作執行。 此工作執行具有與工作相關的環境變數。 Code Engine Kafka 事件訂閱會連線至您的 Kafka 訊息中介伺服器,並傳送與該工作相關的環境變數。 有關由 Kafka 傳送的環境變數的更多資訊,請參閱「事件的環境變數」。
建立 Code Engine 工作以使用 CLI 接收 Kafka 事件
開始之前
-
建立 Code Engine 工作,以充當 Kafka 訊息的事件消費者並接收 Kafka 事件。 例如,建立稱為
kafka-receiver-job且使用icr.io/codeengine/codeengine映像檔的工作。 此映像檔是從codeengine.go建置,可從 Samples for IBM Cloud Code Engine GitHub repo取得。ibmcloud ce job create -n kafka-receiver-job --image icr.io/codeengine/codeengine -
(選用) 建立此工作之後,請執行
job get指令,以檢視此工作的相關資訊。ibmcloud ce job get -n kafka-receiver-job
使用 CLI 為工作建立 Code Engine Kafka 事件訂閱
您可以使用 CLI 建立 Kafka 事件訂閱,藉此定義 Kafka 事件發佈者(發送方)與訂閱者(接收方)之間的關係。
-
使用
ibmcloud ce sub kafka create指令,為 Kafka 事件建立 Code Engine Kafka 事件訂閱。 使用您先前建立的kafka-subscription-secret密鑰來存取訊息分配管理系統。 根據 Kafka 資源的服務認證資訊來指定分配管理系統資訊。 在此範例中,您可以從ibmcloud resource service-key myeventstream-key指令的輸出取得分配管理系統資訊。 請注意,您必須為主題的每一個分配管理系統指定--broker選項。--destination選項指定接收事件的 Code Engine 資源。 當您使用接收工作時,也必須指定--destination-type選項,以指定資源是工作,因為此選項的預設值是app。ibmcloud ce sub kafka create --name mykafkasubscription-withjob --destination-type job --destination kafka-receiver-job --secret kafka-subscription-secret --topic kafka-topic1 --broker broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 --broker broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 -
顯示 Kafka 事件訂閱的詳細資料。
ibmcloud ce sub kafka get -n mykafkasubscription-withjob輸出範例
Getting Kafka event subscription 'mykafkasubscription-withjob'... OK Name: mykafkasubscription-withjob [...] Destination Type: job Destination: kafka-receiver-job Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-1-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-2-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-a4072fe1-1dfa-4470-9d07-bf7a0ff8e340 Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true [...]
使用 CLI 將事件傳送至接收端工作
既然您已建立引用 kafka-receiver-job 應用程式的 Kafka 事件訂閱,請使用 kafka-sender-app 將訊息事件傳送至接收端應用程式。
-
取得目的地應用程式的公開 URL,
kafka-sender-app,使用ibmcloud ce app get指令找到您應用程式的 URL。ibmcloud ce app get -n kafka-sender-app --output url輸出範例
https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud -
執行 Kafka 事件生產者應用程式
kafka-sender-app,以將事件傳送至目的地 Code Engine 工作。 使用curl呼叫kafka-sender-app應用程式,並指定主題及訊息數的值。 使用ibmcloud ce app get指令的輸出,找出事件產生應用程式的公開 URL。 請務必將值包裝成引號內的 curl,以確保將它視為單一字串。 例如,curl "<public_URL_of_Kafka_sender_app>?topic=<your_topic_name>&num=<number_of_messages_to_produce>"例如,
curl "https://kafka-sender-app.abcdabcdabc.us-south.codeengine.appdomain.cloud?topic=kafka-topic1&num=1" -
檢視日誌中的事件。 使用有效的分配管理系統、主題及存取密鑰建立 Kafka 事件訂閱時,如果您有一個 Kafka 應用程式會產生該主題的訊息 (例如
kafka-sender-app),則您可以在日誌中看到目的地 Code Engine 工作的事件,該工作接收 Kafka 訊息,例如kafka-receiver-job。 對於使用curl傳送的每一則訊息,Kafka 事件會觸發相同數目的工作執行。 若要檢視傳送至工作的事件,請使用ibmcloud ce jobrun logs指令。- 使用
ibmcloud ce jobrun list指令來列出kafka-receiver-job工作的工作執行。
ibmcloud ce jobrun list --job kafka-receiver-job ``` 2. 使用 **`ibmcloud ce jobrun logs`** 指令來取得特定工作執行的日誌。 ```txt {: pre} ibmcloud ce jobrun logs -n kafka-receiver-job-abcde ``` 輸出範例 ```txt {: screen} Getting logs for all instances of job run 'kafka-receiver-job-abcde'... Getting jobrun 'kafka-receiver-job-abcde'... Getting instances of jobrun 'kafka-receiver-job-abcde'... OK kafka-receiver-job-abcde-0-0/kafka-receiver-job: Hello from helloworld! I'm a batch job! Index: 0 Hello World from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- CE_DATA=test1: 2 CE_DOMAIN=us-south.codeengine.appdomain.cloud CE_ID=partition:0/offset:249 CE_JOB=kafka-receiver-job CE_JOBRUN=kafka-receiver-job-abcde CE_SOURCE=/apis/v1/namespaces/p99k7iy919d/kafkasources/kafkasub-job-ui#kafka-topic1 CE_SPECVERSION=1.0 CE_SUBDOMAIN=p99k7iy919d CE_SUBJECT=partition:0#249 CE_TIME=2022-06-21T12:19:24.06Z CE_TYPE=dev.knative.kafka.event HOME=/root HOSTNAME=kafka-receiver-job-abcde-0-0 JOB_INDEX=0 KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 z=Set env var 'SHOW' to see all variables ``` 當您使用 Kafka 接收端工作 (`icr.io/codeengine/codeengine`) 時,請在日誌中搜尋接收端工作的 `CE_DATA`,以查看收到的訊息。 請注意,工作執行的日誌資訊只會持續一小時。 如需檢視應用程式或工作日誌的相關資訊,請參閱 [檢視日誌](/docs/codeengine?topic=codeengine-logging)。 - 使用
遞送至工作之 Kafka 事件的環境變數
遞送至工作的所有事件都會作為環境變數接收。 這些環境變數包含 CE_ 字首,並以 CloudEvents spec為基礎。
每一個事件都包含一些一般環境變數,每次將事件遞送至工作時都會出現這些變數。 每一個事件中的實際變數集可以包括更多選項。 如需相關資訊,請參閱 CloudEvent 屬性。
下表說明特定於 Kafka 事件的環境變數。
| 變數 | 說明 |
|---|---|
CE_DATA |
事件的資料 (內文)。 |
CE_DOMAIN |
URL 應用程式(和專案)的網域名稱部分。 |
CE_ID |
事件的唯一 ID,除非重播事件,在此情況下,會指派相同的 ID 給事件。 |
CE_SOURCE |
指出此事件源自事件生產者內的 URI 參照。 對於 Kafka 事件,此標頭採用下列格式: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/kafkasources/kafkasub#[TOPIC_NAME]。 |
CE_SPECVERSION |
CloudEvents 規格的版本。 此值始終為 1.0。 |
CE_SUBDOMAIN |
URL 與應用程式(和專案)相關的子網域部分。 如果您熟悉 Kubernetes,CE_SUBDOMAIN 會對應到與專案相關的 Kubernetes 命名空間。 |
CE_SUBJECT |
Kafka 分割區號碼及偏移。 例如,partition:0#1 是指分割區 0 及偏移 1。 |
CE_TIME |
產生該事件的時間。 |
CE_TYPE |
事件的類型。 對於 Kafka 事件,這是 dev.knative.kafka.event。 |
輸出範例
CE_DATA={"message":"This is a test message #","message_number":1}
CE_DOMAIN=us-south.codeengine.appdomain.cloud
CE_ID=partition:0/offset:46
CE_SOURCE=/apis/v1/namespaces/ewgz38l13ts/kafkasources/mykafkasubscription-job#kafka-topic1
CE_SPECVERSION=1.0
CE_SUBDOMAIN=ewgz38l13ts
CE_SUBJECT=partition:0#46
CE_TIME=2021-09-27T18:02:17.7Z
CE_TYPE=dev.knative.kafka.event
檢視及更新 Kafka 事件訂閱
您可以查看關於您的「Kafka」活動訂閱的詳細資訊,或更新該訂閱。
從主控台檢視及更新 Kafka 事件訂閱
-
檢視事件訂閱的相關資訊
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
-
更新事件訂閱
- 前往您的訂閱頁面。 若要導覽至訂閱頁面,請跳至「事件訂閱」頁面,然後按一下您要更新的訂閱名稱。
- 更新訂閱。 例如,將 Kafka 訂閱的主題變更為不同的主題。 從 訊息分配管理系統詳細資料 標籤中,從「主題」區段移除現有主題,並新增新主題的名稱。
- 按一下儲存,以儲存您的變更。
使用 CLI 檢視及更新 Kafka 事件訂閱
-
若要使用 CLI 來檢視事件訂閱的相關資訊,請使用
ibmcloud ce subscription kafka get指令。ibmcloud ce sub kafka get -n mykafkasubscription輸出範例
Getting Kafka event subscription 'mykafkasubscription'... OK Name: mykafkasubscription ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2m4s Created: 2022-06-18T16:59:12-04:00 Destination Type: app Destination: kafka-receiver-app2 Brokers: broker-3-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-5-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-4-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 broker-0-abcdabcdabcdabcd.kafka.svc07.us-south.eventstreams.cloud.ibm.com:9093 Consumer Group: knative-kafka-source-c577b304-dccd-40c8-bb62-138c39f6112a Topics: kafka-topic1 Secret key reference (user): kafka-subscription-secret.username Secret key reference (password): kafka-subscription-secret.password Ready: true Conditions: Type OK Age Reason ConnectionEstablished true 53m InitialOffsetsCommitted true 53m Ready true 52m Scheduled true 52m SinkProvided true 53m Events: Type Reason Age Source Messages Normal FinalizerUpdate 53m kafkasource-controller Updated "mykafkasubscription" finalizers -
若要使用 CLI 更新事件訂閱,請使用
ibmcloud ce subscription kafka update指令。 下列範例會更新主題名稱。ibmcloud ce sub kafka update -n mykafkasubscription --topic kafka-topic2您可以使用
ibmcloud ce subscription kafka update命令來更新「Kafka」訂閱的相關值。 不過,您無法使用這個指令來修改消費者群組的值。 若要更新訂閱以引用不同的主題,請在更新訂閱之前,確認「Kafka」主題確實存在。
刪除 Kafka 事件訂閱
當您不再需要「Kafka」訂閱時,即可將其刪除。
當您刪除訂閱時,系統會使用 Event Streams 服務實例的服務憑證,將消費者群組從 Event Streams 服務實例中移除。 若在刪除訂閱時,服務憑證已遭刪除或已失效,則無法從「Event Streams」服務實例中移除消費者群組。 您的 Code Engine Kafka 活動訂閱刪除請求失敗。
從主控台刪除 Kafka 訂閱
- 從 Code Engine 專案頁面,移至您的專案。
- 從「概觀」頁面中,按一下 事件訂閱 以檢視已定義訂閱的清單。
- 從訂閱清單中,刪除您要從應用程式或工作中移除的訂閱。
如果您刪除與訂閱相關聯的應用程式或工作,則不會刪除訂閱。 如果您重建應用程式或工作 (或具有相同名稱的另一個應用程式或工作),則您的訂閱會與應用程式或工作重新連接。
使用 CLI 刪除 Kafka 訂閱
您可以執行 ibmcloud ce subscription kafka delete 指令來刪除 Kafka 訂閱。
例如,使用下列指令來刪除稱為 mykafkasubscription 的 Kafka 訂閱,
ibmcloud ce subscription kafka delete --name mykafkasubscription
如果您刪除與訂閱相關聯的應用程式或工作,則不會刪除訂閱。 相反地,它會移至 false 的備妥狀態,因為訂閱取決於應用程式或工作的可用性。 如果您重建應用程式或工作 (或另一個同名應用程式或工作),則您的訂閱會重新連接,且「備妥」狀態為 true。
定義其他事件屬性
建立訂閱時,您可以定義要併入所產生任何事件中的其他 CloudEvent 屬性。 在遞送事件時,這些屬性會與任何其他 CloudEvent 屬性類似。 如果您選擇指定現有 CloudEvent 屬性的名稱,則它會置換事件中包含的原始值。
若要定義其他屬性,請搭配使用 --extension 選項與 ibmcloud ce subscription kafka create CLI 指令。
如需相關資訊,請參閱 我可以使用其他 CloudEvents 規格嗎?