原文はこちら
あるホスティング環境から別の環境へのアプリケーションとワークロードの移行はともするとたいへんな道のりになります。過去15年のあいだ、わたしは何度もなんとか移行をしなければならないことがあり、それらは完全に平易なものでも楽しいものでもありませんでした。そこでは避けがたく予期していなかった問題が生じ、時には単純なアップグレードですら終わりなき頭痛を引き起こすこともありました。なので、Oracle Cloudへアプリケーションを移行しなければならない開発者、そしてDevOpsエンジニアのみなさんには同情します。同時に、アプリケーションをOracle Cloudへ移行することによって得られる利益はいつだって不利益を上回るとも考えています。このような移行の労苦については多くの検討が内部でなされており、数あるツール、また、プロセスをより簡単で苦労を少なくするためのちょっとした「ワザ」が開発されています。このポストではそうした「ワザ」のうちひとつについてお話します。
Kafkaは疑いなくデータストリーミング(とその他)でポピュラーで、それは性能がよく、信頼でき、利用を容易にするためのSDK実装がいくつもあるからです。あなたのアプリケーションもすでにKafkaを利用しているかもしれません。おそらくあなたはあるマイクロサービスでメッセージをProduceし、他のマイクロサービスでConsumeしているかも。ではなぜこのような目的のために、KafkaではなくOracle Streaming Service(OSS)を使うことを検討するべきなのでしょうか?わたしの経験上、ZookeeperとKafkaクラスターをホストするためのインフラを構築し、保守するのは大変な苦労(とコスト)を伴い、したがってあなたは深い知識と構成管理のための余分な時間が必要になります。その代わりに、すぐに使い出せるホステッド環境を提供するOSSのようなサービスを活用することで、そうした時間(とコストの一部)が不要になります。このブログポストでは、あなたのアプリケーションでKafka SDK for Javaを使うことでOSSをかんたんに使えるということをご説明していきます。このKafka互換機能は現状ではLimited Availabilityでの提供となっていますが、遠くないうちにGAとなる予定です。
Streamの構成
まず初めに、このデモのためにちゃちゃっとStreamトピックを構成しちゃいましょう。Oracle Cloudのダッシュボードコンソールから、'Analytics' -> 'Streaming'と選択します。
Image may be NSFW.
Clik here to view.
Clik here to view.

Streamのリストページで、'Create Stream'をクリック(必要に応じてこのStreamを配置するのに適切なコンパートメントを左のサイドバーから選択しておいてください)。
Image may be NSFW.
Clik here to view.
Clik here to view.

Create Streamダイアログで、Streamの名前をつけ、Retentionの値(あるメッセージがトピックから破棄されるまでの時間)を入力します。
Image may be NSFW.
Clik here to view.
Clik here to view.

希望のパーティション数を入力して、'Create Stream'をクリック。
Image may be NSFW.
Clik here to view.
Clik here to view.

新しいStreamの詳細ページに直接遷移し、おおよそ30秒でStreamの状態がActiveと表示されるでしょう。
Image may be NSFW.
Clik here to view.
Clik here to view.

Streams Userの作成
次にやるのはStreamingサービス専用のユーザーの作成です。コンソールサイドバーメニューからIdentity配下のUsersをクリック。
Image may be NSFW.
Clik here to view.
Clik here to view.

'Create User'をクリックして出てくるダイアログを埋めます。
Image may be NSFW.
Clik here to view.
Clik here to view.

新しいユーザーが作成されたら、ユーザー詳細ページに行ってAuth Tokenを生成します。
Image may be NSFW.
Clik here to view.
Clik here to view.

Image may be NSFW.
Clik here to view.
Clik here to view.

Image may be NSFW.
Clik here to view.
Clik here to view.

Tokenをコピーしてしっかり保存しておきましょう。このGenerate Tokenダイアログをいったん離れると取得することはできません。Identityコンソールにいるはずなので、サイドバーからCompartmentsをクリックしてStreamを作成したコンパートメントを見つけてください。そのコンパートメントのOCISをコピーし、これもあとで使うので保存しておいてください。
Image may be NSFW.
Clik here to view.
Clik here to view.

