1. flume安装

(1)下载:wget http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.1.tar.gz

(2)解压:tar zxvf flume-ng-1.6.0-cdh5.7.1.tar.gz

(3)环境变量:

  1. export FLUME_HOME=/xxx/soft/apache-flume-1.6.0-cdh5.7.1-bin
  2. export PATH=$PATH:$FLUME_HOME/bin

source /etc/profile

vim conf/flume-env.sh

  1. export JAVA_HOME=/letv/soft/java
  2. export HADOOP_HOME=/etc/hadoop

  

(4)创建avro.conf

  1. vim conf/avro.conf
  2.  
  3. a1.sources=source1
  4. a1.channels=channel1
  5. a1.sinks=sink1
  6.  
  7. a1.sources.source1.type=avro
  8. a1.sources.source1.bind=10.112.28.240
  9. a1.sources.source1.port=4141
  10. a1.sources.source1.channels = channel1
  11.  
  12. a1.channels.channel1.type=memory
  13. a1.channels.channel1.capacity=10000
  14. a1.channels.channel1.transactionCapacity=1000
  15. a1.channels.channel1.keep-alive=30
  16.  
  17. a1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
  18. a1.sinks.sink1.topic = hdtest.topic.jenkin.com
  19. a1.sinks.sink1.brokerList = 10.11.97.57:9092,10.11.97.58:9092,10.11.97.60:9092
  20. a1.sinks.sink1.requiredAcks = 0
  21. a1.sinks.sink1.sink.batchSize = 20
  22. a1.sinks.sink1.channel = channel1

  

source1.bind:flume安装的服务器

sink1.brokerList:kafka集群

sink1.topic:发往kafka的topic

  

(5)运行flume:

  1. flume-ng agent --conf /xxx/soft/apache-flume-1.6.0-cdh5.7.1-bin/conf --conf-file /xxx/soft/apache-flume-1.6.0-cdh5.7.1-bin/conf/avro.conf --name a1 -Dflume.root.logger=INFO,console

  

2. 编写日志生产程序

(1)工程结构

2. log4j.properties

  1. log4j.rootLogger=INFO,console
  2.  
  3. # for package com.demo.kafka, log would be sent to kafka appender.
  4. log4j.logger.com.demo.flume=info,stdout,file,flume
  5.  
  6. ### flume ###
  7. log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
  8. log4j.appender.flume.Hostname = 10.112.28.240
  9. log4j.appender.flume.Port = 4141
  10. log4j.appender.flume.UnsafeMode = true
  11. log4j.appender.flume.layout=org.apache.log4j.PatternLayout
  12. log4j.appender.flume.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c:%L] - %m%n
  13.  
  14. # appender console
  15. log4j.appender.console=org.apache.log4j.ConsoleAppender
  16. log4j.appender.console.target=System.out
  17. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  18. log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n
  19.  
  20. ### file ###
  21. log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
  22. log4j.appender.file.Threshold=INFO
  23. log4j.appender.file.File=./logs/tracker/tracker.log
  24. log4j.appender.file.Append=true
  25. log4j.appender.file.DatePattern='.'yyyy-MM-dd
  26. log4j.appender.file.layout=org.apache.log4j.PatternLayout
  27. log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
  28.  
  29. ### stdout ###
  30. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  31. log4j.appender.stdout.Threshold=INFO
  32. log4j.appender.stdout.Target=System.out
  33. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  34. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n

  

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

3. 日志生产者

  1. public class FlumeTest {
  2. private static final Logger LOGGER = Logger.getLogger(FlumeTest.class);
  3.  
  4. public static void main(String[] args) throws InterruptedException {
  5. for (int i = 20; i < 100; i++) {
  6. LOGGER.info("Info [" + i + "]");
  7. Thread.sleep(1000);
  8. }
  9. }
  10. }

