Flume之使用Kafka_Channel消費數據至HDFS

前言

  • 操作系統:CentOS 7
  • Java版本:1.8.0_221
  • Flume版本:1.8.0

1. Kafka Channel使用場景

  • 配合Flume Source、Flume Sink使用,爲Event的傳輸提供一種具有高可用的Channel
  • 配合Flume Source和攔截器interceptor使用,無Sink,用於將Flume蒐集的Event傳輸到Kafka集羣指定Topic中,便於Kafka消息訂閱者使用
  • 配合Flume Sink使用,如HDFS Sink、HBaseSink等,無Source,用於提供一種低延遲、高容錯的傳輸Event方式,直接通過Flume Agent將Kafka中的Event傳輸給Flume Sink

2. Flume Agent配置示例

  • 此Flume Agent配置文件主要用於使用Agent訂閱Kafka集羣中指定Topic,並將其中的消息傳輸至HDFS中,並按照指定時間間隔滾動生成HDFS文件夾和文件。其中主要使用的Flume組件有2個Kafka Channel、2個HDFS Sink等
# 此配置文件主要用於將Kafka中的啓動日誌和用戶行爲數據輸出到HDFS中
# Kafka Channel->HDFS Sink

# Agent
a1.channels = c1,c2
a1.sinks = k1,k2

# Channels.c1
# 設置a1.channels.c1的類型
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
# 設置Kafka集羣中的Broker
a1.channels.c1.kafka.bootstrap.servers = kafkaServer1:9092,kafkaServer2:9092,kafkaServer3:9092
# 設置a1.channels.c1使用的Kafka的Topic
a1.channels.c1.kafka.topic = topic_start
# 設置成不按照flume event格式解析數據,因爲同一個Kafka topic可能有非flume Event類數據傳入
a1.channels.c1.parseAsFlumeEvent = false
# 設置消費者組,保證每次消費時能夠獲取上次對應的Offset
a1.channels.c1.kafka.consumer.group.id = flume-consumer-group
# 設置消費過程poll()超時時間(ms)
a1.channels.c1.pollTimeout = 1000

# Channels.c2
# 設置a1.channels.c2的類型
a1.channels.c2.type = org.apache.flume.channel.kafka.KafkaChannel
# 設置Kafka集羣中的Broker
a1.channels.c2.kafka.bootstrap.servers = kafkaServer1:9092,kafkaServer2:9092,kafkaServer3:9092
# 設置a1.channels.c2使用的Kafka的Topic
a1.channels.c2.kafka.topic = topic_event
# 設置成不按照flume event格式解析數據,因爲同一個Kafka topic可能有非flume Event類數據傳入
a1.channels.c2.parseAsFlumeEvent = false
# 設置消費者組,保證每次消費時能夠獲取上次對應的Offset
a1.channels.c2.kafka.consumer.group.id = flume-consumer-group
# 設置消費過程poll超時時間(ms)
a1.channels.c2.pollTimeout = 1000

# Sinks.k1
# 配置HDFS Sink
a1.sinks.k1.type = hdfs
# 設置hdfs文件路徑,同時並設置了按照日期創建文件夾(存儲啓動日誌)
a1.sinks.k1.hdfs.path = /logs/topic_start/%Y-%m-%d/%H-%M-%S
# 設置flume創建的hdfs文件前綴(表示啓動日誌)
a1.sinks.k1.hdfs.filePrefix = start-logs-

# 以下三組參數的配置用於控制flume在hdfs中生成文件的滾動方式
# 滿足以下三者中任何一個條件都會新生成hdfs文件
# 設置文件滾動的時間間隔,單位(second),置0表示關閉
a1.sinks.k1.hdfs.rollInterval = 10
# 設置文件滾動的最大size閾值,由於是hdfs sink故最好設置成Block Size的倍數
# 本次實驗的hadoop版本爲2.7.7(2.7.3之後默認Block Size爲128MB,之前爲64MB)
# 單位(bytes),置0表示關閉
a1.sinks.k1.hdfs.rollSize = 134217700
# 設置滾動文件存儲的最大Event個數
# 此參數一般設置爲0,即關閉,除非有嚴格生產需求並且知道Event大小能夠自主控制
a1.sinks.k1.hdfs.rollCount = 0

