亿级日志log4j2接入Kafka方案

亿级日志log4j2接入Kafka方案

背景描述

一个高访问量高并发高响应的系统,每天大概5~6亿的请求日志量,日志接入大数据平台,第一版使用的是Flume方式,后来因为需要基于日志做实时预警功能,故需要实时接入,采用log4j2 KafkaAppender接入Kafka消息队列的模式。

log4j2配置

<Kafka name="kafkaLog" topic="topic_request_log" ignoreExceptions="false">
    <PatternLayout pattern="[%-4level]_|_%d{YYYY-MM-dd HH:mm:ss}_|_%m_|_${sys:ip}"/>
    <Property name="bootstrap.servers">bigdata001.dns.org:9092,bigdata002.dns.org:9092</Property>
    <Property name="max.block.ms">2000</Property>
</Kafka>

<RollingFile name="failoverKafkaLog" fileName="../log/Service/failoverKafka/request.log"
            filePattern="../log/Service/failoverKafka/request.%d{yyyy-MM-dd}.log">
    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout>
        <Pattern>[%-4level]_|_%d{YYYY-MM-dd HH:mm:ss}_|_%m_|_${sys:ip}%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy />
    </Policies>
</RollingFile>

<Failover name="Failover" primary="kafkaLog" retryIntervalSeconds="600">
    <Failovers>
        <AppenderRef ref="failoverKafkaLog"/>
    </Failovers>
</Failover>

<!--异步-->
<AsyncLogger name="kafkaLogger" level="INFO" additivity="false">
    <appender-ref ref="Failover"/>
</AsyncLogger>

注意点(坑点):

① 日志接入必须异步,绝对不能影响服务性能,

② 响应要求比较高的系统接入第三方系统,必须依赖解耦,此处的Failover Appender就是解耦对Kafka的依赖,当Kafka Crash时,日志触发Failover,写本地即可

③ log4j2 Failover appender retryIntervalSeconds的默认值是1分钟,是通过异常来切换的,所以可以适量加大间隔,比如上面的10分钟

④ Kafka appender ignoreExceptions 必须设置为false,否则无法触发Failover

⑤ 这里有个比较大的坑是max.block.ms Property,KafkaClient包里默认值是60000ms,当Kafka宕机时,尝试写Kafka需要1分钟才能返回Exception,之后才会触发Failover,当请求量大时,log4j2 队列很快就会打满,之后写日志就Blocking,严重影响到主服务响应。所以要设置足够短,队列长度足够长。

⑥ log4j2异步设置详细参考:log4j2异步注意事项

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 姓名:周小蓬 16019110037 转载自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw阅读 34,820评论 13 425
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 10,764评论 1 15
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 10,818评论 0 34
  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 14,406评论 8 167

友情链接更多精彩内容