1.Log4j集成KafKa应用
1.应用描述
一般都是将日子保存在本地服务器中,如果将应用日志同步写在远程服务器,则会导致应用程序依赖于远程服务器,如果远程服务器宕机或者网络请求超时都会影响到应用程序,同时也会增加应用程序的网络开销。
因此,如果要将日志写到远程服务器,一定需要结合应用场景综合的考虑;
2.具体实现
应用程序可以通过Log4j将日志同步到Kafka步骤:
- 依赖:kafka-log4j-appender
- 编写log4j.properties文件,为了保证不同级别的日志分别输出到不同的文件,并且每个级别的日志不再包含比该级别高的日志,可以自定义一个Appender,继承DailyRollingFileAppender类,重写isAsServerAsThresold()方法,让每个级别类型的日志只提取与之优先级(Priority)相等的日志;
- 在Kafka上创建log4j.properties中配置的相应主题;
2. KafKa与Flume整合应用
kafka-log4j-appender将应用程序的日志直接写入到kafka中,这种方式虽然简单,但是由于应用程序依赖于Kafka运行环境,因此存在一定的不足;
通常的做法是:应用程序将日志写入到本地,然后通过日志采集工具将本地日志同步到远程服务器,而Flume就是最常用的数据采集工具之一。现在引入了Flume,通过Flume将应用程序产生的日志同步到Kafka;
1. Flume简介
2. Flume与KafKa比较
3. Flume的安装配置
4. Flume采集日志写入KafKa
步骤:
- 需要在配置文件中指定源、接收器和通道的名称;
- 配置源
- 配置通道信息
- 配置接收器,接收器从通道获取信息写入到Kafka
3.KafKa与Flume和HDFS整合应用
Flume是一个连接各种组件和系统的桥梁,下载安装的lib目录下有Flume与Hbase、HDFS等集成的jar文件,可以很方便的与HBase和HDFS连接。在实际业务中,我们一般通过Flume从应用程序采集实时数据写入到Kafka,而将历史数据写入到HBASE和HDFS。
例如:我们可以通过Kafka Steams实时对用户行为分析,将分析结果再写入到Kafka,然后有Flume写入Hbase,供可视化应用系统展示。通过将这些系统整合在一起,可以很方便的实现一个扩展性良好、高吞吐量的数据采集分析系统;
1.Hadoop安装配置
步骤:
- 解压Hadoop安装包
- 环境配置:
- 指定JDK安装路径,在hadoop-env.sh文件中添加JDK安装路径
- 修改core-site.xml文件,在该文件中配置通信地址以及存储路径;
- 修改hdfs-site.xml,在该文件中配置Hadoop文件块的数据备份数,由于是伪分布式模式,因此可以将其值设置为1,同时配置NameNode和DataNode节点文件块数据存储路径;
- 修改mapred-site.xml。将配置模板文件mapred-site.xml.template复制一份,命令为mapred-site.xml,在该文件中配置JobTracker的主机名或者IP和端口。对于伪分布式模式该节点既是JobTracker也是TaskTracker。
- 启动运行。在运行Hadoop之前先进性格式化Hadoop工作空间。
2.Flume采集KafKa消息写入HDFS
整合步骤:
- KafkaSource配置;
Flume提供了从Kafka采集数据的flume-kafka-source-1.0.7.jar文件,需要为该jar提供的KafkaSource进行相关的配置;
- KafkaChannel配置;
Flume采集数据的时候都采用内存通道,现在我们使用KafkaChannel,在安装lib目录下,有一个flume-kafka-channel-1.7.0.jar,该文件定义了一个Kafka通道,将采集的数据写入到Kafka主题中;
- 写HDFS接收器配置;
在安装lib目录下有一个flume-hdfs-sink-1.7.0.jar文件,定义了一个将数据写入到HDFS的接入器HDFSEventSink,可以通过该接收器提供的配置写入HDFS数据格式、文件切割方式、文件压缩方式等;