さて、ここからグループを作成し、先ほど作成したユーザーをこのグループに追加し、グループポリシーを作成します。
Image may be NSFW.
Clik here to view.
Clik here to view.

Image may be NSFW.
Clik here to view.
Clik here to view.

Image may be NSFW.
Clik here to view.
Clik here to view.

ここまでAuth Tokenを持ち、Streamを利用できるグループに所属したユーザーが用意できました。やったぜ。また、コンパートメントのOCIDも控えてあるので、コードに進んでいく準備ができています。
Kafka Producerの作成
ここまででKafka Client SDKを使ってこのStreamを利用するコードへと進む準備ができました。わたしたちのプロジェクトでの最初のステップはClient SDKの依存するライブラリが存在することの確認です。わたしはGradleを使っていますが、あなたが他のものを使っているのであれば適切に修正してください。
ここでわたしはProducerをテストするために以下のような小さなJavaプログラムを使います。
CompatibleProducer
クラスをビルドする前に、事前に取得しておいた必要な認証情報をIDEのRun/Debug設定に入れ込んでおきます。Image may be NSFW.
Clik here to view.![]()
Clik here to view.

べつにひどく複雑ってわけではないんですが、でもそれぞれの要素がわかりやすくなるように、ここで一度には
CompatibleProducer
クラスだけをビルドすることにしましょう。まず、認証情報のための変数をいくつか宣言し、アプリケーションに渡す環境変数から値をセットするようにしておきます。次に、
KafkaProducer
を構成するために使ういくつかのプロパティを作成します。これらはKafka SDKを使ってOSSのStreamにアクセスするために必要になるプロパティです。注:Streamingトピックを作成したリージョンに合わせて、"
bootstrap.servers
"のリージョンの値を変更する必要がある場合があります。最後に、
KafkaProducer
を構成してプロパティを入れ込み、5つの「test」メッセージをトピックにProduceしましょう。あなたのIDEでこのプログラムを実行すると、以下のような出力が得られるでしょう。
ここでStreamingコンソールをちょっと見て、5つのメッセージがProduceされて表示されていることを確認してみましょう。
Image may be NSFW.
Clik here to view.![]()
Clik here to view.

次に、Kafka互換のConsumerを作成してこれらのProduceされたメッセージをConsumeします。
Kafka Consumerの作成
Consumer作成のステップのうち大部分はProducer作成のためのステップと同様です(Gradleの依存ライブラリ、Run設定の環境変数、など)。なのでここでは
CompatibleConsumer
クラス自体にフォーカスしたいと思います。何かしら見逃しがあるんじゃないかと心配でも逃げ出さないでくださいね、このブログポストのコード全部がGitHubで見られます。わたしたちの互換Consumerを作成していきましょう!The consumer starts out similarly - declaring the credentials, setting some properties (which do differ slightly from the producer, so beware!) and creating the
Consumer
itself:Consumerは同じように作っていきます。認証情報を宣言し、プロパティを設定(Producer用のとはちょっと異なるので注意してくださいね!)し、
Consumer
自体を作成します。注:Procuderのときと同様、Streamingトピックを作成したリージョンに合わせて、"
bootstrap.servers
"のリージョンの値を変更する必要がある場合があります。ここで、作成しておいたトピックへのSubscriptionを構成し、1秒毎に新規メッセージをポーリングさせます。
最後のステップはこのConsumerサンプルを実行した上でProducerに火を入れて、このConsumerが新しくProduceされたメッセージをConsumeするのを観察することです。
はい、というわけで、あなたはKafka SDK for Javaを使ってOracle Streaming ServiceトピックとメッセージをProduce、Consumeできました。
Hey! このブログポストのコードはGitHubで見られるます: https://github.com/recursivecodes/oss-kafka-compatible-streaming