Oracle Cloud Infrastructure (OCI) Streaming 提供完全託管、可擴展且持久的訊息傳遞解決方案,用於擷取您可以即時使用的連續大量資料串流。所有支援的 Oracle Cloud Infrastructure 區域都提供串流處理功能。如需清單,請瀏覽區域與可用性網域頁面。
串流是一種無伺服器服務,可卸載從網路到儲存的基礎架構管理,以及串流資料所需的組態。您無需擔心基礎架構佈建、持續維護或安全修補。Streaming 服務會同步地跨三個可用性網域複製資料,提供高可用性和資料持久性。在具有單一可用性網域的區域中,資料會跨三個容錯域進行複寫。
「串流處理」可讓您輕鬆收集、儲存及處理從數百個來源即時產生的資料。從訊息傳遞到複雜資料串流處理,使用案例數目幾乎無限制。下列是「串流處理」的一些可能用途:
您可以開始使用 Streaming,如下所示:
您也可以改用 Kafka API 從串流產生及使用。如需詳細資訊,請參閱搭配使用串流處理與 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 協定透過 SSL 端點安全地 PUT 和 GET 資料。此外,「串流處理」提供完整的租用戶層級資料隔離,不會發生任何「其他資源」問題。
串流資料會同時加密靜態和傳輸中資料,並確保訊息的完整性。如果您需要符合特定的合規性或安全標準,可以讓 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 AI Transaction Processing 執行處理中的表格擷取資料。如需詳細資訊,請參閱 Using Kafka Connect With Oracle Streaming Service and Autonomous DB 部落格文章。
您可以使用 Kafka SDK 產生及使用來自 Streaming 的訊息,也可以使用 Micronaut 內建的 Kafka 支援。如需詳細資訊,請參閱 Easy Messaging With Micronaut's Kafka Support and Oracle Streaming Service 部落格文章。
如需詳細資訊,請參閱將 IoT 資料從 MQTT 中介擷取至 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 AI Lakehouse。
「串流處理」使用簡單的隨用隨付定價,確保您只需為使用的資源付費。訂價維度包含
如需最新的定價資訊,請參考 OCI Streaming 頁面。
Streaming 的業界頂尖定價模型可確保您僅在使用預設服務限制內的服務時才需要付費。
「串流處理」不會為將資料移入和移出服務收取額外價格。此外,使用者還可以利用 Service Connector Hub 的強大功能,以無伺服器方式將資料移入和移出 Streaming,無須額外付費。
串流處理目前不適用於免費層。
身分識別和存取管理可讓您控制能夠存取雲端資源的人員。若要使用 Oracle Cloud Infrastructure 資源,無論您是使用主控台或搭配 SDK、CLI 或其他工具的 REST API,都必須在管理員編寫的原則中取得所需的存取類型。存取 policy 的指定格式如下
Allow <subject> to <verb> <resource-type> in <location> where <conditions>
租用戶管理員可以使用原則
Allow group StreamAdmins to manage streams in tenancy
這樣可以讓指定的群組 StreamAdmins 透過串流處理執行所有動作,串流範圍包括建立、更新、列出以及刪除串流及其相關資源。不過,您可以隨時指定更精細的原則,讓只有選取群組中的使用者才能夠只使用他們可以在指定串流上執行的活動子集。如果您是原則的新手,請參閱原則入門和一般原則。如果您想要深入瞭解「串流處理」的撰寫原則,請參閱 IAM 原則參照中的串流處理服務的詳細資訊。
You can provision a stream and all its associated components like IAM policies, partitions, encryption settings, etc., using the Oracle Cloud infrastructure Resource Manager or Terraform provider for Oracle Cloud Infrastructure. 如需 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 來產生串流。訊息將發布到串流中的分割區。如果有一個以上的分割區,您可以指定一個索引鍵來選擇要將訊息傳送至哪個分割區,如果未指定索引鍵,「串流處理」會產生 UUID 並將訊息傳送給隨機分割區,為您指派一個分割區。這樣可確保沒有任何金鑰的訊息會平均分配到所有分割區中。不過,建議您一律指定訊息索引鍵,以便明確控制資料的分割策略。
有關如何使用 Streaming SDK 產生訊息至串流的範例,請參閱文件。
在使用 Oracle Cloud Infrastructure API 產生訊息時,分割邏輯是由 Streaming 控制。這稱為伺服器端分割。身為使用者,您可以根據索引鍵選擇要傳送的分割區。索引鍵是雜湊值,而產生的值則是用來決定要傳送訊息的分割區編號。具有相同索引鍵的訊息將進入同一個分割區。具有不同索引鍵的訊息可能會移至不同分割區或相同分割區。
不過,如果您使用 Kafka API 產生串流,則分割是由 Kafka 從屬端控制,而 Kafka 從屬端中的分割器則負責分割邏輯。這稱為用戶端分割。
若要確保訊息的統一分送,您需要有效的訊息索引鍵值。要建立串流資料,請考慮串流資料的選擇性與基數。
一律以高基數及低選擇性為目標。
串流可確保分割區內的可線性讀取和寫入。如果要確保具有相同值的訊息進入相同的分割區,則應對這些訊息使用相同的索引鍵。
分割區提供每秒 1MB 的資料輸入速率,且每秒最多支援 1000 則 PUT 訊息。因此,如果記錄大小小於 1 KB,分割區的實際資料輸入速率將會小於每秒 1 MB,受限於每秒的 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 個用戶群組。用戶群組是臨時的。它們在未用於串流保留期間時會消失。
「串流處理」的下列元件有逾時:
重新平衡是一個處理作業,其中一組屬於相同用戶群組協調的執行處理,擁有一組屬於特定串流的互斥分割區。用戶群組成功重新平衡作業結束時,串流中的每個分割區都是由群組內的一或多個用戶執行處理所擁有。
當使用者群組的例項因無法傳送活動訊號超過 30 秒或程序終止而變成非作用中時,使用者群組內會觸發重新平衡活動。這麼做是為了處理非作用中執行處理先前所使用的分割區,並將其重新指派給作用中執行處理。同樣地,當先前非作用中的用戶群組例項加入群組時,會觸發重新平衡以指派分割區開始使用。Streaming 服務在執行處理重新加入群組時,不保證將執行處理重新指派給相同的分割區。
若要從失敗中復原,您必須儲存為每個分割區處理的最後一個訊息的位移,以便在需要重新啟動用戶時從該訊息開始使用。
注意:請勿儲存游件;這些游標會在 5 分鐘後過期。
我們不會提供任何指引來儲存上次處理的訊息偏移量,因此您可以使用任何想要的方法。例如,您可以將游標儲存在另一個串流上、VM 上的檔案或物件儲存的儲存桶上。重新啟動用戶時,請閱讀您處理之最後一個訊息的位移,然後建立類型為 AFTER_OFFSET 的游標,並指定您剛剛得到的位移。
Streaming 服務提供 Kafka 端點,可供您現有的 Apache Kafka 型應用程式使用。所有組態變更都必須具備完全受管理的 Kafka 體驗。Streaming 的 Kafka 相容性可替代執行您自己的 Kafka 叢集。「串流處理」支援 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]
若要使用您的 Kafka 連接器搭配 Streaming,請使用主控台或命令行介面 (CLI) 建立 Kafka Connect 組態。Streaming API 會呼叫這些組態的工作角色。在指定區間中建立的 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 錯誤的詳細資訊,請參閱說明文件。