クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Kafka の基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 13分コマンド7個

このレッスンですること

Kafka は、メッセージをトピックにしまっておきます。トピックはログ(記録)です。送る側(プロデューサー)は最後に書き足し、読む側(コンシューマー)は好きな場所から読めます。トピックはパーティションに分かれていて、メッセージには、そのパーティションの中での番号がつきます。この番号をオフセットといい、0から数えます。

トピックを作り、メッセージを3つ追加して、最初から読み返します。

始める前に

メモ

このレッスンの上のバーでラボを起動を押し、動き出したと表示されるまで待ってください。先にブローカー(メッセージを預かるサーバー)が起動し、そのあとでページ(Kafka UI)が起動するので、最初の起動には1分ほどかかります。下の実行ボタンは、コマンドをラボのターミナルに、同じセッションの中で順番に入力してくれます。入力の様子を見たり、自分でコマンドを打ったりするときは、バーのターミナルを開く(新しいタブ)を押します。

1. トピックを作ろう

このコマンドは、Kafka UI の裏にあるウェブ API に、パーティションが3つある orders というトピックを頼みます。表示される 200 は「できました」という意味の、ウェブの数字です。%{http_code} のあとの \n は、そこで改行するという意味です。次のコマンドでパーティションの一覧を見ると、"partition":0、"partition":1、"partition":2 が出て、どれも "offsetMax":0 です。この数は次のオフセット、つまり次のメッセージにつく番号です。だから3つとも空っぽだと分かります。

コマンド
curl -s -X POST -H "Content-Type: application/json" -d '{"name":"orders","partitions":3,"replicationFactor":1,"configs":{}}' http://kafka-ui:8080/api/clusters/lab/topics -o /dev/null -w "%{http_code}\n"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. メッセージを3つ送ろう

どのコマンドも、メッセージを1つ追加して 200 を表示します。最初の2つはパーティション 0 に、3つめはパーティション 1 に入ります。コマンドではパーティションを必ず指定します。ページの上では、トピックの Produce Message(メッセージを送る)ボタンが同じことをします。

コマンド
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"coffee","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"tea","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":1,"key":"bob","value":"cake","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3. オフセットを見て、読み返そう

最初のコマンドをもう一度実行してください。パーティション 0 は "offsetMax":2、パーティション 1 は 1、パーティション 2 は 0 のままです。パーティションはそれぞれ自分で数えています。2つめのコマンドは、トピックを最初から読みます。新しいコンシューマーはこう読みます。各メッセージのパーティションとオフセットが、値のとなりに出ます。coffee はパーティション 0 のオフセット 0、tea はパーティション 0 のオフセット 1、cake はパーティション 1 のオフセット 0 です。表示は新しいものが先なので、cake が coffee より前に出ます。順番を表しているのはオフセットです。

コマンド
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
curl -s -N "http://kafka-ui:8080/api/clusters/lab/topics/orders/messages/v2?seekType=BEGINNING&limit=10" | grep -o '"partition":[0-9]*,"offset":[0-9]*\|"value":"[a-z]*"'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボは、ブローカーと、それを読むページの2つのサービスです。自動採点はありません。生徒は前後のオフセットと、各パーティションが0から始まる理由を一文で書いて提出します。ラボを停止すると、ブローカーには何も残りません。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: Kafka ラボ:ブラウザーでトピック、プロデューサー、コンシューマー、パーティション、オフセットを学ぶ

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。