日志目录

  • ${kafka.logs.dir}/server.log :服务器日志
  • ${kafka.logs.dir}/state-change.log:状态变化日志
  • ${kafka.logs.dir}/kafka-request.log:请求处理日志
  • ${kafka.logs.dir}/log-cleaner.log:日志清理
  • ${kafka.logs.dir}/controller.log:管理日志
  • ${kafka.logs.dir}/kafka-authorizer.log:认证日志

log4j.properties 文件

log4j.properties 是 kafka 操作日志配置文件

log4j.properties 文件的一些说明

# 日志级别覆盖规则  优先级:ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF
# 1.子日志log4j.logger会覆盖主日志log4j.rootLogger,这里设置的是日志输出级别,Threshold设置appender的日志接收级别;
# 2.log4j.logger级别低于Threshold,appender接收级别取决于Threshold级别;
# 3.log4j.logger级别高于Threshold,appender接收级别取决于log4j.logger级别,因为输出里就没有Threshold要求的日志;
# 4.子logger设置,主要与rootLogger区分开打印日志 一般与log4j.additivity配合使用
# log4j.additivity 是否继承父Logger的输出源(appender),默认是true
# true 在stdout, kafkaAppender里输出 也会在stateChangeAppender输出
# 这里需要单独输出 所以设置为false 只会在stateChangeAppender输出
# log4j.logger后面如果没有appender,则默认使用log4j.rootLogger后面设置的appender
# 如果使用org.apache.log4j.RollingFileAppender  可以使用MaxFileSize设置最大文件大小  MaxBackupIndex设置最大文件数量

config/log4j.properties中日志的级别设置有的是TRACE,在长时间运行过程中产生的日志大小吓人,所以如果没有特殊需求,强烈建议将其更改成INFO级别。

具体修改方法如下所示,将config/log4j.properties文件中最后的几行中的TRACE改成INFO或INFO以上

# 主日志设置
log4j.rootLogger=ERROR, stdout, kafkaAppender# 控制台的appender和layout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n# kafkaAppender的appender和layout
log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log
log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 状态变化日志
log4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stateChangeAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.stateChangeAppender.File=${kafka.logs.dir}/state-change.log
log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 请求处理日志
log4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.requestAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.requestAppender.File=${kafka.logs.dir}/kafka-request.log
log4j.appender.requestAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# 日志清理格式
log4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cleanerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.cleanerAppender.File=${kafka.logs.dir}/log-cleaner.log
log4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# controller 日志格式
log4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.controllerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.controllerAppender.File=${kafka.logs.dir}/controller.log
log4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.controllerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n# authorizer日志格式
log4j.appender.authorizerAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.authorizerAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.authorizerAppender.File=${kafka.logs.dir}/kafka-authorizer.log
log4j.appender.authorizerAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.authorizerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n######################################################
# zookeeper
log4j.logger.org.apache.zookeeper=INFO# kafka
log4j.logger.kafka=INFO# org.apache.kafka
log4j.logger.org.apache.kafka=INFO# 请求处理日志
log4j.logger.kafka.request.logger=INFO, requestAppender
log4j.additivity.kafka.request.logger=false
# log4j.logger.kafka.network.Processor=INFO, requestAppender
# log4j.additivity.kafka.network.Processor=false  # 配置文件有的没有
# log4j.logger.kafka.server.KafkaApis=INFO, requestAppender
log4j.additivity.kafka.server.KafkaApis=false
log4j.logger.kafka.network.RequestChannel$=INFO, requestAppender
log4j.additivity.kafka.network.RequestChannel$=false# controller
log4j.logger.kafka.controller=INFO, controllerAppender
log4j.additivity.kafka.controller=false#kafka-logs清理
log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender
log4j.additivity.kafka.log.LogCleaner=false#状态变化日志
# log4j.logger.state.change.logger=INFO, stateChangeAppender
# log4j.additivity.state.change.logger=false#authorizer
log4j.logger.kafka.authorizer.logger=INFO, authorizerAppender
log4j.additivity.kafka.authorizer.logger=false

server.properties 文件

kafka 数据

在server.properties中配置了log.dirs值,其实表示的是kafka数据的存放目录,而非日志目录

log.dirs=/data/kafka

kafka 日志清理

Kafka日志管理器允许定制删除策略。目前的策略是删除修改时间在N天之前的日志(按时间删除),也可以使用另外一个策略:保留最后的N GB数据的策略(按大小删除)。为了避免在删除时阻塞读操作,采用了copy-on-write形式的实现,删除操作进行时,读取操作的二分查找功能实际是在一个静态的快照副本上进行的,这类似于Java的CopyOnWriteArrayList。

Kafka消费日志删除思想:Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用

log.cleanup.policy=delete启用删除策略
# 直接删除,删除后的消息不可恢复。可配置以下两个策略:
# 清理超过指定时间清理:
log.retention.hours=168
# 超过指定大小后,删除旧的消息:
log.retention.bytes=1073741824

也可以写个定时清理脚本来清除日志结合

crontab 脚本

0 0 2 \* \* ? /home/cluster/kafka211/bin/cleanupkafkalog.sh

清理脚本

#!/bin/bash# log dir
logDir=/log/kafka
#keep 60 file
count=60
count=$[$count+1]
LOGNUM=`ls -l /home/cluster/kafka211/logs/server.log.* |wc -l`
if [ $LOGNUM -gt 0 ]; thenls -t $logDir/server.log.* | tail -n +$count | xargs rm -f
fi#kafkaServer.out
if [ -e "$logDir/kafkaServer.out" ]; thenrm -f /home/cluster/kafka211/logs/kafkaServer.out
fi

