flume采集log4j日志到kafka

转载 2017年09月26日 21:19:55

简单测试项目:

1、新建Java项目结构如下:

测试类FlumeTest代码如下:

复制代码
package com.demo.flume;

import org.apache.log4j.Logger;

public class FlumeTest {
    
    private static final Logger LOGGER = Logger.getLogger(FlumeTest.class);

    public static void main(String[] args) throws InterruptedException {
        for (int i = 20; i < 100; i++) {
            LOGGER.info("Info [" + i + "]");
            Thread.sleep(1000);
        }
    }
}
复制代码

监听kafka接收消息Consumer代码如下:

复制代码
package com.demo.flume;

/**
 * INFO: info
 * User: zhaokai
 * Date: 2017/3/17
 * Version: 1.0
 * History: <p>如果有修改过程,请记录</P>
 */

import java.util.Arrays;
import java.util.Properties;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

public class Consumer {

    public static void main(String[] args) {
        System.out.println("begin consumer");
        connectionKafka();
        System.out.println("finish consumer");
    }

    @SuppressWarnings("resource")
    public static void connectionKafka() {

        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.1.163:9092");
        props.put("group.id", "testConsumer");
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("session.timeout.ms", "30000");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList("flumeTest"));
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(100);
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("===================offset = %d, key = %s, value = %s", record.offset(), record.key(),
                        record.value());
            }
        }
    }
}
复制代码

log4j配置文件配置如下:

复制代码
log4j.rootLogger=INFO,console

# for package com.demo.kafka, log would be sent to kafka appender.
log4j.logger.com.demo.flume=info,flume

log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = 192.168.1.163
log4j.appender.flume.Port = 4141
log4j.appender.flume.UnsafeMode = true
log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c:%L] - %m%n
 
# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n
复制代码

备注:其中hostname为flume安装的服务器IP,port为端口与下面的flume的监听端口相对应

pom.xml引入如下jar:

复制代码
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.10</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flume</groupId>
        <artifactId>flume-ng-core</artifactId>
        <version>1.5.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flume.flume-ng-clients</groupId>
        <artifactId>flume-ng-log4jappender</artifactId>
        <version>1.5.0</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.10.2.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.10</artifactId>
        <version>0.10.2.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-log4j-appender</artifactId>
        <version>0.10.2.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
</dependencies>
复制代码

2、配置flume

flume/conf下:

新建avro.conf 文件内容如下:

当然skin可以用任何方式,这里我用的是kafka,具体的skin方式可以看官网

复制代码
a1.sources=source1
a1.channels=channel1
a1.sinks=sink1

a1.sources.source1.type=avro
a1.sources.source1.bind=192.168.1.163
a1.sources.source1.port=4141
a1.sources.source1.channels = channel1

a1.channels.channel1.type=memory
a1.channels.channel1.capacity=10000
a1.channels.channel1.transactionCapacity=1000
a1.channels.channel1.keep-alive=30

a1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.sink1.topic = flumeTest
a1.sinks.sink1.brokerList = 192.168.1.163:9092
a1.sinks.sink1.requiredAcks = 0
a1.sinks.sink1.sink.batchSize = 20
a1.sinks.sink1.channel = channel1
复制代码

如上配置,flume服务器运行在192.163.1.163上,并且监听的端口为4141,在log4j中只需要将日志发送到192.163.1.163的4141端口就能成功的发送到flume上。flume会监听并收集该端口上的数据信息,然后将它转化成kafka event,并发送到kafka集群flumeTest topic下。

3、启动flume并测试

  1. flume启动命令:bin/flume-ng agent --conf conf --conf-file conf/avro.conf --name a1 -Dflume.root.logger=INFO,console
  2. 运行FlumeTest类的main方法打印日志
  3. 允许Consumer的main方法打印kafka接收到的数据

flume实时收集日志到kafka

Flume实时收集日志 kafka版本0.8.2 1.版本apache-flume-1.7.0-bin.tar.gz 解压后conf 目录下配置以.conf结尾的文件如(flume_proper...
  • likeChocolates
  • likeChocolates
  • 2017年07月14日 15:49
  • 795

log4j结合apache flume输出日志到apache kafka

flume是cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,flume提供对数据进行简单处理,并...
  • minicto
  • minicto
  • 2017年01月04日 23:08
  • 1133

flume读取日志数据写入kafka

一、flume配置 flume要求1.6以上版本 flume-conf.properties文件配置内容,sinks的输出作为kafka的product a1.sources = r1 a1.sin...
  • huguoping830623
  • huguoping830623
  • 2015年08月31日 19:13
  • 7711

flume上报日志到kafka

1.flume安装 参考:http://blog.csdn.net/lnho2015/article/details/52035145 1. 系统需求 Flume需要Java 1.6及以上(推荐1.7...
  • fover717
  • fover717
  • 2017年03月14日 21:01
  • 1811

自定义Flume拦截器,并将收集的日志存储到Kafka中(案例)

1.引入POM文件如果想调用Flume,需要引入flume相关的jar包依赖,jar包依赖如下: org.apache.flume f...
  • toto1297488504
  • toto1297488504
  • 2017年06月25日 13:45
  • 1099

关于linux环境下flume采集日志发布到kafka的配置

整体流程Created with Raphaël 2.1.0开始 配置flume+kafkakafka是否能接收到flume日志?结束yesnoflume配置flume下载地址https://pan....
  • qq_36811902
  • qq_36811902
  • 2017年12月26日 10:11
  • 32

flume + Kafka采集数据 超简单

说到标题,这只是实时架构中的一小部分内容。 下载最新版本flume:apache-flume-1.6.0-bin.tar.gz  解压缩,修改conf/flume-conf.properties ...
  • spider_zhcl
  • spider_zhcl
  • 2015年08月12日 14:27
  • 3046

Flume收集日志(logback)--》 kafka缓冲队列--》永久存储mongodb (二)

原创 2014年11月13日 16:08:17 7097 Flume的介绍就不多说了,大家可以自己搜索。但是目前网上大都是Flume 1.4版本或之前的资料,Flume 1.5感觉变化...
  • qq_32447321
  • qq_32447321
  • 2017年10月28日 17:57
  • 252

flume学习03-flume收集log4j日志

前几篇已经介绍了flume相关的知识,包括flume架构、如何配置启动以及暂停,接下去主要说说flume接受log4j日志。 前面介绍过了log4j需要用avro的方式讲日志传递到flume,所以我...
  • JThink_
  • JThink_
  • 2015年02月13日 17:18
  • 7472

flume读取日志数据写入kafka 然后kafka+storm整合

一、flume配置 flume要求1.6以上版本 flume-conf.properties文件配置内容,sinks的输出作为kafka的product [html] view pl...
  • qq_36864672
  • qq_36864672
  • 2017年12月12日 11:59
  • 241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flume采集log4j日志到kafka
举报原因:
原因补充:

(最多只允许输入30个字)