Flume之使用Kafka_Channel生產數據至Kafka_Topic

前言

  • 操作系統: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中。其中使用到的Flume組件有TailDir Source、2個自定義攔截器Interceptor、Channel Selector、2個Kafka Channel等
# 此Flume Agent配置文件用於將指定文件的更新內容按照類別使用自定義interceptors打上不同的鍵值對,並通過
# Channel Selector按照鍵值對傳輸給不同的Kafka Channel,最後輸出到Kafka集羣指定topic中
# TailDir Source -> interceptors -> Channel Selector -> Kafka Channel -> kafka Topic

# Agent
a1.sources = r1
a1.channels = c1 c2
# 不使用Sink(Kafka Channel可以不使用Sink),主要是將數據採集到Kafka中去

# Sources
# a1.sources.r1
a1.sources.r1.type = TAILDIR
# 設置Json文件存儲路徑(最好使用絕對路徑)
# 用於記錄文件inode/文件的絕對路徑/每個文件的最後讀取位置等信息
a1.sources.r1.positionFile = /opt/module/flume-1.8.0/.position/taildir_position.json
# 指定監控的文件組
a1.sources.r1.filegroups = f1
# 配置文件組中的文件
# 設置f1組的監控文件,注意:使用的是正則表達式,而不是Linux通配符
a1.sources.r1.filegroups.f1 = /tmp/logs/app.+
# 設置Event的Header中插入文件絕對路徑鍵值對
a1.sources.r1.fileHeader = true


# Interceptors
# a1.sources.r1.interceptors
a1.sources.r1.interceptors = i1 i2
# 設置自定義的ETL Interceptor攔截器
a1.sources.r1.interceptors.i1.type = com.tomandersen.flume.interceptor.LogETLInterceptor$Builder
# 設置自定義的Log Type Interceptor攔截器
a1.sources.r1.interceptors.i2.type = com.tomandersen.flume.interceptor.LogTypeInterceptor$Builder


# Channel Selector
# a1.sources.r1.selector
a1.sources.r1.selector.type = multiplexing
# 設置Multiplexing Channel Selector根據日誌類型發往不同的Channel
a1.sources.r1.selector.header = topic
# 將啓動日誌發往c1
a1.sources.r1.selector.mapping.topic_start = c1
# 將事件日誌發往c2
a1.sources.r1.selector.mapping.topic_event = c2

# Channels
# 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
# # 設置註冊的Kafka消費者組,此消費組應該設置成相同,保證同一個消費組中的用戶兩種數據都能讀取
# a1.channels.c1.kafka.consumer.group.id = flume-consumer

# 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.c1所使用的Kafka的topic
a1.channels.c2.kafka.topic = topic_event
# 設置成不按照flume event格式解析數據,因爲同一個Kafka topic可能有非flume Event類數據傳入
a1.channels.c2.parseAsFlumeEvent = false
# # 設置註冊的Kafka消費者組,此消費組應該設置成相同,保證同一個消費組中的用戶兩種數據都能讀取
# a1.channels.c2.kafka.consumer.group.id = flume-consumer


# Bind
a1.sources.r1.channels = c1 c2

End~

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