压缩策略

只保留每个key最后一个版本的数据。

log.cleaner.enable=true    # 首先在broker的配置中设置启用cleaner,这个默认是关闭的。
log.cleanup.policy=compact # 在Topic的配置中设置,启用压缩策略。

bin/kafka-run-class.sh 文件

GC 日志

kafka默认打印GC日志,如下,

$ ls
kafka-authorizer.log          kafkaServer-gc.log.3  kafkaServer-gc.log.8      server.log.2018-10-22-14
kafka-request.log             kafkaServer-gc.log.4  kafkaServer-gc.log.9      server.log.2018-10-22-15
kafkaServer-gc.log.0          kafkaServer-gc.log.5  kafkaServer.out
kafkaServer-gc.log.1          kafkaServer-gc.log.6  server.log
kafkaServer-gc.log.2.current  kafkaServer-gc.log.7  server.log.2018-10-22-13

生产环境不需要GC。修改 bin/kafka-run-class.sh脚本,将参数 KAFKA_GC_LOG_OPTS=" " 设置为空格即可,重启kafka之后就不再打印GC日志了。

[cluster@PCS102 bin]$ vim kafka-run-class.shGC_FILE_SUFFIX='-gc.log'
GC_LOG_FILE_NAME=''
if [ "x$GC_LOG_ENABLED" = "xtrue" ]; thenGC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIXKAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
KAFKA_GC_LOG_OPTS=" "
fi

日志保存目录

Kafka运行时日志默认输出到$KAFKA_HOME/logs目录下,容易撑爆分区,造成操作系统崩溃。需要将日志输出到指定分区,比如/var/log目录下
修改 bin/kafka-run-class.sh 脚本增加一行 LOG_DIR="/var/log/kafka"

LOG_DIR=/var/log/kafka  # 我是新增的
# Log directory to use
if [ "x$LOG_DIR" = "x" ]; thenLOG_DIR="$base_dir/logs"
fi

kafka 日志相关配置相关推荐

  1. Haproxy实现负载均衡及相关配置(添加日志、设定自动刷新时间、控制访问、动静分离、读写分离)

    1.HAProxy简介 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProx ...

  2. 限定某个目录禁止解析php、限制user_agent、php相关配置(php日志)

    限定某个目录禁止解析php 当黑客攻击你的服务器时,在你的静态目录下添加一个木马脚本,这时服务器将会很大风险,这时需要限制哪些目录不能解析php,提高安全性. 1.新增内容 [root@centos7 ...

  3. kafka数据清理配置——删除篇

    前言 本意利用kafka实现一个类似redis发布订阅的模式,比redis多了一个数据分区的功能.kafka里面的数据我们是不需要存储的,因此我们需要配置对应的删除策略 Kafka版本号 2.8.1 ...

  4. kafka日志清理策略,compact和delete

    文章目录 1. kafka日志清理策略概述 2. kafka segment 2.1 segmnet 的作用 2.2 segment生成相关的配置 3. 日志清理delete策略 3.1 delete ...

  5. kafka安装及配置过程

    来来先扫一下,一码不扫何以扫天下 简介 Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目.Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量, ...

  6. linux环境kafka安装及配置

    linux环境kafka下载安装 下载资源 安装zookeeper kafka安装及配置 kafka安装(单体) kafka集群配置方式 kafka开启kerberos认证 kafka自带zookee ...

  7. 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...

  8. Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理

    2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...

  9. LNMP架构php-fpm相关配置

    2019独角兽企业重金招聘Python工程师标准>>> 11月30日任务 12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_based ...

最新文章

  1. php 自动生成查询密码,PHP自动生成随绝密码
  2. c语言笔记照片_c语言笔记
  3. mysql 建索引_mysql数据库正确建立索引及使用
  4. 一句话讲清楚Python的垃圾回收有啥用
  5. P3531-[POI2012]LIT-Letters【逆序对,树状数组】
  6. 8、jeecg 笔记之 自定义word 模板导出(一)
  7. STM32F7xx —— FatFS(W25QXX)
  8. java 找序列最小值_【C++编程练习】任意给定 n 个有序整数,求这 n 个有序整数序列的最大值,中位数和最小值...
  9. Excel如何导出自定义架构xml
  10. 【硬件】AD制作集成库IntLib
  11. 史上最管用的C盘深度清理秘籍
  12. 激光传感器构建栅格地图
  13. python3爬虫(5):财务报表爬取入库
  14. 腾讯视频二面【附常见HR面试问题】
  15. 《架构师修炼之道》读书笔记之五:换位思考
  16. CentOS搭建SVN服务器
  17. 现代黄河三角洲的冲淤分区及地层特征(二)
  18. VBA中字典的写入技巧
  19. StarUML用户手册
  20. python 谁是小偷_python 小偷程序

热门文章

  1. SpringBoot 集成Nacos报错(一)
  2. Android设计模式之——观察者模式
  3. 解决:Unknown custom element: <myData> - did you register the component correctly? For recursive compon
  4. 如何使用Dockerfile构建镜像
  5. MySQL 5.6 for Windows 解压缩版配置安装
  6. 动态生成表格、隐藏表格、选中删除任意行、jquery、输入验证
  7. JAVA-Lambda表达式
  8. Tomcat的Session管理(三)
  9. android 音频播放总结 soundlPool,MediaPlay
  10. java基础—方法重载(overload)