數據採集組件:Flume基礎用法和Kafka集成

本文源碼:GitHub || GitEEgit

1、Flume簡介

一、基礎描述

Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;github

特色:分佈式、高可用、基於流式架構,一般用來收集、聚合、搬運不一樣數據源的大量日誌到數據倉庫。算法

二、架構模型

Agent包括三個核心組成,Source、Channel、Sink。Source負責接收數據源,併兼容多種類型,Channel是數據的緩衝區,Sink處理數據輸出的方式和目的地。數據庫

Event是Flume定義的一個數據流傳輸的基本單元,將數據從源頭送至目的地。apache

Flume能夠設置多級Agent鏈接的方式傳輸Event數據,從最初的source開始到最終sink傳送的目的存儲系統,若是數量過多會影響傳輸速率,而且傳輸過程當中單節點故障也會影響整個傳輸通道。bootstrap

Flume支持多路複用數據流到一個或多個目的地,這種模式能夠將相同數據複製到多個channel中,或者將不一樣數據分發到不一樣的channel中,而且sink能夠選擇傳送到不一樣的目的地。vim

Agent1理解爲路由節點負責Channel的Event均衡到多個Sink組件,每一個Sink組件分別鏈接到獨立的Agent上,實現負載均衡和錯誤恢復的功能。設計模式

Flume的使用組合方式作數據聚合,每臺服務器部署一個flume節點採集日誌數據,再匯聚傳輸到存儲系統,例如HDFS、Hbase等組件,高效且穩定的解決集羣數據的採集。服務器

2、安裝過程

一、安裝包

apache-flume-1.7.0-bin.tar.gz架構

二、解壓命名

[root@hop01 opt]# pwd
/opt
[root@hop01 opt]# tar -zxf apache-flume-1.7.0-bin.tar.gz
[root@hop01 opt]# mv apache-flume-1.7.0-bin flume1.7

三、配置文件

配置路徑:/opt/flume1.7/conf

mv flume-env.sh.template flume-env.sh

四、修改配置

添加JDK依賴

vim flume-env.sh
export JAVA_HOME=/opt/jdk1.8

五、環境測試

安裝netcat工具

sudo yum install -y nc

建立任務配置

[root@hop01 flume1.7]# cd job/
[root@hop01 job]# vim flume-netcat-test01.conf

添加基礎任務配置

注意:a1表示agent名稱。

# this agent
a1.sources = sr1
a1.sinks = sk1
a1.channels = sc1

# the source
a1.sources.sr1.type = netcat
a1.sources.sr1.bind = localhost
a1.sources.sr1.port = 55555

# the sink
a1.sinks.sk1.type = logger

# events in memory
a1.channels.sc1.type = memory
a1.channels.sc1.capacity = 1000
a1.channels.sc1.transactionCapacity = 100

# Bind the source and sink
a1.sources.sr1.channels = sc1
a1.sinks.sk1.channel = sc1

開啓flume監聽端口

/opt/flume1.7/bin/flume-ng agent --conf /opt/flume1.7/conf/ --name a1 --conf-file /opt/flume1.7/job/flume-netcat-test01.conf -Dflume.root.logger=INFO,console

使用netcat工具向55555端口發送數據

[root@hop01 ~]# nc localhost 55555
hello,flume

查看flume控制面

3、應用案例

一、案例描述

基於flume在各個集羣服務進行數據採集,而後數據傳到kafka服務,再考慮數據的消費策略。

採集:基於flume組件的便捷採集能力,若是直接使用kafka會產生大量的埋點動做很差維護。

消費:基於kafka容器的數據臨時存儲能力,避免系統高度活躍期間採集數據過大沖垮數據採集通道,而且能夠基於kafka作數據隔離並針對化處理。

二、建立kafka配置

[root@hop01 job]# pwd
/opt/flume1.7/job
[root@hop01 job]# vim kafka-flume-test01.conf

三、修改sink配置

# the sink
a1.sinks.sk1.type = org.apache.flume.sink.kafka.KafkaSink
# topic
a1.sinks.sk1.topic = kafkatest
# broker地址、端口號
a1.sinks.sk1.kafka.bootstrap.servers = hop01:9092
# 序列化方式
a1.sinks.sk1.serializer.class = kafka.serializer.StringEncoder

四、建立kafka的Topic

上述配置文件中名稱:kafkatest,下面執行建立命令以後查看topic信息。

[root@hop01 bin]# pwd
/opt/kafka2.11
[root@hop01 kafka2.11]# bin/kafka-topics.sh --create --zookeeper hop01:2181 --replication-factor 1 --partitions 1 --topic kafkatest
[root@hop01 kafka2.11]# bin/kafka-topics.sh --describe --zookeeper hop01:2181 --topic kafkatest

五、啓動Kakfa消費

[root@hop01 kafka2.11]# bin/kafka-console-consumer.sh --bootstrap-server hop01:2181 --topic kafkatest --from-beginning

這裏指定topic是kafkatest。

六、啓動flume配置

/opt/flume1.7/bin/flume-ng agent --conf /opt/flume1.7/conf/ --name a1 --conf-file /opt/flume1.7/job/kafka-flume-test01.conf -Dflume.root.logger=INFO,console

4、源代碼地址

GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

閱讀標籤

Java基礎】【設計模式】【結構與算法】【Linux系統】【數據庫

分佈式架構】【微服務】【大數據組件】【SpringBoot進階】【Spring&Boot基礎

數據分析】【技術導圖】【 職場

相關文章
相關標籤/搜索