7

私は Kafka を初めて使用しますが、消費者に関して理解したのは、基本的に 2 種類の実装があるということです。
1)高レベルの消費者/消費者グループ
2)シンプルな消費者

高レベルの抽象化に関する最も重要な部分は、Kafka がオフセットの処理を気にしない場合に使用され、Simple コンシューマーがオフセット管理をより適切に制御できることです。マルチスレッド環境でコンシューマーを実行し、オフセットを制御したい場合、私を混乱させるのは何ですか?コンシューマーグループを使用する場合、それはズーキーパーに保存されている最後のオフセットから読み取る必要があることを意味しますか? それが私が持っている唯一のオプションです。

4

2 に答える 2

8

ほとんどの場合、高レベルのコンシューマ API ではオフセットを直接制御できません。

コンシューマー グループが最初に作成されるとき、プロパティを使用して、kafka が保存した最も古いメッセージまたは最新のメッセージのどちらから開始するかを指定できauto.offset.resetます。

auto.commit.enablefalseに設定することで、高レベルのコンシューマーが新しいオフセットを Zookeeper にコミットするタイミングを制御することもできます。

高レベルのコンシューマーはオフセットを Zookeeper に格納するため、アプリは Zookeeper に直接アクセスしてオフセットを操作できますが、それは高レベルのコンシューマー API の外部にあります。

あなたの質問は少し混乱しましたが、マルチスレッド環境で単純なコンシューマーを使用できます。それが、高レベルの消費者が行うことです。

于 2013-08-02T10:46:31.597 に答える
1

Apache Kafka 0.9 および 0.10 では、コンシューマー グループの管理は、ブローカー (調整用) とトピック (状態ストレージ用) によって Kafka アプリケーション内で完全に処理されます。

コンシューマ グループが最初にトピックをサブスクライブするとき、 の設定auto.offset.resetによって、コンシューマがメッセージの消費を開始する場所が決まります ( http://kafka.apache.org/documentation.html#newconsumerconfigs )

を登録しConsumerRebalanceListenerて、特定のコンシューマーにトピック/パーティションが割り当てられたときに通知を受け取ることができます。

コンシューマーが実行されるとseekseekToBeginningおよびを使用seekToEndして、特定のオフセットからメッセージを取得できます。そのコンシューマーの次のコミットにseek影響を与え、次のコミット時に保存されます (たとえば、有効な場合は auto.commit.interval が経過したとき)。pollcommitSynccommitAsync

コンシューマ javadocs は、より具体的な状況について言及しています: http://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

パーティションが割り当てられると、Kafka によって提供されるグループ管理と、seek(..) によるオフセットの手動管理を組み合わせることができます。

于 2016-08-14T06:10:47.797 に答える