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

本文介绍了实时流处理的概念,包括数据从哪儿来、到哪儿去以及实时收集。主要讨论了Apache Flume和Logstash这两个日志收集框架,以及它们如何对接Kafka进行数据传输。此外,还提到了Kafka作为分布式流处理平台的优势,以及流处理框架Storm和SparkStreaming的基本原理和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        实时流处理简单概述:实时是说整个流处理相应时间较短,流式技算是说数据是源源不断的,没有尽头的。实时流处理一般是将业务系统产生的数据进行实时收集,交由流处理框架进行数据清洗,统计,入库,并可以通过可视化的方式对统计结果进行实时的展示。本文涉及到的框架或技术有 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 详细配置
exec-memory-kafka.channels.memory-channel.type = memory  #内存channel

#sink详细配置
exec-memory-kafka.sinks.kafka-sink.type = org.apache.flume.sink.kafka.KafkaSink #类型 为kafka sink
exec-memory-kafka.sinks.kafka-sink.brokerList = hadoop000:9092  #kafaka服务的地址,多个用逗号分隔
exec-memory-kafka.sinks.kafka-sink.topic = test1 #指定主题
exec-memory-kafka.sinks.kafka-sink.batchSize = 5  #指定每多少条收集一次,这里是每5条发送一次。
exec-memory-kafka.sinks.kafka-sink.requiredAcks = 1 #使kafka对是否收到数据进行确认,确保数据不会丢失

#为sink和source指定channel

exec-memory-kafka.sources.exec-source.channels = memory-channel

exec-memory-kafka.sinks.kafka-sink.channel = memory-channel

 

编写好配置文件后切换到flume的bin目录下执行:

flume-ng agent --conf 配置文件的目录--conf-file 配置文件的全路径--name exec-memory-kafka -Dflume.root.logger=INFO,console

即可开启收集任务(进程的方式)

2).ELK技术栈的Logstash 

         Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力。它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地。Logstash使用时也是编写配置文件,下面是如何使用配置文件的方式将Nginx日志输出到Kafka。

#定义数据源

input{

#这里是Nginx日志文件  

file{

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值