[解決済み】Kafkaのトピックとパーティションを理解する
質問
私はKafkaを学び始めていますが、読書中にいくつかの疑問が浮かんできました。
-
プロデューサーがメッセージを生成するとき、そのメッセージには トピック に送りたいということですね?パーティションは気になりますか?
-
サブスクライバの実行時に、グループ ID を指定して、同じトピックまたはこのグループのコンシューマが関心を持つ複数のトピックのコンシューマのクラスタの一部になれるようにするか。
-
各コンシューマーグループはブローカー上に対応するパーティションを持っていますか、それとも各コンシューマーが1つずつ持っていますか?
-
パーティションはブローカーが作成するため、コンシューマーには関係ないのでしょうか?
-
これは各パーティションにオフセットがあるキューなので、どのメッセージを読みたいかを指定するのはコンシューマの責任でしょうか?また、その状態を保存する必要がありますか?
-
メッセージがキューから削除された場合、どうなりますか?- 例えば、リテンションが3時間で、その後時間が経過した場合、双方でどのようにオフセットが処理されるのでしょうか?
どのように解決するのですか?
<ブロッククオートこの投稿にはすでに答えがありますが、Kafka Definitive Guideからいくつかの写真を使って私の見解を追加します。
質問に答える前に、プロデューサーのコンポーネントの概要を見てみましょう。
1. プロデューサーがメッセージを作成するとき - メッセージを送信したいトピックを指定します。パーティションは気になりますか?
プロデューサーは、メッセージの配置先パーティションを決定します。
- パーティションID(メッセージ内で指定されている場合
- キー % num パーティション パーティションIDが指定されていない場合
- どちらでもない場合はラウンドロビン パーティションID また メッセージキー がメッセージ内で利用可能な場合は、値のみが利用可能であることを意味します。
2. サブスクライバが実行されるとき - 同じトピックまたはこのグループの消費者が関心を持ついくつかのトピックの消費者のクラスタの一部になれるように、そのグループIDを指定していますか?
を常に設定する必要があります。 group.id ただし、単純な割り当てAPIを使用していて、Kafkaにオフセットを保存する必要がない場合は除きます。どのグループにも属さないことになります。 ソース
<ブロッククオート3. 各コンシューマーグループはブローカー上で対応するパーティションを持っていますか、それとも各コンシューマーが1つずつ持っていますか?
1つのコンシューマーグループにおいて、各パーティションは1つのコンシューマーによってのみ処理される . 以下のようなシナリオが考えられます。
- 消費者の数は 未満 トピックパーティションの数であれば、複数のパーティションをグループ内の消費者のいずれかに割り当てることができます。
- コンシューマー数 同じ をトピックパーティションの数で割ると、パーティションとコンシューマのマッピングは以下のようになります。
- 消費者の数は よりも高い の場合、パーティションとコンシューマのマッピングは以下のようになります。 効果なし、消費者5を確認
4. ブローカーによって作成されたパーティションとして、したがって、消費者のための懸念ではない?
消費者が認識すべきこと 質問3で議論したように、パーティション数について。
5. これはパーティションごとにオフセットを持つキューなので、どのメッセージを読みたいかを指定するのはコンシューマの責任でしょうか?また、その状態を保存する必要がありますか?
カフカ(具体的には
グループコーディネーター
へのメッセージを生成し、オフセットの状態を管理します。
__consumer_offsets
トピックで、この動作を手動に設定することもできます。
enable.auto.commit
を
false
. その場合
consumer.commitSync()
と
consumer.commitAsync()
は、オフセットの管理に役立ちます。
詳細はこちら グループコーディネーター :
- Kafkaサーバー側から見て、クラスタ内で選出されたブローカーの1つです。
- コンシューマーは、オフセットコミットやフェッチリクエストのためにグループコーディネーターと対話します。
- コンシューマは、グループコーディネータに定期的にハートビートを送信します。
6. メッセージがキューから削除された場合、どうなりますか?- 例えば、3時間保持した後、時間が経過した場合、双方でどのようにオフセットが処理されるのでしょうか?
保持期間後にコンシューマが開始された場合、メッセージは次のように消費されます。
auto.offset.reset
を設定することができます。
latest/earliest
技術的には
latest
(新しいメッセージの処理を開始する) なぜなら、その時間までにすべてのメッセージが期限切れになってしまい
保持
はトピックレベルの設定です。
関連
-
[解決済み] グループがリバランスしているため、ハートビートが失敗しました。
-
[解決済み] kafkaとnifiの違い
-
[解決済み] HDFスキーマレジストリとConfluentの主な違いは何ですか?
-
[解決済み] Zookeeperにアクセスせずに-zookeeperフラグを使用してKafka 0.10トピックをすべて一覧表示する
-
[解決済み] Apache Kafkaのコンテキストで「Rebalancing」とはどういう意味ですか?
-
[解決済み] KafkaよりRabbitMQを使うべきタイミングは?[クローズド]
-
[解決済み】Kafkaトピックのパージ
-
[解決済み】Kafkaのトピックとパーティションを理解する
-
[解決済み] Kafkaでデータモデリング?トピックとパーティション
-
[解決済み] カフカ コンシューマーAPIとストリームAPI
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] グループがリバランスしているため、ハートビートが失敗しました。
-
[解決済み] kafkaとnifiの違い
-
[解決済み] kafkaのレプリケートパーティション下の修正
-
[解決済み] HDFスキーマレジストリとConfluentの主な違いは何ですか?
-
[解決済み] JAAS または Kafka の設定に serviceName が定義されていない (Kerberos ではない)
-
[解決済み] KafkaよりRabbitMQを使うべきタイミングは?[クローズド]
-
[解決済み】Kafkaトピックのパージ
-
[解決済み】Kafkaのトピックとパーティションを理解する
-
[解決済み] Kafkaでデータモデリング?トピックとパーティション
-
[解決済み] カフカ コンシューマーAPIとストリームAPI