大数据求索(9): log4j + flume + kafka + spark streaming实时日志流处理实战

该博客详细介绍了如何利用log4j生成实时日志,通过Flume进行采集,Kafka作为缓冲区,以及Spark Streaming进行实时处理的流程。包括设置log4j配置,Flume与Kafka的集成,以及Spark Streaming的Receiver模式应用。
摘要由CSDN通过智能技术生成

大数据求索(9): log4j + flume + kafka + spark streaming实时日志流处理实战

一、实时流处理

1.1 实时计算

跟实时系统类似(能在严格的时间限制内响应请求的系统),例如在股票交易中,市场数据瞬息万变,决策通常需要秒级甚至毫秒级。通俗来说,就是一个任务需要在非常短的单位时间内计算出来,这个计算通常是多次的。

1.2 流式计算

通常指源源不断的数据流过系统,系统能够不停地连续计算。这里对时间上可能没什么特别限制,数据流入系统到产生结果,可能经过很长时间。比如系统中的日志数据、电商中的每日用户访问浏览数据等。

1.3 实时流式计算

将实时计算和流式数据结合起来,就是实时流式计算,也就是大数据中通常说的实时流处理。数据源源不断的产生的同时,计算时间上也有了严格的限制。比如,目前电商中的商品推荐,往往在你点了某个商品之后,推荐的商品都是变化的,也就是实时的计算出来推荐给你的。再比如你的手机号,在你话费或者流量快用完时,实时的给你推荐流量包套餐等。

二、实时流处理实战

此例子借鉴慕课网实战视频Spark Streaming实时流处理项目实战,感兴趣的可以学习一下。

2.1 源源不断的数据

此处使用log4j模拟源源不断产生的日志数据,启动一个进程,不停地打印数据即可。简单配置如下:

log4j.rootLogger=INFO,stdout,flume

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target = System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{
   yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

然后写一个简单的日志打印小程序即可,代码如下:

public class LoggerGenerator {
   
    private static Logger logger = Logger.getLogger(LoggerGenerator.class.getName());

    public static void main(String[] args) throws InterruptedException {
   
        int index = 0;
        while (true) {
   
            Thread.sleep(1000);
            logger.info("value : " + index++);
        }
    }
}

2.2 实时采集数据

可以采用Flume实时采集日志数据,为了和log4j结合,log4j配置文件需要如下配置

log4j.rootLogger=INFO,stdout,flume

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target = System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{
   yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = wds
log4j.appender.flume.Port = 41414
log4j.appender.flume.UnsafeMode = true

同时,flume配置如下,

agent1.sources=avro-source
agent1.channels=logger-channel
agent1.sinks=logger-sink

# define source
agent1.sources.avro-source.type=avro
agent1.sources.avro-source.bind=0.0.0.0
agent1.sources.avro-source.port=41414

# define channel
agent1.channels.logger-channel.type=memory

#define sink
agent1.sinks.logger-sink.type = logger

agent1.sources.avro-source.channels=logger-channel
agent1.sinks.logger-sink.channel=logger-channel

这里暂时采用logger sink, 目的是为了测试数据能否采集到。做项目的过程中,不要想着一步到位,最好做一步测试一步,方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值