Oracle Cloud Infrastructure (OCI) Streaming 提供完全託管、可擴展且持久的訊息傳遞解決方案,用於擷取您可以即時使用和處理的連續大量資料串流。所有支援的 Oracle Cloud Infrastructure 區域都提供串流處理功能。如需清單,請瀏覽區域與可用性網域頁面。
Streaming 是一項無伺服器服務,可卸載從網路到儲存的基礎架構管理,以及串流資料所需的組態。您無須擔心基礎架構佈建、持續維護或安全修補。Streaming 服務會跨三個可用性網域同步複製資料,提供高可用性和資料持久性。在具有單一可用性網域的區域中,資料會跨三個容錯網域進行複寫。
串流可讓您輕鬆收集、儲存及處理從數百個來源即時產生的資料。使用案例數目幾乎無限制,範圍從訊息傳遞到複雜的資料串流處理。以下是部分 Streaming 的眾多可能用途:
您可以開始使用 Streaming,如下所示:
您也可以使用 Kafka API 產生及使用串流。如需詳細資訊,請參閱 Using Streaming with Apache Kafka 。
Streaming 的輸送量旨在透過將分割區加入到串流來擴展而不受限制。然而,使用 Streaming 時必須注意某些限制:
串流提供以串流為基礎的語意。串流語意可為每個分割區提供嚴格的排序保證、訊息重新執行性、從屬端游標,以及大量的水平傳輸量。佇列不提供這些功能。如果使用 FIFO 佇列,可以設計佇列來提供排序保證,但僅以在效能中增加顯著負荷的成本。
串流是訊息的分割、僅附加記錄,產生器應用程式會將資料寫入消費者應用程式讀取資料的目標與來源。
串流集區是可用來組織和管理串流的群組。串流集區提供跨多個串流共用組態設定值的功能,讓作業更容易。例如,使用者可以共用安全設定值 (例如串流集區上的自訂加密金鑰),以加密集區內所有串流的資料。串流集區也可讓您透過限制對串流集區內所有串流的網際網路存取,建立串流的專用端點。對於使用 Streaming 之 Kafka 相容性功能的客戶,串流集區可作為虛擬 Kafka 叢集的根目錄,因此能夠將該虛擬叢集上的每個動作範圍設定至該串流集區。
分割區是基準傳輸量單位,可啟用串流生產和消耗的水平調整和平行程度。分割區提供每秒 1 MB 的容量資料輸入和每秒 2 MB 的資料輸出。建立串流時,請根據應用程式的傳輸量需求,指定所需的分割區數目。例如,您可以建立包含 10 個分割區的串流,在此情況下,您可以實現 10 MB/ 秒輸入的傳輸量,以及來自串流的 20 MB/ 秒輸出。
訊息是儲存在串流中的 base64 編碼資料單位。您可以對串流中分割區產生的訊息大小上限為 1 MB。
金鑰是用於對相關訊息進行分組的識別碼。具有相同索引鍵的訊息會寫入相同的分割區。串流可確保指定分割區的任何用戶一律讀取該分割區的訊息,順序與寫入的順序完全相同。
產生器是可以將訊息寫入串流的從屬端應用程式。
用戶是可以從一或多個串流讀取訊息的從屬端應用程式。用戶群組是一組協調串流中所有分割區之訊息的執行處理。在任何指定的時間,特定分割區的訊息只能由群組中的單一用戶使用。
游標是指向串流中某個位置的指標。該位置可以是指向分割區中特定位移或時間,或群組目前位置的指標。
分割區中的每則訊息都具有識別碼,稱為沖銷。使用者可以從一個特定的位移開始讀取訊息,亦可以從他們選擇的任何位移點進行讀取。使用者還可以提交最新處理的位移,以便在停止工作,然後重新啟動時,可以接續工作,不會重播或遺失訊息。
串流預設會在靜態和傳輸中提供資料加密。串流與 Oracle Cloud Infrastructure Identity and Access Management (IAM) 完全整合,可讓您使用存取原則選擇性地將權限授予使用者和使用者群組。使用 REST API 時,您也可以使用 HTTPS 通訊協定,安全地 PUT 並從 Streaming 到 SSL 端點取得資料。此外,串流提供完整的租戶層級資料隔離,沒有任何「資源壟斷」問題。
串流資料會在靜態和傳輸中加密,並確保訊息完整性。如果需要符合特定的規範或安全標準,您可以讓 Oracle 管理加密,或使用 Oracle Cloud Infrastructure Vault 安全地儲存和管理您自己的加密金鑰。
如果您想要切換使用「Oracle 金鑰提供的加密」和「使用客戶管理的金鑰管理的加密」,您可以隨時編輯串流集區的資料加密設定值。「串流處理」不會對此活動執行次數有任何限制。
串流與 Oracle Cloud Infrastructure IAM 完全整合。每個串流皆指派一個區間。使用者可以指定以角色為基礎的存取控制原則,此原則可用來描述租用戶、區間或單一串流層次的微點規則。
存取策略的指定格式為 <location> 中 <conditions> 的允許 <subject> 到 <verb> <resource-type>。
使用 Kafka 協定的認證會使用認證記號和 SASL/PLAIN 機制。您可以在主控台使用者詳細資訊頁面上產生記號。請參閱使用認證權杖以瞭解詳細資訊。建議您建立專用群組 / 使用者,並將管理適當區間或租用戶串流的權限授予該群組。接著,您可以為建立的使用者產生認證權杖,並在 Kafka 從屬端組態中使用該權杖。
專用端點限制對租用戶內指定虛擬雲端網路 (VCN) 的存取,以便無法透過網際網路存取其串流。專用端點會將 VCN 中的專用 IP 位址與串流集區建立關聯,讓串流流量能夠避免周遊網際網路。若要建立串流的專用端點,建立串流集區時,您需要使用專用子網路存取 VCN。如需詳細資訊,請參閱關於專用端點和 VCN 和子網路。
您可以將串流內容直接寫入物件儲存的儲存桶,通常會將資料保存在串流中以進行長期儲存。使用 Kafka Connect for S3 和 Streaming 可以達到此目的。如需詳細資訊,請參閱從 Oracle Streaming Service 發佈到物件儲存部落格文章。
您可以從 Oracle Autonomous Transaction Processing 執行處理中的表格擷取資料。如需詳細資訊,請參閱 Using Kafka Connect With Oracle Streaming Service and Autonomous DB 部落格文章。
您可以使用 Kafka SDK 產生及使用來自 Streaming 的訊息,也可以使用 Micronaut 的內建 Kafka 支援。如需詳細資訊,請參閱 Easy Messaging With Micronaut 的 Kafka Support and Oracle Streaming Service 部落格文章。
如需相關資訊,請參閱從 MQTT 中介將 IoT 資料擷取至 OCI-Oracle Streaming Service、OCI- Kafka Connect Harness 和 Oracle Kubernetes Engine 部落格文章。
Oracle GoldenGate for Big Data 現已通過與 Streaming 整合的認證。如需詳細資訊,請參閱 Oracle GoldenGate for Big Data 文件中的連線至 Oracle Streaming Service 。
您需要使用 Kafka JDBC Sink Connect,將串流資料直接傳輸至 Oracle Autonomous Data Warehouse。
Streaming 使用簡單的隨用隨付定價,確保您只需依據使用的資源付費。訂價維度包含
如需最新的定價資訊,請參閱 OCI Streaming 頁面。
Streaming 領先業界的定價模式可確保您僅在預設服務限制內使用服務時支付費用。
串流不收取將資料移入和移出服務的額外費用。此外,使用者可以利用 Service Connector Hub 的強大功能,以無伺服器方式將資料移入或移出 Streaming,無須額外付費。
串流目前無法在免費層運作。
身分識別與存取管理可讓您控制可存取雲端資源的人員。若要使用 Oracle Cloud Infrastructure 資源,您必須取得管理員所撰寫原則的必要存取類型,無論您是使用主控台或 REST API 搭配 SDK、CLI 或其他工具。指定存取原則的形式如下:
Allow <subject> to <verb> <resource-type> in <location> where <conditions>
租用戶的管理員可以使用原則
Allow group StreamAdmins to manage streams in tenancy
這可讓指定的群組 StreamAdmins 透過從建立、更新、列出及刪除串流及其相關資源等串流進行所有工作。不過,您可以一律指定更精細的原則,讓只有選取群組中的使用者才符合在指定串流上執行之活動的子集。如果您不熟悉原則,請參閱原則入門和通用原則。如果您想要深入探索撰寫 Streaming 原則,請參閱 IAM 原則參照中的串流服務詳細資訊。
您可以使用 Oracle Cloud infrastructure Resource Manager 或 Oracle Cloud Infrastructure 的 Terraform 提供者,佈建串流及其所有相關元件,例如 IAM 原則、分割區、加密設定值等。如需有關 Terraform 提供者的資訊,請參閱 串流服務的 Terraform 主題。
建立串流時,您必須指定串流具有多少分割區。應用程式的預期傳輸量可協助您判斷串流的分割區數目。將平均訊息大小乘以每秒寫入的訊息數目上限,以預估預期的傳輸量。由於單一分割區每秒的寫入速率限制為 1 MB,因此較高的傳輸量需要額外的分割區來避免節流。為了協助您管理應用程式激增,建議您配置的分割區略高於傳輸量上限。
您可以在主控台上建立串流或以程式設計方式建立分割區。
主控台 UI:
程式化:
建立串流
CreateStreamDetails streamDetails =
CreateStreamDetails.builder()
.compartmentId(compartmentId)
.name(streamName)
.partitions(partitions)
.build();
隨附 SDK 提供了更詳細的範例。
「串流處理」會在內部管理分割區,因此您不需要進行管理。使用者無法直接刪除分割區。刪除串流時,會刪除與該串流關聯的所有分割區。
Oracle Cloud Infrastructure 串流的傳輸量由分割區定義。分割區每秒提供 1 MB 的資料輸入,每秒提供 2 MB 的資料輸出。
Oracle Cloud Infrastructure 串流的傳輸量可以透過在其中新增更多分割區來縱向擴展。串流可以保留的分割區數目沒有理論上的上限。不過,每個 Oracle Cloud Infrastructure 租用戶的通用點數類型帳戶預設分割區限制為 5。如果您需要更多分割區,您可以隨時要求提高服務限制。
您可以依照下列步驟要求提高服務限制:
建立串流時,請記住以下幾個最佳做法:
建立串流並處於「作用中」狀態之後,您就可以開始產生訊息。您可以使用主控台或透過 API 產生至串流。
若為主控台:移至主控台的「串流處理」服務區段,位於解決方案與平台 > 分析頁籤底下。如果您已經建立串流,請選取區間中的串流,然後瀏覽至「串流詳細資訊」頁面。按一下主控台上的「產生測試訊息」按鈕。這將會隨機指派分割區索引鍵給訊息,並寫入串流中的分割區。您可以按一下載入訊息按鈕,在最近的訊息段落中檢視此訊息。
API :您可以使用 Oracle Cloud Infrastructure Streaming API 或 Kafka API 產生串流。訊息將發布到串流中的分割區。如果有多個分割區,您可以指定一個索引鍵來選擇要將訊息傳送到哪個分割區,如果未指定索引鍵,則 Streaming 會產生 UUID 並將訊息傳送給隨機分割區,為您指派一個分割區。這樣可確保沒有索引鍵的訊息平均分配到所有分割區。不過,建議您一律指定訊息索引鍵,以便明確控制資料的分割策略。
有關如何使用 Streaming SDK 對串流產生訊息的範例,請參閱說明文件。
在使用 Oracle Cloud Infrastructure API 產生訊息時,分割邏輯是由 Streaming 控制。這稱為伺服器端分割。身為使用者,您可以根據索引鍵選擇要傳送的分割區。索引鍵為雜湊值,而結果值則用來決定要傳送訊息的分割區編號。具有相同索引鍵的訊息將進入同一個分割區。具有不同金鑰的訊息可能會傳到不同分割區或同一個分割區。
不過,如果您使用 Kafka API 產生串流,則分割是由 Kafka 從屬端所控制,Kafka 從屬端中的分割器則負責分割邏輯。這稱為從屬端分割。
為了確保訊息的分佈均勻,您需要有效的訊息關鍵碼值。如果要建立串流資料,請考量串流資料的選擇性和基數。
始終致力於實現高基數和低選擇性。
串流處理可保證分割區內的可線性化讀取和寫入。如果要確保具有相同值的訊息進入相同的分割區,則應對這些訊息使用相同的索引鍵。
分割區提供每秒 1MB 的資料輸入速率,並支援每秒最多 1000 個 PUT 訊息。因此,如果記錄大小小於 1KB,分割區的實際資料輸入速率將會小於每秒 1MB,受每秒 PUT 訊息數目上限的限制。建議您批次產生訊息的原因如下:
一批訊息的大小不應超過 1 MB。如果超出此限制,則會觸發節流機制。
您可以使用區塊功能,或使用 Oracle Cloud Infrastructure Object Storage 傳送訊息。
當產生器以每秒大於 1MB 的速率產生時,會調節要求,並將 429,太多要求錯誤傳回從屬端,指示每一分割區每秒收到太多要求。
用戶是從一個或多個串流中讀取訊息的實體。該實體可以單獨存在,也可以屬於某個使用者群組。若要使用訊息,您必須建立游標,然後使用該游標讀取訊息。游標指向串流中的位置。此位置可以是分割區或群組目前位置中的特定位移或時間。視您要讀取的位置而定,有各種可用的游標類型:TRIM_HORIZON
、AT_OFFSET
、AFTER_OFFSET
、AT_TIME
和 LATEST.
如需詳細資訊,請參閱使用訊息上的文件。
GetMessagesRequest 類別的 getLimit () 方法會傳回訊息數目上限。您最多可以指定 10,000 則訊息。依預設,此服務會傳回盡可能多的訊息。請考量您的平均訊息大小,以避免超出串流的輸送量。串流 GetMessages 批次大小是以對特定串流產生的平均訊息大小為基礎。
「串流處理」為消費者提供「至少一次」的傳遞語意。我們建議您透過使用者應用程式處理重複訊息。例如,當使用者群組先前無效的實例重新加入群組,並開始使用先前指派的實例尚未確認的訊息時,就有機會處理重複項目。
如果您的生產速度比使用速度快,消費者就會落後。若要判斷您的使用者是否落後,您可以使用訊息的時間戳記。如果使用者落後,請考慮建置一個新使用者來接管第一個使用者的某些分割區。如果在單一分割區上落後,則無法復原。
請考慮下列選項:
如果您想知道在指定分割區中還有多少訊息要使用,請使用 LATEST
類型的游標,取得下一個已發布訊息的差異,並以目前使用的差異來計算差異。由於我們沒有密集的偏移量,因此您只能取得粗略的預估值。然而,如果您的製作者停止製作,則您無法取得該資訊,因為您將永遠無法取得下一則已發布訊息的位移。
可以將使用者配置為群組的一部分,以便使用訊息。串流分割區會分散至群組的成員,讓來自任何單一分割區的訊息只傳送到單一用戶。當使用者加入或離開群組時,將重新平衡分割區指派。如需詳細資訊,請參閱用戶群組上的文件。
使用者群組提供以下優勢:
每個串流最多可有 50 個用戶群組。用戶群組是暫時性的。它們不會在串流的保留期間使用時消失。
Streaming 的以下元件具有逾時:
重新平衡是一個過程,其中一組屬於相同用戶群組座標的執行處理,以擁有屬於特定串流的一組互斥分割區。使用者群組成功完成重新平衡操作時,串流中的每個分割區均由群組中的一或多個使用者執行個體擁有。
當用戶群組的執行處理因為傳送活動訊號超過 30 秒或處理作業終止而變成非作用中時,便會在用戶群組內觸發重新平衡活動。這樣做是為了處理先前由非作用中執行處理使用的分割區,並將它重新指派給作用中執行處理。同樣地,當先前非作用中用戶群組的執行處理結合群組時,會觸發重新平衡以指派分割區來開始使用。Streaming 服務在重新加入群組時,不保證將執行個體重新指派給相同分割區。
若要從失敗中復原,您必須儲存您為每個分割區處理之上一個訊息的差異,以便在需要重新啟動使用者時可以從該訊息開始使用。
注意:請勿儲存游標;游標會在 5 分鐘後到期。
我們不會提供任何指引來儲存您處理之最後一則訊息的位移,因此您可以使用任何您需要的方法。例如,您可以將游標儲存在另一個串流、VM 上的檔案或物件儲存的儲存桶。當您的用戶重新啟動時,請閱讀您處理的上一則訊息的差異,然後建立 AFTER_OFFSET
類型的游標,並指定您剛獲得的差異。
Streaming 服務提供 Kafka 端點,可供您現有的 Apache Kafka 型應用程式使用。配置變更全都需要有完全託管的 Kafka 體驗。Streaming 的 Kafka 相容性可讓您替代執行自己的 Kafka 叢集。Streaming 支援 Apache Kafka 1.0 和更新的用戶端版本,並與您現有的 Kafka 應用程式、工具和架構搭配使用。
具有現有 Kafka 應用程式的客戶只要變更其 Kafka 組態檔的下列參數,即可移轉至 Streaming。
security.protocol: SASL_SSL
sasl.mechanism: PLAIN
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="{username}" password="{pwd}";
bootstrap.servers: kafka.streaming.{region}.com:9092
# Application settings
topicName: [streamOcid]
若要搭配 Streaming 使用 Kafka 連接器,請使用主控台或命令行介面 (CLI) 建立 Kafka Connect 組態。Streaming API 會呼叫這些組態 harnesses 。在指定區間中建立的 Kafka Connect 組態只能用於相同區間中的串流。您可以使用多個具有相同 Kafka Connect 組態的 Kafka 連接器。如果需要在個別區間中產生或使用串流,或需要更多容量以避免發生 Kafka Connect 組態的節流限制 (例如太多連接器或具有太多工作人員的連接器),您可以建立更多的 Kafka Connector 組態。
Streaming 的 Kafka Connect 相容性表示您可以利用許多現有的第一方和第三方連接器,將資料從您的來源移至目標。Oracle 產品的 Kafka 連接器包括:
如需第三方 Kafka 來源和槽位連接器的完整清單,請參閱 Confluent Kafka 官方中樞。
串流與 Oracle Cloud Infrastructure Monitoring 完全整合。在主控台中,選取您要監督的串流。在串流詳細資訊頁面中,瀏覽至資源段落,然後按一下產生監督圖表來監督產生器要求,或按一下使用監督圖表來監督用戶端測量結果。測量結果可以在串流層次使用,而不是在分割區層次使用。如需支援的 Streaming 指標描述,請參閱說明文件。
Console 中可用的每個指標均提供下列統計資料:
這些統計資料提供的時間間隔如下:
針對製作者,請考慮根據下列指標設定警報:
對於使用者,請考慮根據下列指標設定相同的警報:
當串流處於「作用中」狀態時,串流狀況良好。如果您可以製作自己的串流,並且獲得成功的回應,那麼串流很健康。在串流中產生資料之後,用戶可以在設定的保留期間內存取該資料。如果 GetMessages API 呼叫傳回更高層級的內部伺服器錯誤,則該服務並不健康。
狀況良好的串流也具有正常的指標:
節流指示串流無法處理任何新的讀取或寫入。當您超過以下臨界值時,節流機制便會啟動:
有關 API 錯誤的詳細資訊,請參閱說明文件。
本頁面是機器翻譯的。