Flume 整合 Kafka_flume 到kafka 配置【轉】

1.背景
先說一下,爲什麼要使用 Flume + Kafka?

以實時流處理項目爲例,由於採集的數據量可能存在峯值和峯谷,假設是一個電商項目,那麼峯值通常出現在秒殺時,這時如果直接將 Flume 聚合後的數據輸入到 Storm 等分佈式計算框架中,可能就會超過集羣的處理能力,這時採用 Kafka 就可以起到削峯的作用。Kafka 天生爲大數據場景而設計,具有高吞吐的特性,能很好地抗住峯值數據的衝擊。

 

 

2.整合流程
Flume 發送數據到 Kafka 上主要是通過 `KafkaSink` 來實現的,主要步驟如下:

1. 啓動Zookeeper和Kafka

這裏啓動一個單節點的 Kafka 作爲測試:

# 啓動Zookeeper
zkServer.sh start

# 啓動kafka
bin/kafka-server-start.sh config/server.properties
2. 創建主題

創建一個主題 `flume-kafka`,之後 Flume 收集到的數據都會發到這個主題上:

# 創建主題
bin/kafka-topics.sh --create \
--zookeeper hadoop001:2181 \
--replication-factor 1 \
--partitions 1 --topic flume-kafka

# 查看創建的主題
bin/kafka-topics.sh --zookeeper hadoop001:2181 --list
3. 啓動kafka消費者

啓動一個消費者,監聽我們剛纔創建的 `flume-kafka` 主題:

# bin/kafka-console-consumer.sh --bootstrap-server hadoop001:9092 --topic flume-kafka
4. 配置Flume

新建配置文件 `exec-memory-kafka.properties`,文件內容如下。這裏我們監聽一個名爲 `kafka.log` 的文件,當文件內容有變化時,將新增加的內容發送到 Kafka 的 `flume-kafka` 主題上。

a1.sources = s1
a1.channels = c1
a1.sinks = k1

a1.sources.s1.type=exec
a1.sources.s1.command=tail -F /tmp/kafka.log
a1.sources.s1.channels=c1

#設置Kafka接收器
a1.sinks.k1.type= org.apache.flume.sink.kafka.KafkaSink
#設置Kafka地址
a1.sinks.k1.brokerList=hadoop001:9092
#設置發送到Kafka上的主題
a1.sinks.k1.topic=flume-kafka
#設置序列化方式
a1.sinks.k1.serializer.class=kafka.serializer.StringEncoder
a1.sinks.k1.channel=c1

a1.channels.c1.type=memory
a1.channels.c1.capacity=10000
a1.channels.c1.transactionCapacity=100
5. 啓動Flume

flume-ng agent \
--conf conf \
--conf-file /usr/app/apache-flume-1.6.0-cdh5.15.2-bin/examples/exec-memory-kafka.properties \
--name a1 -Dflume.root.logger=INFO,console
6. 測試

向監聽的 `/tmp/kafka.log ` 文件中追加內容,查看 Kafka 消費者的輸出:

 

可以看到 `flume-kafka` 主題的消費端已經收到了對應的消息:

 

轉自

Flume 整合 Kafka_flume 到kafka 配置-CSDN博客
https://blog.csdn.net/shangjg03/article/details/133870099

 

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