SlideShare une entreprise Scribd logo
1  sur  13
Oracle Cloud Infrastructure
Streaming Service 技術詳説
日本オラクル
Aug, 2020
Copyright © 2020, Oracle and/or its affiliates
1
大量のデータストリームを処理するフルマネージドな分散メッセージングサービス
Streaming (ストリーミング)
Copyright © 2021, Oracle and/or its affiliates.
2
■ ユースケース
ログやイベント、Web/MobileやIoTからのデータストリームを集約、
巨大なシステム内でのサービス間を繋ぐデータハブ
■ 特徴
複雑になりやすいサービス間やコンポーネント間の接続経路を、
Streamingを経由する形にすることでシンプルにすることが可能
Pub/Subモデルの採用により、データ通信を非同期に行い急激なデータ
増加によるシステム負荷の上昇を抑制
Streamingに接続するためのAPIやSDKを提供
• Kafka互換APIを提供
■ 価格
データ転送(登録/取得)1GBごとに3
データの保持1GB×時間ごとに0.024
■ 関連するOracle Cloud Service
• Events (イベント・サービス)
• Oracle Functions (ファンクション)
• API Gateway
IoT Mobile/Web
Activities
App
Kafka
Client
Streaming
Streaming
Events API Gateway
Database System
Object Storage
Functions
Streamingを利用するにあたって理解しておくべき概念とその詳細
• Stream : Partitionで区切られた、Messageの追加のみ可能なデータストア
• Stream Pool : Streamをグループ化したもの
• Kafka Connect利用時にはこのStream Poolの設定値が必要(コンソールから確認可能)
• Message : Base64エンコードされたデータ(KeyとValueで構成)
• 1MBを超えるサイズのMessageは利用できない
• Key : Messageをグルーピングするための識別子、同じKeyを持つMessageは同じPartitionに送られる
Streamingの概念(Stream, Message, Key, Partition)
3
0 1 2 3 4 5
Partition0
0 1 2 3 4
Partition1
0 1 2 3 4 5 6
Partition2
Stream
Messageの追加
(KeyによってPartitionに分配)
Stream Pool
Copyright © 2020, Oracle and/or its affiliates
Streamingを利用するにあたって理解しておくべき概念とその詳細
• Offset : Partition内でのMessageの識別子
• Offsetを保存しておくことで、そのOffsetから読み出しを再開できる
• 0, 1, 2, 4, 5, 7 のように、必ずしも密にはならないため、「次のOffsetを算出して読み出しを再開」という処理は書け
ない
• Cursor : SDKを利用する際にStreamからMassageを読み出す際のポインタ
• Cursorは作成後5分経つと失効する
• 失効するため、Cursorを保存しておいて障害からの回復に使うのは危険
• Partition : Streamの中の区切りであり、これにより並列なMessageの読み出しを実現できる
• Partitionの名称は自動的に0,1,2,3,4,...と割り当てられる
• Partitionの数量はStreamの作成時に指定(後から追加/削除はできない)
Streamingの概念(Offset, Cursor)
4
0 1 2 4 5 7
Partition
Stream
Offset
Cursor
Copyright © 2020, Oracle and/or its affiliates
Producer : Messageを書き込む(Publish)役割
• 同じKeyのMessageは、同一のPartitionに配信される
• Producerが明示的にどのPartitionに書き込むかを指定することはできない
• Keyを指定することで、Partition内での同一Keyでの配信順序を保持できる(first-in/first-out)
Consumer : Messageを読み出す(Subscribe)役割
• Messageが作成された順に、Messageを読み出す
• 複数のPartitionから読み出す場合は、Messageの順序は保証されない
• どこまでMessageを読み出したかはOffsetを用いて判断
ProducerとConsumer – Streamingの周辺コンポーネント
5
0 1 2
0 1
0
Stream
Producer 1
PutMessage API GetMessage API
Producer 2
Producer 3
Consumer 1
Consumer 2
Consumer 3
Partition0
Partition1
Partition2
Key0
Value
Key2
Value
Key1
Value
Key2
Value
Key0
Value
Copyright © 2020, Oracle and/or its affiliates
Streamの作成後、APIを利用しメッセージの書き込み(Produce)可能に
• Streamの作成はOCIコンソールやAPIで行うことができる
Messageの読み出し(Consume)のためには、Cursorを利用する
• OffsetのポインターとなるCursorを、Partitionを指定して作成
• 作成したCursorを利用して、PartitionからMessageを読み出し
• Cursorは都度生成せず、Message取得時に取得できるNextCursorを利用する
その他のProduce/Consume方法
• Kafka互換性APIの利用
• Kafka Connect構成を利用
• Kafka Connectと接続し、Object StorageやAutonomous DBとの接続が可能
MessageのProduceとConsume
6 Copyright © 2020, Oracle and/or its affiliates
• Cursorは5つの種類があり、作成時に対応するパラメータとともに指定
• TRIM_HORIZON: 全てのMessageを取得、パラメータ無し
• AT_OFFSET: 特定のOffset以上のMessageを取得、パラメータはOffset
• AFTER_OFFSET: 特定のOffsetより大きなMessageを取得、パラメータはOffset
• AT_TIME: 指定した時間以降のMessageを取得、パラメータはTime
• LATEST: Cursorの初回生成後に追加されたMessageを取得
• Cursor作成時の種類は、どのようにMessageを取得したいかで決める
Cursorの詳細
Copyright © 2020, Oracle and/or its affiliates
7
Offset - 0
Timestamp – 00:00
Offset - 1
Timestamp – 00:01
Offset - 2
Timestamp – 00:02
Offset - 3
Timestamp – 00:03
TRIM_HORIZON
AT_OFFSET(1)
AFTER_OFFSET(1)
AT_TIME(00:03)
※Cursor
生成
Offset – 4
Timestamp – 00:04
LATEST
• 複数のConsumerでグループを構成
• GroupNameがGroupの識別子となり、Consumerの識別子はInstanceName
• Group内のConsumerは、それぞれ単一のPartitionから読み出す
• 同じGroup内の複数のConsumerが、同一のPartitionからMessageを読み出すことはできない
• この仕組みが、並列かつPartitionの重複がないデータの読み出しを可能にする
Consumer Groupの概要
8
Consumer 1
Consumer 2
Consumer 3
Grp. A
0 1 2
0 1
0
Stream
Partition0
Partition1
Partition2 Consumer 4
Consumer 5
Consumer 6
Grp. B
Copyright © 2020, Oracle and/or its affiliates
Consumer Groupを使う際には、GroupCursorを利用する
• GroupNameとInstanceNameを指定し、GroupCursorを取得する
Consumer Groupの使い方
9
Consumer 1
Consumer 2
Grp. A
0 1 2
Stream
0
1 0 1
.groupName(“GroupA”)
.instanceName(“Consumer1”)
.groupName(“GroupA”)
.instanceName(“Consumer2”)
取得したGroupCursorをそれぞれ利用
GroupCursorの種類は
・TRIM_HORIZON
・AT_TIME
・LATEST
に限定される
Copyright © 2020, Oracle and/or its affiliates
• Consumer Group内のアサイン(どのPartitionから読み出すか)は自動的に決まる
• Consumer Groupにはリバランスという仕組みがある
• インスタンスが追加された場合には、Consumerは読み出しの負荷を分散する
• インスタンスがエラーなどで削除された場合、残ったConsumerで全てのPartitionから読み出すように動作
Consumer Groupの仕組み
10
Consumer 1
Consumer 2
0 1 2
Stream
0
1
2
0
0 1
Consumer3,
Consumer4の
順番に追加
リバランスされる
追加後も待機状態に
Consumer 1
Consumer 2
3 5
Stream
0
1
2
1 2
2 3
Consumer 3
Consumer 4
※図はTRIM_HORIZONの場合の動作
3 5 6
Stream
0
1
2
1 2 3
4 6
Consumer 3
Consumer 4
Consumer 1
Consumer 2
3 5
Stream
0
1
2
1 2
2 3
Consumer 3
Consumer 4
Consumer1,
Consumer2
を停止
停止したインスタンスが
一度読み出したOffsetを
もう一度読み出し、
リバランスされる
(詳しくは次スライド)
Copyright © 2020, Oracle and/or its affiliates
• Consumer Groupには、Messageを欠落させないための
仕組みであるCommitという概念がある
• Commitを自動で行うCommitOnGet: Message取得時に、
最後に取得したMessageのOffsetをCommitする
• Consumer 1が0-99のMessageを取得し、100-199のMessage取得時に
落ちた場合、99がCommitされる
• 結果的に引き継ぐConsumer 2は、100からMessageを取得する
ため、データロスしないことになる
• CommitのタイミングはgetMessagesAPI実行時
• 自動CommitをOffにすることも可能
Consumer GroupにおけるCommitの概念
Copyright © 2020, Oracle and/or its affiliates
11
Consumer 1
Consumer 2
0 … 99
Stream
0
301 … 400
1
0-99のMessageを取得後、 100-
199のMessageを取得しに行く
Consumer 1
Consumer 2
0 … 99 100 … 199
Stream
0
1 301 … 400 401 … 500
停止
Partition0の読み出しを
Consumer2が引き継ぐ
Consumer 1
Consumer 2
0 … 99 100 … 199 200 … 299
Stream
0
301 … 400 401 … 500 501 … 600
1
返却されたNextCursorを利用して引き
続き501以降のMessageを読み出し
99がCommitされているので、100以降の読み
出しから引き継げる(データロスを防げる)
Consumerがエラーなどで停止した際、30秒経つとそのInstanceはConsumer Groupから除外される
• プログラムの都合上、Consumerが30秒以上Messageを取得しない可能性がある場合には、
Heartbeat APIを利用してConsumer Groupから除外されないようにする
• 一度停止したConsumerを再開したとしても、自動リバランスにより、停止する前と同様のPartitionか
ら読み出すとは限らない
Consumer GroupにおけるConsumerのライフサイクル
Copyright © 2020, Oracle and/or its affiliates
12
Consumer 1
Consumer 2
0 … 100
Stream
0
301 … 400
1
停止
30秒後
Consumer 3
Consumer 4
HeartbeatAPIの実行
Consumer 2
0 … 100
Stream
0
301 … 400
1
Consumer 3
Consumer 4
HeartbeatAPIの実行
Groupから除外されない
Consumer1はGroupか
ら除外され、再度
Groupに入ったとして
もPartition0から読み
出すわけではない
Oracle Cloud Infrastructure Streaming Service 技術詳説

