web-dev-qa-db-ja.com

Kafka 0.8.2のコンシューマーAPIの使用方法は?

最新のKafka document http://kafka.Apache.org/documentation.html から始めています。しかし、使用しようとすると問題が発生します。新しいコンシューマーAPI。次の手順で作業を完了しました。

1。新しい依存関係を追加します

<dependency>
    <groupId>org.Apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.8.2.1</version>
</dependency>

2。構成を追加

    Map<String, Object> config = new HashMap<String, Object>();
    config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
            "Host:9092");
    config.put(ConsumerConfig.GROUP_ID_CONFIG, "test");
    config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
            StringDeserializer.class.getName());
    config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
            StringDeserializer.class.getName());
    config.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY, "range");

3。 KafkaConsumer APIを使用する

KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(config);
consumer.subscribe("topic");

ただし、ブローカーからのメッセージをポーリングしようとすると、nullしか得られませんでした。

Map<String, ConsumerRecords<String, String>> records = consumer.poll(0);
if (records != null)
    process(records);
else
    System.err.println("null");

そして、ソースコードを確認した後、コンシューマーの何が問題になっているのかがわかります。

@Override
public Map<String, ConsumerRecords<K,V>> poll(long timeout) {
    // TODO Auto-generated method stub
    return null;
}

さらに悪いことに、Kafkaに関するすべての使用法は最新バージョンと互換性がないため、0.8.2 APIに関する他の有用な情報を見つけることができません。誰か助けてもらえますか?どうもありがとう。

17
Yohn

また、新しいプロデューサーによって生成されたメッセージを読み取るために、Kafka 0.8.2.1の上にコンシューマーを書き込もうとしています。

これまでのところ、プロデューサーAPIは準備ができて使用可能ですが、コンシューマー側では、@ habsqが指摘したように、0.8.3を待たなければならず、コンシューマー用のコードが含まれていることがすでにわかりますが、まだ機能していません。

したがって、使用するクライアント(現在のクライアントAPI)は、現在のKafkaバージョン、つまり0.8.2.1(クライアントを他のバージョンにダウングレードしない方がよい)の「コア」プロジェクトにあるクライアントです。 )。

したがって、今のところ、2つのjarをインポートする必要があります。1つは「新しい」Javaクライアント用、もう1つはコアプロジェクト用です。これは、scalaバージョン使用しています(私は2.11を使用しています)。

私の場合、依存関係を管理するためにgraddleを使用しているので、インポートする必要があります

dependencies {
  compile group: 'org.Apache.kafka', name: 'kafka-clients', version: '0.8.2.1'
  compile group: 'org.Apache.kafka', name: 'kafka_2.11', version: '0.8.2.1'
}

依存関係を更新すると、必要なすべてのライブラリが取得されます。

別のScalaバージョンを使用している場合は、バージョンを変更するだけです。とにかく、Maven Centralですべての異なるバージョンまたは完全なpomを見つけることができます: http://search.maven。 org /#search | ga | 1 | g%3A%22org.Apache.kafka%22%20AND%20v%3A%220.8.2.1%22

これらのコンシューマー実装を使用する場合、現在のすべての例は通常どおり機能するはずです。

PS参照:Kafka-users ml thread http://grokbase.com/t/kafka/users/153bepxet5/high-level-consumer-example-in-0-8-2

1
RobMcZag

はい、リリース0.8.2.1でメッセージの消費に問題があったことを確認できます。 Java/Groovyおよびリリース0.10.1.0を使用して単純なコンシューマーを作成すると、すべてが完全に機能します。

PARTITION_ASSIGNMENT_STRATEGYを設定する必要はもうありません。

0