web-dev-qa-db-fra.com

Kafka Le consommateur génère un nombre excessif d'instructions DEBUG sur la console (éclipse)

J'exécute un exemple de code à partir de http://www.javaworld.com/article/3060078/big-data/big-data-messaging-with-kafka-part-1.html?page=2 , et le kafkaconsumer consomme du sujet comme vous le souhaitez, mais chaque sondage entraîne l'impression (à la sortie standard) de nombreux journaux de débogage, ce que je ne veux pas.

J'ai essayé de changer toutes les INFO et DEBUG en ERREUR (j'ai même fait un grep pour m'assurer) dans /config/log4j.properties, En particulier en définissant log4j.logger.kafka=ERROR, KafkaAppender, mais le problème persiste. J'ai fait référence à Comment configurer la journalisation pour Kafka producteurs? , et j'ai adopté la solution là-bas, mais la situation est peut-être différente pour les consommateurs?

Les messages DEBUG ont tous un format similaire:

[Thread-0] DEBUG org.Apache.kafka.clients.consumer.internals.Fetcher - Sending fetch for partitions... to broker... (id: 0 rack: null)

et apparaissent au rythme de 10 toutes les secondes environ (changer l'argument de sondage à 1000 ou même 10000 n'aide pas, j'ai essayé)

J'apprécierais vraiment toute aide d'un expert. Merci d'avance!

Edit: Je ne sais pas si cela importe, mais j'ai ajouté BasicConfigurator.configure(); à ma méthode principale, pour résoudre une autre erreur survenue précédemment qui empêchait même le consommateur de démarrer.

10
Bay Wei Heng

Modifiez simplement le niveau de journalisation de la classe de discussion (interaction de discussion). Puisque dans vos journaux, vous voyez des entrées de journal provenant de org.Apache.kafka.clients.consumer.internals.Fetcher vous pouvez simplement ajuster le niveau de journalisation de cet enregistreur en ajoutant la ligne suivante à log4j.properties:

log4j.logger.org.Apache.kafka.clients.consumer.internals.Fetcher=WARN

... ou tout autre enregistreur de capture plus large, car ceux-ci sont espacés d'un nom:

# adjusting logging for entire Kafka
log4j.logger.org.Apache.kafka=WARN

J'espère que cela t'aides

7
diginoise

créer un nouveau fichier xml de configuration

src/main/resources/logback.xml

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger name="org.Apache.kafka" level="WARN"/>
    <logger name="org.Apache.kafka.common.metrics" level="WARN"/>
    <root level="warn">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
7
Zouinkhi

Je ne sais pas si vous parlez des commandes kafka-console-consumer, si oui, c'est ce que j'ai fait:

[training@confluent-training-vm ~]$ cd /etc/kafka
[training@confluent-training-vm kafka]$ grep DEBUG *.properties
log4j.properties:# Change to DEBUG or TRACE to enable request logging
log4j.properties:# Access denials are logged at INFO level, change to DEBUG to also 
log allowed accesses
tools-log4j.properties:log4j.rootLogger=DEBUG, stderr

Il vous suffit donc de modifier /etc/kafka/tools-log4j.properties fichier et supprimez DEBUG (ou remplacez-le pour exmaple par INFO et WARM niveaux de journalisation sur la ligne ci-dessus

tools-log4j.properties:log4j.rootLogger=INFO, WARM, stderr
1
user11488099

J'ai trouvé la solution sous une autre question qui concerne les producteurs Kafka, mais c'est essentiellement le même problème: https://stackoverflow.com/a/49532152/238055

Je lance donc juste les 3 lignes suivantes au début de mon programme:

org.Apache.log4j.Logger.getLogger("org").setLevel(Level.WARN);
org.Apache.log4j.Logger.getLogger("akka").setLevel(Level.WARN);
org.Apache.log4j.Logger.getLogger("kafka").setLevel(Level.WARN);
0
szedjani