web-dev-qa-db-fra.com

Comment utiliser l'API grand public de Kafka 0.8.2?

Je commence avec le dernier document Kafka http://kafka.Apache.org/documentation.html . Mais je rencontre un problème lorsque j'essaie d'utiliser la nouvelle API de consommateur. J'ai fait le travail en suivant les étapes suivantes:

1. Ajouter une nouvelle dépendance

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

2. Ajouter des configurations

    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. Utiliser l'API KafkaConsumer

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

Cependant, lorsque j'essaie d'interroger un message du courtier, je n'ai rien eu d'autre que null:

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

Et puis je sais ce qui ne va pas avec le consommateur après avoir vérifié le code source:

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

Pour aggraver les choses, je ne trouve aucune autre information utile sur l'API 0.8.2, car toutes les utilisations de Kafka ne sont pas compatibles avec la dernière version. Quelqu'un pourrait-il m'aider? Merci beaucoup.

17
Yohn

J'essaie également d'écrire un consommateur sur Kafka 0.8.2.1 pour lire les messages produits par le nouveau producteur.

Jusqu'à présent, ce que j'ai compris, c'est que l'API Producer est prête et utilisable, tandis que du côté du consommateur, nous devons attendre 0.8.3, comme l'a noté @habsq et vous découvrez déjà qu'il y a du code inclus pour le consommateur, mais n'est toujours pas fonctionnel.

Ainsi, les clients à utiliser (l’API client actuelle) sont ceux du projet "core" de votre version actuelle de Kafka, à savoir 0.8.2.1 (il est préférable de ne pas rétrograder le client vers une autre version).

Donc, pour le moment, nous devons importer deux fichiers JAR: un pour les "nouveaux" clients Java et un pour le projet principal, en fonction également de la version de Scala que vous utilisez (j'utilise la version 2.11).

Dans mon cas, j'utilise graddle pour gérer les dépendances, il ne me reste donc plus qu'à importer

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'
}

Lorsque vous mettez à jour des dépendances, toutes les bibliothèques nécessaires seront obtenues.

Si vous utilisez une version différente de Scala, changez simplement la version. de toute façon vous pouvez trouver toutes les versions différentes ou le pom complet sur maven central: http://search.maven.org/#search|ga|1|g%3A%22org.Apache.kafka% 22% 20AND% 20v% 3A% 220.8.2.1% 22

Si vous utilisez ces implémentations Consumer, tous les exemples actuels devraient fonctionner normalement. 

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

1
RobMcZag

Oui, je peux confirmer que la version 0.8.2.1 rencontrait des problèmes pour consommer des messages. Maintenant, en faisant un simple consommateur avec Java/Groovy et la version 0.10.1.0, tout fonctionne parfaitement.

Il n'est plus nécessaire de définir PARTITION_ASSIGNMENT_STRATEGY.

0
Stefano Scarpanti