# 設置flume每批次刷到hdfs中的Event個數(超過一定時長也會進行刷新,並非要等滿一批次)
a1.sinks.k1.hdfs.batchSize = 100

# 設置hdfs文件格式,目前只支持(SequenceFile/DataStream/CompressedStream)
# 其中CompressedStream類型需要配合hdfs.codeC參數來指定具體的壓縮方式
# SequenceFile表示按照序列文件的方式進行壓縮,而DataStream則表示不進行壓縮
a1.sinks.k1.hdfs.fileType = DataStream

# 以下三組參數的配置配合轉義序列(如%y %m %d %H %M %S等)能夠自定義時間輪轉最小刻度
# 設置hdfs時間四捨五入,四捨五入的界限爲(roundValue*roundUnit),本次設置的以30s爲界限
# 注:通常理解的四捨五入以5爲界限
# 設置四捨五入之後文件夾將按照一定時間大小的刻度進行創建文件夾
# 否則都是按照之前設置每分鐘進行文件夾的創建
a1.sinks.k1.hdfs.round = true
# 設置hdfs時間四捨五入的最小單元倍數
a1.sinks.k1.hdfs.roundValue = 30
# 設置hdfs時間四捨五入的最小單位
a1.sinks.k1.hdfs.roundUnit = second

# 設定是否使用本地時間戳,默認爲false,即使用Event的Header中的時間戳,但本次實驗中Event-Header爲空
a1.sinks.k1.hdfs.useLocalTimeStamp = true

# Sinks.k2
# 配置HDFS Sink
a1.sinks.k2.type = hdfs
# 設置hdfs文件路徑,同時並設置了按照日期創建文件夾(存儲事件日誌)
a1.sinks.k2.hdfs.path = /logs/topic_event/%Y-%m-%d/%H-%M-%S
# 設置flume創建的hdfs文件前綴(表示事件日誌)
a1.sinks.k2.hdfs.filePrefix = event-logs-

# 以下三組參數的配置用於控制flume在hdfs中生成文件的滾動方式
# 滿足以下三者中任何一個條件都會新生成hdfs文件
# 設置文件滾動的時間間隔,單位(second),置0表示關閉
a1.sinks.k2.hdfs.rollInterval = 10
# 設置文件滾動的最大size閾值,由於是hdfs sink故最好設置成Block Size的倍數
# 本次實驗的hadoop版本爲2.7.7(2.7.3之後默認Block Size爲128MB,之前爲64MB)
# 單位(bytes),置0表示關閉
a1.sinks.k2.hdfs.rollSize = 134217700
# 設置滾動文件存儲的最大Event個數
# 此參數一般設置爲0,即關閉,除非有嚴格生產需求並且知道Event大小能夠自主控制
a1.sinks.k2.hdfs.rollCount = 0

# 設置flume每批次刷到hdfs中的Event個數(超過一定時長也會進行刷新,並非要等滿一批次)
a1.sinks.k2.hdfs.batchSize = 100

# 設置hdfs文件格式,目前只支持(SequenceFile/DataStream/CompressedStream)
# 其中CompressedStream類型需要配合hdfs.codeC參數來指定具體的壓縮方式
# SequenceFile表示按照序列文件的方式進行壓縮,而DataStream則表示不進行壓縮
a1.sinks.k2.hdfs.fileType = DataStream

# 以下三組參數的配置配合轉義序列(如%y %m %d %H %M %S等)能夠自定義時間輪轉最小刻度
# 設置hdfs時間四捨五入,四捨五入的界限爲(roundValue*roundUnit),本次設置的以30s爲界限
# 注:通常理解的四捨五入以5爲界限
# 設置四捨五入之後文件夾將按照一定時間大小的刻度進行創建文件夾
# 否則都是按照之前設置每分鐘進行文件夾的創建
a1.sinks.k2.hdfs.round = true
# 設置hdfs時間四捨五入的最小單元倍數
a1.sinks.k2.hdfs.roundValue = 30
# 設置hdfs時間四捨五入的最小單位
a1.sinks.k2.hdfs.roundUnit = second

# 設定是否使用本地時間戳,默認爲false,即使用Event的Header中的時間戳,但本次實驗中Event-Header爲空
a1.sinks.k2.hdfs.useLocalTimeStamp = true

# Binding
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2

End~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章