6

Kafka Simple Consumer を使用して複数のパーティションから読み取ることは可能ですか? Simple Consumer は、次のパーティションを使用します。

PartitionMetadata metadata = findLeader(brokers, port, topic, partition);
SimpleConsumer consumer = new SimpleConsumer(leadBroker, port, 100000, 64 * 1024, clientName);
leadBroker = findNewLeader(leadBroker, topic, partition, port);

https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

4

2 に答える 2

5

SimpleConsumer の 1 つのインスタンスは、1 つのパーティションから読み取ります。ただし、SimpleConsumer の複数のインスタンスを簡単に作成し、異なるパーティションを順次または並行して (異なるスレッドから) 読み取ることができます。

注意が必要な部分は、異なるマシン上のリーダー間の調整であり、同じパーティションから読み取らないようにします (すべてのメッセージを 1 回だけ処理する必要があると仮定します)。それを実現するには、高レベルのコンシューマーを使用するか、同様のカスタム コードを記述する必要があります。

于 2015-01-15T21:45:24.533 に答える
5

1 つのスレッドは 1 つのパーティションからのみ読み取ります。複数のパーティションから読み取るには、複数のスレッドを生成する必要があり、各スレッドは単一のパーティションから読み取ります。これを別のスレッドで実行する必要があります。そうしないと、パーティションを持つ利点が失われ、パフォーマンスが低下します。

まず、すべてのコンシューマーを 1 台のマシンで実行できます。しかし、最終的には、消費のために別のマシンを使い始める必要があります. その際、1 つのパーティションが 1 回だけ処理されるようにする必要があります。具体的には、解決する必要がある問題は、(異なるスレッドからの) 2 つのスレッドが同じパーティションから読み取ろうとしているということです。常に 1 つのみに処理を許可する必要があります。

さらに、オフセットを管理する必要があります。定期的に Zookeeper でそれらをフラッシュする必要があります。

High Level Consumerを使用することをお勧めします。Simple Consumer よりもはるかに使いやすいです。同じパーティションにアクセスする異なるスレッド間の調整を提供し、独自のオフセットを管理します。

于 2015-01-20T07:17:07.833 に答える