Contenu connexe

Tendances

[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
Funada Yasunobu
 

Tendances (20)

え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
Oci object storage deep dive 20190329 ss
Oci object storage deep dive 20190329 ssOci object storage deep dive 20190329 ss
Oci object storage deep dive 20190329 ss
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
OCI 購入モデルの整理と Universal Credit 最新情報(2021年2月17日版)
OCI 購入モデルの整理と Universal Credit 最新情報(2021年2月17日版)OCI 購入モデルの整理と Universal Credit 最新情報(2021年2月17日版)
OCI 購入モデルの整理と Universal Credit 最新情報(2021年2月17日版)
 
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介
 
The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発The Twelve-Factor Appで考えるAWSのサービス開発
The Twelve-Factor Appで考えるAWSのサービス開発
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
LiBRA 09.2021 / 営業向け講演
LiBRA 09.2021 / 営業向け講演LiBRA 09.2021 / 営業向け講演
LiBRA 09.2021 / 営業向け講演
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
 
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
事例から見る規模別クラウド・データベースの選び方 (Oracle Database) (Oracle Cloudウェビナーシリーズ: 2021年6月30日)
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
 

Similaire à Oracle Cloud Infrastructure Streaming Service 技術詳説

RACCOON 活用シーン Vol.5(2021/03/04)
RACCOON 活用シーン Vol.5(2021/03/04)RACCOON 活用シーン Vol.5(2021/03/04)
RACCOON 活用シーン Vol.5(2021/03/04)
Tatsuya Kurobuchi
 

Similaire à Oracle Cloud Infrastructure Streaming Service 技術詳説 (20)

Oracle Cloud PaaS & IaaS:2019年10月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2019年10月度サービス情報アップデートOracle Cloud PaaS & IaaS:2019年10月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2019年10月度サービス情報アップデート
 
Database Cloud Service/Exadata Cloud Service/Exadata Cloud at Customer サービスアッ...
Database Cloud Service/Exadata Cloud Service/Exadata Cloud at Customer サービスアッ...Database Cloud Service/Exadata Cloud Service/Exadata Cloud at Customer サービスアッ...
Database Cloud Service/Exadata Cloud Service/Exadata Cloud at Customer サービスアッ...
 
Oracle Cloud Infrastructure:2021年5月度サービス・アップデート
Oracle Cloud Infrastructure:2021年5月度サービス・アップデートOracle Cloud Infrastructure:2021年5月度サービス・アップデート
Oracle Cloud Infrastructure:2021年5月度サービス・アップデート
 
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
WindowsAzureの長所を活かすクラウド アプリ開発(PDF版)
 
Oracle Cloud PaaS & IaaS:2018年4月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2018年4月度サービス情報アップデートOracle Cloud PaaS & IaaS:2018年4月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2018年4月度サービス情報アップデート
 
エンタープライズ・クラウドのシステム・デザイン・パターン [Oracle Cloud Days Tokyo 2016]
エンタープライズ・クラウドのシステム・デザイン・パターン [Oracle Cloud Days Tokyo 2016]エンタープライズ・クラウドのシステム・デザイン・パターン [Oracle Cloud Days Tokyo 2016]
エンタープライズ・クラウドのシステム・デザイン・パターン [Oracle Cloud Days Tokyo 2016]
 
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
ITアーキテクトのためのOracle Cloud Platform設計・構築入門 [Oracle Cloud Days Tokyo 2016]
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
Oracle Cloud Infrastructure:2023年3月度サービス・アップデート
Oracle Cloud Infrastructure:2023年3月度サービス・アップデートOracle Cloud Infrastructure:2023年3月度サービス・アップデート
Oracle Cloud Infrastructure:2023年3月度サービス・アップデート
 
20180421 environment managewithlogicflow
20180421 environment managewithlogicflow20180421 environment managewithlogicflow
20180421 environment managewithlogicflow
 
RACCOON 活用シーン Vol.5(2021/03/04)
RACCOON 活用シーン Vol.5(2021/03/04)RACCOON 活用シーン Vol.5(2021/03/04)
RACCOON 活用シーン Vol.5(2021/03/04)
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
App012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_をApp012 linux java_にも対応!_azure_service_fabric_を
App012 linux java_にも対応!_azure_service_fabric_を
 
Service Fabric での高密度配置
 Service Fabric での高密度配置 Service Fabric での高密度配置
Service Fabric での高密度配置
 
Cloudian: Amazon S3準拠マルチテナント・クラウドストレージ・システム
Cloudian: Amazon S3準拠マルチテナント・クラウドストレージ・システムCloudian: Amazon S3準拠マルチテナント・クラウドストレージ・システム
Cloudian: Amazon S3準拠マルチテナント・クラウドストレージ・システム
 
Microsoft Azure build & ignight update summary
Microsoft Azure build & ignight update summary Microsoft Azure build & ignight update summary
Microsoft Azure build & ignight update summary
 
インタークラウドシステムの実用化に向けて
インタークラウドシステムの実用化に向けてインタークラウドシステムの実用化に向けて
インタークラウドシステムの実用化に向けて
 
Hinemosによるハイブリッドクラウド運用管理の最新情報
Hinemosによるハイブリッドクラウド運用管理の最新情報Hinemosによるハイブリッドクラウド運用管理の最新情報
Hinemosによるハイブリッドクラウド運用管理の最新情報
 
次世代インフラ基盤登場!Oracle Cloud IaaS 最新サービス・アップデート [Oracle Cloud Days Tokyo 2016]
次世代インフラ基盤登場!Oracle Cloud IaaS 最新サービス・アップデート [Oracle Cloud Days Tokyo 2016]次世代インフラ基盤登場!Oracle Cloud IaaS 最新サービス・アップデート [Oracle Cloud Days Tokyo 2016]
次世代インフラ基盤登場!Oracle Cloud IaaS 最新サービス・アップデート [Oracle Cloud Days Tokyo 2016]
 
Oracle Cloud PaaS & IaaS:2018年7月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2018年7月度サービス情報アップデートOracle Cloud PaaS & IaaS:2018年7月度サービス情報アップデート
Oracle Cloud PaaS & IaaS:2018年7月度サービス情報アップデート
 

Plus de オラクルエンジニア通信

Plus de オラクルエンジニア通信 (20)

Oracle Cloud Infrastructure:2023年5月度サービス・アップデート
Oracle Cloud Infrastructure:2023年5月度サービス・アップデートOracle Cloud Infrastructure:2023年5月度サービス・アップデート
Oracle Cloud Infrastructure:2023年5月度サービス・アップデート
 
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
Oracle Cloud Infrastructure:2023年4月度サービス・アップデートOracle Cloud Infrastructure:2023年4月度サービス・アップデート
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
 
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
Oracle Cloud Infrastructure:2023年1月度サービス・アップデートOracle Cloud Infrastructure:2023年1月度サービス・アップデート
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年12月度サービス・アップデート
Oracle Cloud Infrastructure:2022年12月度サービス・アップデートOracle Cloud Infrastructure:2022年12月度サービス・アップデート
Oracle Cloud Infrastructure:2022年12月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年11月度サービス・アップデート
Oracle Cloud Infrastructure:2022年11月度サービス・アップデートOracle Cloud Infrastructure:2022年11月度サービス・アップデート
Oracle Cloud Infrastructure:2022年11月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年10月度サービス・アップデート
Oracle Cloud Infrastructure:2022年10月度サービス・アップデートOracle Cloud Infrastructure:2022年10月度サービス・アップデート
Oracle Cloud Infrastructure:2022年10月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデートOracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデートOracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデートOracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデートOracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデートOracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデートOracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデート
 
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)
 
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
 
Oracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデートOracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデートOracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデートOracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
 
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
 
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデートOracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
 

Dernier

Dernier (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Oracle Cloud Infrastructure Streaming Service 技術詳説

  • 1. Oracle Cloud Infrastructure Streaming Service 技術詳説 日本オラクル Aug, 2020 Copyright © 2020, Oracle and/or its affiliates 1
  • 2. 大量のデータストリームを処理するフルマネージドな分散メッセージングサービス Streaming (ストリーミング) Copyright © 2021, Oracle and/or its affiliates. 2 ■ ユースケース ログやイベント、Web/MobileやIoTからのデータストリームを集約、 巨大なシステム内でのサービス間を繋ぐデータハブ ■ 特徴 複雑になりやすいサービス間やコンポーネント間の接続経路を、 Streamingを経由する形にすることでシンプルにすることが可能 Pub/Subモデルの採用により、データ通信を非同期に行い急激なデータ 増加によるシステム負荷の上昇を抑制 Streamingに接続するためのAPIやSDKを提供 • Kafka互換APIを提供 ■ 価格 データ転送(登録/取得)1GBごとに3 データの保持1GB×時間ごとに0.024 ■ 関連するOracle Cloud Service • Events (イベント・サービス) • Oracle Functions (ファンクション) • API Gateway IoT Mobile/Web Activities App Kafka Client Streaming Streaming Events API Gateway Database System Object Storage Functions
  • 3. Streamingを利用するにあたって理解しておくべき概念とその詳細 • Stream : Partitionで区切られた、Messageの追加のみ可能なデータストア • Stream Pool : Streamをグループ化したもの • Kafka Connect利用時にはこのStream Poolの設定値が必要(コンソールから確認可能) • Message : Base64エンコードされたデータ(KeyとValueで構成) • 1MBを超えるサイズのMessageは利用できない • Key : Messageをグルーピングするための識別子、同じKeyを持つMessageは同じPartitionに送られる Streamingの概念(Stream, Message, Key, Partition) 3 0 1 2 3 4 5 Partition0 0 1 2 3 4 Partition1 0 1 2 3 4 5 6 Partition2 Stream Messageの追加 (KeyによってPartitionに分配) Stream Pool Copyright © 2020, Oracle and/or its affiliates
  • 4. Streamingを利用するにあたって理解しておくべき概念とその詳細 • Offset : Partition内でのMessageの識別子 • Offsetを保存しておくことで、そのOffsetから読み出しを再開できる • 0, 1, 2, 4, 5, 7 のように、必ずしも密にはならないため、「次のOffsetを算出して読み出しを再開」という処理は書け ない • Cursor : SDKを利用する際にStreamからMassageを読み出す際のポインタ • Cursorは作成後5分経つと失効する • 失効するため、Cursorを保存しておいて障害からの回復に使うのは危険 • Partition : Streamの中の区切りであり、これにより並列なMessageの読み出しを実現できる • Partitionの名称は自動的に0,1,2,3,4,...と割り当てられる • Partitionの数量はStreamの作成時に指定(後から追加/削除はできない) Streamingの概念(Offset, Cursor) 4 0 1 2 4 5 7 Partition Stream Offset Cursor Copyright © 2020, Oracle and/or its affiliates
  • 5. Producer : Messageを書き込む(Publish)役割 • 同じKeyのMessageは、同一のPartitionに配信される • Producerが明示的にどのPartitionに書き込むかを指定することはできない • Keyを指定することで、Partition内での同一Keyでの配信順序を保持できる(first-in/first-out) Consumer : Messageを読み出す(Subscribe)役割 • Messageが作成された順に、Messageを読み出す • 複数のPartitionから読み出す場合は、Messageの順序は保証されない • どこまでMessageを読み出したかはOffsetを用いて判断 ProducerとConsumer – Streamingの周辺コンポーネント 5 0 1 2 0 1 0 Stream Producer 1 PutMessage API GetMessage API Producer 2 Producer 3 Consumer 1 Consumer 2 Consumer 3 Partition0 Partition1 Partition2 Key0 Value Key2 Value Key1 Value Key2 Value Key0 Value Copyright © 2020, Oracle and/or its affiliates
  • 6. Streamの作成後、APIを利用しメッセージの書き込み(Produce)可能に • Streamの作成はOCIコンソールやAPIで行うことができる Messageの読み出し(Consume)のためには、Cursorを利用する • OffsetのポインターとなるCursorを、Partitionを指定して作成 • 作成したCursorを利用して、PartitionからMessageを読み出し • Cursorは都度生成せず、Message取得時に取得できるNextCursorを利用する その他のProduce/Consume方法 • Kafka互換性APIの利用 • Kafka Connect構成を利用 • Kafka Connectと接続し、Object StorageやAutonomous DBとの接続が可能 MessageのProduceとConsume 6 Copyright © 2020, Oracle and/or its affiliates
  • 7. • Cursorは5つの種類があり、作成時に対応するパラメータとともに指定 • TRIM_HORIZON: 全てのMessageを取得、パラメータ無し • AT_OFFSET: 特定のOffset以上のMessageを取得、パラメータはOffset • AFTER_OFFSET: 特定のOffsetより大きなMessageを取得、パラメータはOffset • AT_TIME: 指定した時間以降のMessageを取得、パラメータはTime • LATEST: Cursorの初回生成後に追加されたMessageを取得 • Cursor作成時の種類は、どのようにMessageを取得したいかで決める Cursorの詳細 Copyright © 2020, Oracle and/or its affiliates 7 Offset - 0 Timestamp – 00:00 Offset - 1 Timestamp – 00:01 Offset - 2 Timestamp – 00:02 Offset - 3 Timestamp – 00:03 TRIM_HORIZON AT_OFFSET(1) AFTER_OFFSET(1) AT_TIME(00:03) ※Cursor 生成 Offset – 4 Timestamp – 00:04 LATEST
  • 8. • 複数のConsumerでグループを構成 • GroupNameがGroupの識別子となり、Consumerの識別子はInstanceName • Group内のConsumerは、それぞれ単一のPartitionから読み出す • 同じGroup内の複数のConsumerが、同一のPartitionからMessageを読み出すことはできない • この仕組みが、並列かつPartitionの重複がないデータの読み出しを可能にする Consumer Groupの概要 8 Consumer 1 Consumer 2 Consumer 3 Grp. A 0 1 2 0 1 0 Stream Partition0 Partition1 Partition2 Consumer 4 Consumer 5 Consumer 6 Grp. B Copyright © 2020, Oracle and/or its affiliates
  • 9. Consumer Groupを使う際には、GroupCursorを利用する • GroupNameとInstanceNameを指定し、GroupCursorを取得する Consumer Groupの使い方 9 Consumer 1 Consumer 2 Grp. A 0 1 2 Stream 0 1 0 1 .groupName(“GroupA”) .instanceName(“Consumer1”) .groupName(“GroupA”) .instanceName(“Consumer2”) 取得したGroupCursorをそれぞれ利用 GroupCursorの種類は ・TRIM_HORIZON ・AT_TIME ・LATEST に限定される Copyright © 2020, Oracle and/or its affiliates
  • 10. • Consumer Group内のアサイン(どのPartitionから読み出すか)は自動的に決まる • Consumer Groupにはリバランスという仕組みがある • インスタンスが追加された場合には、Consumerは読み出しの負荷を分散する • インスタンスがエラーなどで削除された場合、残ったConsumerで全てのPartitionから読み出すように動作 Consumer Groupの仕組み 10 Consumer 1 Consumer 2 0 1 2 Stream 0 1 2 0 0 1 Consumer3, Consumer4の 順番に追加 リバランスされる 追加後も待機状態に Consumer 1 Consumer 2 3 5 Stream 0 1 2 1 2 2 3 Consumer 3 Consumer 4 ※図はTRIM_HORIZONの場合の動作 3 5 6 Stream 0 1 2 1 2 3 4 6 Consumer 3 Consumer 4 Consumer 1 Consumer 2 3 5 Stream 0 1 2 1 2 2 3 Consumer 3 Consumer 4 Consumer1, Consumer2 を停止 停止したインスタンスが 一度読み出したOffsetを もう一度読み出し、 リバランスされる (詳しくは次スライド) Copyright © 2020, Oracle and/or its affiliates
  • 11. • Consumer Groupには、Messageを欠落させないための 仕組みであるCommitという概念がある • Commitを自動で行うCommitOnGet: Message取得時に、 最後に取得したMessageのOffsetをCommitする • Consumer 1が0-99のMessageを取得し、100-199のMessage取得時に 落ちた場合、99がCommitされる • 結果的に引き継ぐConsumer 2は、100からMessageを取得する ため、データロスしないことになる • CommitのタイミングはgetMessagesAPI実行時 • 自動CommitをOffにすることも可能 Consumer GroupにおけるCommitの概念 Copyright © 2020, Oracle and/or its affiliates 11 Consumer 1 Consumer 2 0 … 99 Stream 0 301 … 400 1 0-99のMessageを取得後、 100- 199のMessageを取得しに行く Consumer 1 Consumer 2 0 … 99 100 … 199 Stream 0 1 301 … 400 401 … 500 停止 Partition0の読み出しを Consumer2が引き継ぐ Consumer 1 Consumer 2 0 … 99 100 … 199 200 … 299 Stream 0 301 … 400 401 … 500 501 … 600 1 返却されたNextCursorを利用して引き 続き501以降のMessageを読み出し 99がCommitされているので、100以降の読み 出しから引き継げる(データロスを防げる)
  • 12. Consumerがエラーなどで停止した際、30秒経つとそのInstanceはConsumer Groupから除外される • プログラムの都合上、Consumerが30秒以上Messageを取得しない可能性がある場合には、 Heartbeat APIを利用してConsumer Groupから除外されないようにする • 一度停止したConsumerを再開したとしても、自動リバランスにより、停止する前と同様のPartitionか ら読み出すとは限らない Consumer GroupにおけるConsumerのライフサイクル Copyright © 2020, Oracle and/or its affiliates 12 Consumer 1 Consumer 2 0 … 100 Stream 0 301 … 400 1 停止 30秒後 Consumer 3 Consumer 4 HeartbeatAPIの実行 Consumer 2 0 … 100 Stream 0 301 … 400 1 Consumer 3 Consumer 4 HeartbeatAPIの実行 Groupから除外されない Consumer1はGroupか ら除外され、再度 Groupに入ったとして もPartition0から読み 出すわけではない

Notes de l'éditeur

  1. Grpがなぜ必要なのかという話をする - 異なるアプリが同じようにデータを取り扱いやすくするため
  2. KafkaとCommitのタイミング
  3. 実際にはGetMessageAPIが使われることが多い