4. kafka日志消费者

  1. public class Consumer {
  2.  
  3. public static void main(String[] args) {
  4. System.out.println("begin consumer");
  5. connectionKafka();
  6. System.out.println("finish consumer");
  7. }
  8.  
  9. @SuppressWarnings("resource")
  10. public static void connectionKafka() {
  11.  
  12. Properties props = new Properties();
  13. props.put("bootstrap.servers", "10.11.97.57:9092,10.11.97.58:9092,10.11.97.60:9092");
  14. props.put("group.id", "testConsumer");
  15. props.put("enable.auto.commit", "true");
  16. props.put("auto.commit.interval.ms", "1000");
  17. props.put("session.timeout.ms", "30000");
  18. props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
  19. props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
  20. KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
  21. consumer.subscribe(Arrays.asList("hdtest.topic.jenkin.com"));
  22. while (true) {
  23. ConsumerRecords<String, String> records = consumer.poll(100);
  24. try {
  25. Thread.sleep(2000);
  26. } catch (InterruptedException e) {
  27. e.printStackTrace();
  28. }
  29. for (ConsumerRecord<String, String> record : records) {
  30. System.out.printf("===================offset = %d, key = %s, value = %s", record.offset(), record.key(),
  31. record.value());
  32. }
  33. }
  34. }
  35. }

  

  

flume从log4j收集日志输出到kafka的更多相关文章

  1. 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题

    在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...

  2. 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)

    1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...

  3. log4j 配置日志输出(log4j.properties)

    轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...

  4. log4j分离日志输出 自定义过滤 自定义日志文件

    普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...

  5. Flume用来收集日志,zeppelin用来展示

    Flume:Flume是一个分布式,可依赖的,用于高效率的收集.聚类.移动大量数据的服务.Flume使用基于流数据的简单而且可扩展的架构.由于拥有可调的依赖机制和许多故障恢复机制,Flume是健壮而且 ...

  6. log4j将日志输出到控制台,文件,邮件

    #将日志写到文件 log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=e\:\ ...

  7. log4j 设置日志输出文件的路径

    log4j.rootLogger=debug, A1 #输出到指定目录下 og4j.appender.A1.File=/log.log #输出到tomcat容器下的指定目录 log4j.appende ...

  8. 使用Log4J收集日志

    一:搭建好Selenium+testNG+Maven环境,可参考 http://www.cnblogs.com/hc1020/p/8602863.html 二:百度搜索Maven仓库,然后搜索Log4 ...

  9. log4j。日志输出

    log4j.rootLogger = debug , stdout , D , E log4j.appender.stdout = org.apache.log4j.ConsoleAppender l ...

随机推荐

  1. jQuery中的find()与filter()

    这是jQuery里常用的2个方法.他们2者功能是完全不同的. <div class="css"> <p class="rain">测试1 ...

  2. 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质

    [BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...

  3. 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法

    [BZOJ1706][usaco2007 Nov]relays 奶牛接力跑 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项 ...

  4. linux的/etc/hosts的作用

    转自:http://blog.chinaunix.net/uid-28559065-id-4145820.html  linux /etc/hosts文件作用   分类: LINUX linux /e ...

  5. python3-requests库的使用

    同步请求库requests用来做测试和简单爬虫其实非常好用的,今天来讲一讲,毕竟不熟悉就用,吃了很大亏啊,文档一定要好好看 http://docs.python-requests.org/zh_CN/ ...

  6. 170412、Spring Boot Quartz介绍

    (1)什么是Quartz? (2)Quartz的特点: (3)Quartz专用词汇说明: (4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一 ...

  7. oracle导入sql文件

    oracle导入sql文件: 1.进入到sql文件目录下,登录需要导入文件的用户 打开cmd,输入以下命令,进入oracle, sqlplus username/password username:需 ...

  8. Web容器与Servlet

    转自:http://www.360doc.com/content/10/0713/20/495229_38798294.shtml Web服务器与Web应用层属于不容两个范畴,为了让他们两写作,首先应 ...

  9. hdu1568&&hdu3117 求斐波那契数前四位和后四位

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...

  10. jenkins-cli, plugin/extracolumns

    ++++++++++++++++++++++++++++++++++++++++++++++++ echo "构建地址:${BUILD_URL}" >> xxx.log ...