【问题标题】:Kafka Consumer outputs excessive DEBUG statements to console (ecilpse)Kafka Consumer 向控制台输出过多的 DEBUG 语句(eclipse)
【发布时间】:2017-10-23 01:57:33
【问题描述】:

我正在运行来自 http://www.javaworld.com/article/3060078/big-data/big-data-messaging-with-kafka-part-1.html?page=2 的一些示例代码,并且 kafkaconsumer 正在根据需要从主题中消费,但每次轮询都会导致许多调试日志的打印(到标准输出),这是我不想要的。

我尝试将/config/log4j.properties 中的所有INFO 和DEBUG 更改为ERROR(甚至做了一个grep 来确保),特别是设置log4j.logger.kafka=ERROR、kafkaAppender,但问题仍然存在。我参考了How to configure logging for Kafka producers?,并在那里采用了解决方案,但也许消费者的情况会有所不同?

DEBUG 消息都有类似的格式:

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

并且以每秒 10 次左右的速度出现(将 poll 参数更改为 1000 甚至 10000 没有帮助,我试过了)

非常感谢任何专家的帮助。提前致谢!

编辑:不确定是否重要,但我将BasicConfigurator.configure(); 添加到我的主要方法中,以解决之前发生的一些其他错误,这些错误甚至阻止了消费者的启动。

【问题讨论】:

    标签: java logging apache-kafka log4j kafka-consumer-api


    【解决方案1】:

    创建新的配置 xml 文件

    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>
    

    【讨论】:

      【解决方案2】:

      只需修改聊天类的日志级别(聊天交互)。 由于在您的日志中,您会看到源自 org.apache.kafka.clients.consumer.internals.Fetcher 的日志条目,您可以通过在 log4j.properties 中添加以下行来简单地调整该记录器的日志记录级别:

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

      ... 或任何更广泛的捕获记录器,因为它们是名称间隔的:

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

      希望对你有帮助

      【讨论】:

      • 我最后使用了stackoverflow.com/questions/1509324/log4j-basic-configuration,我知道解决方案更通用(所有类都受影响),但也感谢具体的解决方案! :D
      • 我不知道为什么,但我的答案基于的示例是使用 slf4j。但有趣的是,我只使用了 log4j,然后使用了下面的 logback.xml 并且它起作用了:D!
      【解决方案3】:

      不确定您是否在谈论 kafka-console-consumer 命令,如果是,这就是我所做的:

      [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
      

      因此,您只需要编辑/etc/kafka/tools-log4j.properties 文件并删除DEBUG(或将其替换为例如INFOWARM 上面一行的日志级别

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

      【讨论】:

      • 你的帖子帮助了我。我遇到了来自kafka-console-consumer 的过多WARN 不间断消息,而后者又使用kafka-run-class。通过运行这个命令type kafka-run-class.bat | findstr /sin log4j.properties,我发现它确实在使用tools-log4j.properties,并将这一行log4j.rootLogger=WARN, stderr修改为log4j.rootLogger=ERROR, stderr解决了我的问题。谢谢。
      【解决方案4】:

      我在另一个与 Kafka 生产者有关的问题下找到了解决方案,但它本质上是相同的问题:https://stackoverflow.com/a/49532152/2380553

      所以我只在程序开头运行以下 3 行:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-20
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2015-02-22
        • 2019-11-12
        相关资源
        最近更新 更多