大数据之实时流处理常用框架

来源:原创作者:编辑:admin2020-07-09 07:36

  展开全文

  实时流处理简单概述:实时是说整个流处理相应时间较短,流式技算是说数据是源源不断的,没有尽头的。实时流处理一般是将业务系统产生的数据进行实时收集,交由流处理框架进行数据清洗,统计,入库,并可以通过可视化的方式对统计结果进行实时的展示。本文涉及到的框架或技术有 Flume,Logstash,kafka,Storm, SparkStreaming等。

  实时流处理的的流程与技术选型 :

  一、日志收集

  由于业务系统一般是游离与流处理集群如SparkStreaming、Storm之外的,所以我们需要对业务系统的数据进行实时收集。这就用到了日志收集框架,日志收集框架主要需要解决三个问题:数据从哪儿来,数据到哪儿去,实时收集。因为在流处理中为了防止突发或激增流量压垮流处理集群,通常将收集过后的数据输出到kafka分布式消息系统,然后流处理集群去消费kafka中的数据,下面介绍两种常用的日志收集框架以及他们如何对接kafka.

  1).Apache Flume

  这是一个apache的顶级项目,所以他的域名为flume.apache.org, 下面是官网上的原理图,Flume框架把每个收集任务都定义为一个Agent(这是一个JAVA进程),他有三个基本组件Source、Channel、Sink。

  source:收集数据,可以对接各种常用数据源,如文件(exec source),kafka(kafka source),jms(java消息系统)等。

  channel:source组件把数据收集来以后,临时存放在channel(管道)中,即channel组件在agent中是专门用来存放临时数据的,并起到数据缓冲的作用。常用的channel有memory chanel 、jdbc chanel 、file channel 等等。

  sink:sink组件是用于从channel中取数据并送到目的地的组件,目的地包括hdfs、logger、avro、thrift、file、hbase等。

  

  其实flume的使用就是编写配置文件,下面是使用flume将Nginx的日志对接kafka的配置文件,我们将该收集任务命名为

  exec-memory-kafka,只需如下编写:

  #配置source、sink、channel

  exec-memory-kafka.sources=exec-source #指定source (数据从哪儿来),可以指定多个数据源,用逗号分隔。

  exec-memory-kafka.sinks=kafka-sink #指定sink(数据到哪儿去)

  exec-memory-kafka.channels=memory-channel #指定channel

  #source详细配置

  exec-memory-kafka.sources.exec-source.type=exec 执行操作系统命令

  exec-memory-kafka.sources.exec-source.command=sudo tail -F /var/log/nginx/access.log #监控Nginx日志文件

  exec-memory-kafka.sources.exec-source.shell=/bin/sh -c #shell命令的前缀

  #channel 详细配置